執行 Oracle 資料庫執行個體的一般排程任務 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

執行 Oracle 資料庫執行個體的一般排程任務

SYS 擁有的部分排程器任務可能會干擾正常的資料庫作業。Oracle Support 建議您停用這些任務或修改排程。如要執行 SYS 所擁有之 Oracle Scheduler 工作的任務,請使用 Amazon RDS 套件 rdsadmin.rdsadmin_dbms_scheduler

下列 Amazon RDS for Oracle 資料庫引擎版本支援 rdsadmin.rdsadmin_dbms_scheduler 程序:

  • Oracle Database 21c (21.0.0)

  • Oracle 資料庫 19c

Oracle Scheduler 程序的常見參數

若要使用 Oracle Scheduler 執行任務,請使用 Amazon RDS 套件 rdsadmin.rdsadmin_dbms_scheduler 中的程序。有多個參數對該套件中的程序而言都是共通的,以下即為該套件的常見參數。

參數名稱 資料類型 有效值 預設 必要 描述

name

varchar2

'SYS.BSLN_MAINTAIN_STATS_JOB','SYS.CLEANUP_ONLINE_IND_BUILD'

要修改的工作名稱。

注意

目前您只可以修改 SYS.CLEANUP_ONLINE_IND_BUILDSYS.BSLN_MAINTAIN_STATS_JOB 任務。

attribute

varchar2

'REPEAT_INTERVAL','SCHEDULE_NAME'

要修改的屬性。

若要修改任務的重複間隔,請指定 'REPEAT_INTERVAL'

若要修改任務的排程名稱,請指定 'SCHEDULE_NAME'

value

varchar2

根據所使用的屬性,有效的排程間隔或排程名稱。

屬性的新值。

修改 DBMS_SCHEDULER 任務

如要修改 Oracle Scheduler 的某些元件,請使用 Oracle 程序 dbms_scheduler.set_attribute。如需詳細資訊,請參閱 Oracle 文件中的 DBMS_SCHEDULERSET_ATTRIBUTE 程序

使用 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:。若您的執行個體使用企業版,此設定會防止資料庫資源管理員計劃的啟動。

如要修改您的維護視窗設定
  1. 使用 Oracle SQL 用戶端連線至您的資料庫。

  2. 查詢排程器視窗的目前組態。

    下列範例會查詢 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
  3. 使用 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_SCHEDULERSET_SCHEDULER_ATTRIBUTE

修改目前時區設定
  1. 使用如 SQL Developer 的用戶端連線至資料庫。如需更多詳細資訊,請參閱 使用 Oracle SQL Developer 連線至您的資料庫執行個體

  2. 設置預設時區,如下所示,將您的時區替換為 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 時區

關閉 SYS 擁有的 Oracle Scheduler 任務

若要停用 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; /

開啟 SYS 擁有的 Oracle Scheduler 任務

若要開啟 STS 擁有的 Oracle Scheduler 任務,請使用 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 重複間隔

若要修改重複間隔以修改 CALENDAR 類型、系統擁有的 Oracle Scheduler 任務,請使用 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 for 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