Oracle DB インスタンスの一般的なスケジューリングタスクの実行
SYSが所有する一部のスケジューラジョブは、通常のデータベースオペレーションを妨げる可能性があります。このような場合、Oracle サポートはスケジュールを変更することを推奨しています。SYS ジョブを有効または無効にする必要がある場合は、本番環境に実装する前に、テスト環境のスケジュールされたジョブでオペレーションをテストします。Amazon RDS パッケージrdsadmin.rdsadmin_dbms_schedulerを使用して、SYSが所有する Oracle スケジューラジョブのタスクを実行します。
rdsadmin.rdsadmin_dbms_scheduler 手順は、以下の表に示す Amazon RDS for Oracle DB エンジンバージョンでサポートされています。このパッケージを使用する場合は、表に示されている SYS ジョブを指定できます。
| データベースリリース | デフォルトで有効のジョブ | デフォルトで無効のジョブ |
|---|---|---|
| Oracle Database 19c |
|
|
| Oracle Database 21c |
|
|
Oracle Scheduler プロシージャの共通パラメータ
Oracle Scheduler のタスクを実行するには、Amazon RDS パッケージ rdsadmin.rdsadmin_dbms_scheduler を使用します。いくつかのパラメータは、パッケージ内のすべてのプロシージャに共通です。パッケージ内の共通パラメータは以下のとおりです。
| パラメータ名 | データ型 | 有効な値 | デフォルト | 必須 | 説明 |
|---|---|---|---|---|---|
|
|
varchar2 |
「Oracle DB インスタンスの一般的なスケジューリングタスクの実行」の表に記載されている手順 |
— |
あり |
変更するジョブの名前。 |
|
|
varchar2 |
|
– |
はい |
変更する属性。 ジョブの繰り返し間隔を変更するには、 ジョブのスケジュール名を変更するには、 |
|
|
varchar2 |
使用される属性に応じて、有効なスケジュール間隔またはスケジュール名。 |
– |
はい |
属性の新しい値。 |
DBMS_SCHEDULER ジョブの変更
Oracle 手順dbms_scheduler.set_attributeを使用して、Oracle スケジューラの特定のコンポーネントを変更します。詳細については、Oracle ドキュメントの「DBMS_SCHEDULER
Amazon RDS DB インスタンスを使用するときは、オブジェクト名にスキーマ名 SYS を付加します。次の例では、Monday ウィンドウオブジェクトのリソースプラン属性を設定します。
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'SYS.MONDAY_WINDOW', attribute => 'RESOURCE_PLAN', value => 'resource_plan_1'); END; /
自動タスクメンテナンスウィンドウの変更
Amazon RDS for Oracle インスタンスは、メンテナンスウィンドウのデフォルト設定で作成されます。オプティマイザ統計収集などの自動メンテナンスタスクは、これらのウィンドウで実行されます。デフォルトでは、メンテナンスウィンドウは Oracle Database リソースマネージャーをオンにします。
DBMS_SCHEDULERパッケージを使用して。ウィンドウを変更します。次のような理由から、メンテナンスウィンドウの設定を変更する必要がある場合があります。
-
メンテナンスジョブを別の時間に実行するか、異なる設定で実行するか、まったく実行しないようにする。例えば、ウィンドウの継続時間を変更したり、繰り返し時間と間隔を変更したりできます。
-
メンテナンス中にリソースマネージャーを有効にしたときの、パフォーマンスへの影響を回避する必要があります。例えば、デフォルトのメンテナンスプランが指定されていて、データベースがロードされている間にメンテナンスウィンドウが開いた場合、
resmgr:cpu quantumのような待機イベントを表示する必要があります。この待機イベントは、データベースリソースマネージャーに関連しています。次のオプションがあります。-
DB インスタンスのオフピーク時にメンテナンスウィンドウがアクティブであることを確認します。
-
デフォルトのメンテナンスプランを無効にするには、空の文字列に
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 を使用した DB インスタンスへの接続」を参照してください。
-
デフォルトのタイムゾーンを以下のように設定し、
をお客様のタイムゾーンに置き換えます。time_zone_nameBEGIN 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 ジョブを有効にする
SYS が所有する 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 タイプ の SYS 所有の 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 ジョブでは、間隔ではなくスケジュール名が使用されます。このようなタイプのジョブの場合、マスターユーザースキーマに新しい名前付きスケジュールを作成する必要があります。これを行うには、スタンダードの 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