本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
執行 Oracle 資料庫執行個體的一般排程任務
SYS
擁有的部分排程器任務可能會干擾正常的資料庫作業。在這種情況下,Oracle Support 建議您修改排程。如果您需要啟用或停用SYS
任務,請在測試環境中測試排程任務的操作,然後再將其實作到生產環境中。若要為 擁有的 Oracle Scheduler 任務執行任務SYS
,請使用 Amazon RDS套件 rdsadmin.rdsadmin_dbms_scheduler
。
下表所示的 Amazon RDS for Oracle 資料庫引擎版本支援這些rdsadmin.rdsadmin_dbms_scheduler
程序。使用此套件時,您可以指定 資料表中列出的SYS
任務。
資料庫版本 | 預設啟用的任務 | 預設停用的任務 |
---|---|---|
Oracle 資料庫 19c |
|
|
Oracle Database 21c |
|
|
Oracle Scheduler 程序的常見參數
若要使用 Oracle Scheduler 執行任務,請使用 Amazon RDS套件 中的程序rdsadmin.rdsadmin_dbms_scheduler
。有多個參數對該套件中的程序而言都是共通的,以下即為該套件的常見參數。
參數名稱 | 資料類型 | 有效值 | 預設 | 必要 | 描述 |
---|---|---|---|---|---|
|
varchar2 |
中資料表中列出的程序 執行 Oracle 資料庫執行個體的一般排程任務 |
— |
是 |
要修改的工作名稱。 |
|
varchar2 |
|
– |
是 |
要修改的屬性。 若要修改任務的重複間隔,請指定 若要修改任務的排程名稱,請指定 |
|
varchar2 |
根據所使用的屬性,有效的排程間隔或排程名稱。 |
– |
是 |
屬性的新值。 |
修改 DBMS_SCHEDULER 任務
如要修改 Oracle Scheduler 的某些元件,請使用 Oracle 程序 dbms_scheduler.set_attribute
。如需詳細資訊,請參閱 Oracle 文件中的 DBMS_SCHEDULER
使用 Amazon RDS 資料庫執行個體時,請在SYS
物件名稱前面加上結構描述名稱。下列範例會設定 Monday 視窗物件的資源計劃屬性。
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE( name => '
SYS.MONDAY_WINDOW
', attribute => 'RESOURCE_PLAN
', value => 'resource_plan_1
'); END; /
修改 AutoTask 維護時段
Amazon RDS for Oracle 執行個體是使用維護時段的預設設定建立的。在這些視窗期間執行自動維護任務,例如最佳化處理程式統計數字收集。依預設,維護視窗會開啟 Oracle 資料庫資源管理員。
如要修改視窗,請使用 DBMS_SCHEDULER
套件。您可能需要修改維護視窗設定,原因如下:
-
您希望在不同時間執行的維護任務,使用不同的設定,或完全不執行。例如,可能想要修改視窗持續時間,或變更重複時間和間隔。
-
您想要避免在維護期間啟用資源管理員的效能影響。例如,若已指定預設維護計劃,且在資料庫負載下時開啟維護視窗,您可能會看到等待事件,例如
resmgr:cpu quantum
。此等待事件與資料庫資源管理員有關。您有下列選項:-
確保資料庫執行個體的離峰時間期間維護視窗處於作用中狀態。
-
藉由將
resource_plan
屬性設定為空字串,停用預設維護計劃。 -
將您參數群組中的
resource_manager_plan
參數設為FORCE:
。若您的執行個體使用企業版,此設定會防止資料庫資源管理員計劃的啟動。
-
如要修改您的維護視窗設定
-
使用 Oracle SQL用戶端連線至資料庫。
-
查詢排程器視窗的目前組態。
下列範例會查詢
MONDAY_WINDOW
的組態。SELECT ENABLED, RESOURCE_PLAN, DURATION, REPEAT_INTERVAL FROM DBA_SCHEDULER_WINDOWS WHERE WINDOW_NAME='MONDAY_WINDOW';
下列輸出顯示該窗口正使用預設值。
ENABLED RESOURCE_PLAN DURATION REPEAT_INTERVAL --------------- ------------------------------ ---------------- ------------------------------ TRUE DEFAULT_MAINTENANCE_PLAN +000 04:00:00 freq=daily;byday=MON;byhour=22 ;byminute=0; bysecond=0
-
使用
DBMS_SCHEDULER
套件修改視窗。下列範例會將資源計劃設定為 null,則資源管理員不會在維護視窗期間執行。
BEGIN -- disable the window to make changes DBMS_SCHEDULER.DISABLE(name=>'"SYS"."MONDAY_WINDOW"',force=>TRUE); -- specify the empty string to use no plan DBMS_SCHEDULER.SET_ATTRIBUTE(name=>'"SYS"."MONDAY_WINDOW"', attribute=>'RESOURCE_PLAN', value=>''); -- re-enable the window DBMS_SCHEDULER.ENABLE(name=>'"SYS"."MONDAY_WINDOW"'); END; /
下列範例會將視窗的最長持續時間設定為 2 小時。
BEGIN DBMS_SCHEDULER.DISABLE(name=>'"SYS"."MONDAY_WINDOW"',force=>TRUE); DBMS_SCHEDULER.SET_ATTRIBUTE(name=>'"SYS"."MONDAY_WINDOW"', attribute=>'DURATION', value=>'0 2:00:00'); DBMS_SCHEDULER.ENABLE(name=>'"SYS"."MONDAY_WINDOW"'); END; /
下列範例會將重複間隔設定為每個星期一上午 10 點。
BEGIN DBMS_SCHEDULER.DISABLE(name=>'"SYS"."MONDAY_WINDOW"',force=>TRUE); DBMS_SCHEDULER.SET_ATTRIBUTE(name=>'"SYS"."MONDAY_WINDOW"', attribute=>'REPEAT_INTERVAL', value=>'freq=daily;byday=MON;byhour=10;byminute=0;bysecond=0'); DBMS_SCHEDULER.ENABLE(name=>'"SYS"."MONDAY_WINDOW"'); END; /
設定 Oracle Scheduler 任務的時區
若要修改 Oracle Scheduler 的時區,您可以使用 Oracle 程序 dbms_scheduler.set_scheduler_attribute
。如需dbms_scheduler
套件的詳細資訊,請參閱 Oracle 文件中的 DBMS_SCHEDULER
修改目前時區設定
-
使用 SQL Developer 等用戶端連線至資料庫。如需詳細資訊,請參閱使用 Oracle SQL Developer 連線至您的資料庫執行個體。
-
設置預設時區,如下所示,將您的時區替換為
。time_zone_name
BEGIN DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE( attribute => 'default_timezone', value => '
time_zone_name
' ); END; /
在下列範例中,您將時區變更為亞洲/上海。
從查詢目前的時區開始,如下所示。
SELECT VALUE FROM DBA_SCHEDULER_GLOBAL_ATTRIBUTE WHERE ATTRIBUTE_NAME='DEFAULT_TIMEZONE';
輸出顯示目前時區為 ETC/UTC。
VALUE ------- Etc/UTC
然後您將時區設定為亞洲/上海。
BEGIN DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE( attribute => 'default_timezone', value => 'Asia/Shanghai' ); END; /
如需變更系統時區的詳細資訊,請參閱Oracle 時區。
關閉 擁有的 Oracle Scheduler 任務 SYS
若要停用SYS使用者擁有的 Oracle Scheduler 任務,請使用 rdsadmin.rdsadmin_dbms_scheduler.disable
程序。
這個程序會對 Oracle Scheduler 任務使用 name
一般參數。如需更多詳細資訊,請參閱 Oracle Scheduler 程序的常見參數。
下列範例會停用 SYS.CLEANUP_ONLINE_IND_BUILD
Oracle Scheduler 任務。
BEGIN rdsadmin.rdsadmin_dbms_scheduler.disable('SYS.CLEANUP_ONLINE_IND_BUILD'); END; /
開啟 擁有的 Oracle Scheduler 任務 SYS
若要開啟 擁有的 Oracle Scheduler 任務SYS,請使用 rdsadmin.rdsadmin_dbms_scheduler.enable
程序。
這個程序會對 Oracle Scheduler 任務使用 name
一般參數。如需更多詳細資訊,請參閱 Oracle Scheduler 程序的常見參數。
下列範例會啟用 SYS.CLEANUP_ONLINE_IND_BUILD
Oracle Scheduler 任務。
BEGIN rdsadmin.rdsadmin_dbms_scheduler.enable('SYS.CLEANUP_ONLINE_IND_BUILD'); END; /
修改 CALENDAR類型任務的 Oracle Scheduler 重複間隔
若要修改重複間隔,以修改 SYS擁有的 Oracle Scheduler CALENDAR
任務類型,請使用 rdsadmin.rdsadmin_dbms_scheduler.disable
程序。
這個程序會對 Oracle Scheduler 任務使用下列一般參數:
-
name
-
attribute
-
value
如需更多詳細資訊,請參閱 Oracle Scheduler 程序的常見參數。
下列範例會修改 SYS.CLEANUP_ONLINE_IND_BUILD
Oracle Scheduler 任務的重複間隔。
BEGIN rdsadmin.rdsadmin_dbms_scheduler.set_attribute( name => 'SYS.CLEANUP_ONLINE_IND_BUILD', attribute => 'repeat_interval', value => 'freq=daily;byday=FRI,SAT;byhour=20;byminute=0;bysecond=0'); END; /
修改 NAMED類型任務的 Oracle Scheduler 重複間隔
有些 Oracle Scheduler 任務會使用排程名稱,而非間隔。針對此類型的任務,您必須在主要使用者結構描述中建立新的指定排程。請使用標準的 Oracle sys.dbms_scheduler.create_schedule
程序來執行此動作。同時,使用 rdsadmin.rdsadmin_dbms_scheduler.set_attribute
procedure
將新命名的排程指派給任務。
這個程序會對 Oracle Scheduler 任務使用下列一般參數:
-
name
-
attribute
-
value
如需更多詳細資訊,請參閱 Oracle Scheduler 程序的常見參數。
下列範例會修改 SYS.BSLN_MAINTAIN_STATS_JOB
Oracle Scheduler 任務的重複間隔。
BEGIN DBMS_SCHEDULER.CREATE_SCHEDULE ( schedule_name => 'rds_master_user.new_schedule', start_date => SYSTIMESTAMP, repeat_interval => 'freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=0;byminute=0;bysecond=0', end_date => NULL, comments => 'Repeats daily forever'); END; / BEGIN rdsadmin.rdsadmin_dbms_scheduler.set_attribute ( name => 'SYS.BSLN_MAINTAIN_STATS_JOB', attribute => 'schedule_name', value => 'rds_master_user.new_schedule'); END; /
建立 Oracle Scheduler 任務時關閉自動認可
DBMS_SCHEDULER.CREATE_JOB
建立 Oracle Scheduler 任務時,其會立即建立任務並認可變更。您可能需要在使用者交易中納入 Oracle Scheduler 任務的建立,來執行下列動作:
-
復原使用者交易後,復原 Oracle Schedule 任務。
-
認可主要使用者交易後,建立 Oracle Scheduler 任務。
您可以使用程序 rdsadmin.rdsadmin_dbms_scheduler.set_no_commit_flag
開啟此行為。這個程序不需採用任何參數。您可以在下列 RDS Oracle 版本中使用此程序:
-
21.0.0.0.ru-2022-07.rur-2022-07.r1 和更新版本
-
19.0.0.0.ru-2022-07.rur-2022-07.r1 和更新版本
下列範例會關閉 Oracle Scheduler 的自動認可、建立 Oracle Scheduler 任務,然後復原交易。因為自動認可已關閉,所以此資料庫也會復原 Oracle Scheduler 任務的建立。
BEGIN rdsadmin.rdsadmin_dbms_scheduler.set_no_commit_flag; DBMS_SCHEDULER.CREATE_JOB(job_name => 'EMPTY_JOB', job_type => 'PLSQL_BLOCK', job_action => 'begin null; end;', auto_drop => false); ROLLBACK; END; / PL/SQL procedure successfully completed. SELECT * FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME='EMPTY_JOB'; no rows selected