30 Oracle Schedulerの管理
Oracle Schedulerを構成、管理、監視およびトラブルシューティングできます。
ノート:
この章では、DBMS_SCHEDULER
パッケージを使用してOracle Schedulerを管理する方法について説明します。Oracle Enterprise Manager Cloud Controlを使用して、数多くの同じタスクを実行できます。
DBMS_SCHEDULER
の詳細は『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を、Oracle Schedulerの各ページの詳細はCloud Controlのオンライン・ヘルプを参照してください。
CDBでのOracle Schedulerの使用の詳細は、『Oracle Multitenant管理者ガイド』を参照してください。
- Oracle Schedulerの構成
Oracle Schedulerの構成には、権限およびプリファレンスの設定、Oracle Schedulerエージェントを使用したリモート・ジョブの実行などのタスクが含まれます。 - スケジューラの監視と管理
現在アクティブなウィンドウとそれに関連付けられているリソース・プランの表示、現在実行中のジョブに関する情報の表示、ウィンドウおよびジョブのログの監視と管理、およびスケジューラのセキュリティ管理を実行できます。 - インポート/エクスポートおよびスケジューラ
スケジューラ・オブジェクトをエクスポートするには、データ・ポンプ・ユーティリティ(impdp
およびexpdp
)を使用します。 - スケジューラのトラブルシューティング
スケジューラでの問題をトラブルシューティングできます。 - スケジューラの使用例
スケジューラの使用例を示します。 - スケジューラの参照情報
スケジューラに関連するいくつかの権限およびデータ・ディクショナリ・ビューがあります。
親トピック: データベース・リソースの管理とタスクのスケジューリング
30.1 Oracle Schedulerの構成
Oracle Schedulerの構成には、権限およびプリファレンスの設定、Oracle Schedulerエージェントを使用したリモート・ジョブの実行などのタスクが含まれます。
- Oracle Schedulerの権限の設定
Oracle Schedulerのすべての管理タスクを実行するには、SCHEDULER_ADMIN
ロールが必要です。通常、データベース管理者(DBA)は、DBA
ロールの一部として、ADMIN
オプション付きでこのロールをすでに持っています。 - スケジューラのプリファレンスの設定
システム全体にわたる設定可能なスケジューラのプリファレンスがいくつかあります。これらのプリファレンスを設定するには、DBMS_SCHEDULER
パッケージのSET_SCHEDULER_ATTRIBUTE
プロシージャでスケジューラの属性を設定します。 - Oracle Schedulerエージェントを使用したリモート・ジョブの実行
Oracle Schedulerエージェントは、リモート・ジョブをスケジュールおよび実行できます。
親トピック: Oracle Schedulerの管理
30.1.1 Oracle Schedulerの権限の構成
Oracle Schedulerのすべての管理タスクを実行するには、SCHEDULER_ADMIN
ロールが必要です。通常、データベース管理者(DBA)は、DBA
ロールの一部として、ADMIN
オプション付きでこのロールをすでに持っています。
たとえば、ユーザーSYS
およびSYSTEM
には、DBA
ロールが付与されます。このロールは、次の文を発行して別の管理者に付与できます。
GRANT SCHEDULER_ADMIN TO username;
SCHEDULER_ADMIN
ロールは、権限を付与されたユーザーがコードを任意のユーザーとして実行できる強力なロールであるため、かわりにスケジューラの個々のシステム権限を付与することを考慮してください。オブジェクトおよびシステム権限は通常のSQL付与構文を使用して付与されます。たとえば、データベース管理者が次の文を発行したとします。
GRANT CREATE JOB TO scott;
この文が実行されると、scott
は、自分のスキーマ内にジョブ、スケジュール、プログラムおよびFile Watcherを作成できます。別の例として、データベース管理者は次の文を発行できます。
GRANT MANAGE SCHEDULER TO adam;
この文が実行されると、adam
はウィンドウ、ジョブ・クラスまたはウィンドウ・グループを、作成、変更または削除できます。また、adam
はスケジューラ属性の設定と取得、およびスケジューラ・ログのパージもできます。
チェーンの各権限の設定
スケジューラ・チェーンでは、基礎となるOracleルール・エンジン・オブジェクトと、それに関連する権限を使用します。ユーザーが自分のスキーマにチェーンを作成するには、自分のスキーマにルール、ルール・セットおよび評価コンテキストを作成するためのルール・エンジン権限に加え、CREATE
JOB
権限が必要です。これらの権限は、次の文を発行することで付与できます。
GRANT CREATE RULE, CREATE RULE SET, CREATE EVALUATION CONTEXT TO user;
ユーザーが、別のスキーマにチェーンを作成するには、自分のスキーマ以外のスキーマにルール、ルール・セットおよび評価コンテキストを作成するためのルール・エンジン権限に加え、CREATE
ANY
JOB
権限が必要です。これらの権限は、次の文を発行することで付与できます。
GRANT CREATE ANY RULE, CREATE ANY RULE SET,
CREATE ANY EVALUATION CONTEXT TO user;
各自のスキーマ以外のスキーマのチェーンを変更または削除するには、ルール、ルール・セットおよび評価コンテキストについて、対応する各システムのルール・エンジン権限が必要です。
関連項目:
チェーンの権限の詳細は、「チェーンのタスクとそのプロシージャ」を参照してください。
親トピック: Oracle Schedulerの構成
30.1.2 スケジューラのプリファレンスの設定
システム全体にわたる設定可能なスケジューラのプリファレンスがいくつかあります。これらのプリファレンスを設定するには、DBMS_SCHEDULER
パッケージのSET_SCHEDULER_ATTRIBUTE
プロシージャでスケジューラの属性を設定します。
これらの属性を設定するには、MANAGE
SCHEDULER
権限が必要です。属性は次のとおりです。
-
default_timezone
この属性を設定することは非常に重要です。カレンダ構文式を使用する繰返しジョブおよびウィンドウには、繰返し間隔に使用するタイムゾーンに関する情報が必要です。「スケジューラのカレンダ指定構文の使用方法」を参照してください。通常は、
start_date
からタイムゾーンを取得しますが、start_date
が指定されていない場合(珍しいことではありません)は、default_timezone
Scheduler属性から取得します。スケジューラは、
default_timezone
の値をオペレーティング・システム環境から導出します。オペレーティング・システムから互換性のある値を検出できない場合、スケジューラはdefault_timezone
をNULL
に設定します。default_timezone
が正しく設定されていることを確認することは非常に重要であり、そうでない場合は正しく設定してください。これを確認するには、次の問合せを実行します。SELECT DBMS_SCHEDULER.STIME FROM DUAL; STIME --------------------------------------------------------------------------- 28-FEB-12 09.04.10.308959000 PM UTC
確実に夏時間が適用されるようにするには、
default_timezone
を、'-8:00'のような絶対タイム・ゾーン・オフセットではなく、リージョン名に設定することをお薦めします。たとえば、データベースが米国フロリダ州のマイアミにある場合は、次の文を発行します。DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE('default_timezone','US/Eastern');
同様に、データベースがパリにある場合は、この属性を
'Europe/Warsaw'
に設定します。有効なリージョン名のリストを表示するには、次の問合せを実行します。SELECT DISTINCT TZNAME FROM V$TIMEZONE_NAMES;
default_timezone
属性を適切に設定しないと、繰返しジョブや繰返しウィンドウに使用されるデフォルトのタイム・ゾーンは、SYSTIMESTAMP
から取り出される絶対オフセット(データベースのオペレーティング・システム環境のタイム・ゾーン)となります。これは、start_date
が設定されていない繰返しジョブや繰返しウィンドウでは、夏時間調整が適用されないことになります。 -
email_server
この属性には、ジョブの状態イベントに対する電子メール通知を送信するためにスケジューラで使用されるSMTPサーバーのアドレスを指定します。書式は次のとおりです。
host[:port]
ここで:
-
host
は、SMTPサーバーのホスト名またはIPアドレスです。 -
port
は、SMTPサーバーがリスニングするTCPポートです。指定しない場合は、デフォルト・ポート25が使用されます。
この属性が指定されていないか、
NULL
または無効なSMTPサーバー・アドレスに設定されていると、ジョブの状態に関する電子メール通知をスケジューラで送信できません。 -
-
email_sender
この属性には、ジョブ状態の電子メール通知の送信者のデフォルト電子メール・アドレスを指定します。有効な電子メール・アドレスを指定する必要があります。この属性が設定されていないか、
NULL
に設定されている場合、送信者アドレスが指定されていないジョブ状態の電子メール通知では、電子メール・ヘッダーのFROMアドレスが指定されません。 -
email_server_credential
この属性は、既存の資格証明オブジェクトのスキーマおよび名前を指定します。デフォルトは
NULL
です。電子メール通知が送信されると、スケジューラは
email_server_credential
が指している資格証明オブジェクトを確認して、SYS
がEXECUTEオブジェクト権限を持つ有効な資格証明オブジェクトであるかどうかを判断します。email_server
属性に指定されているSMTPサーバーが認証を必要とする場合、スケジューラは指定された資格証明オブジェクトに格納されているユーザー名とパスワードを使用して電子メール・サーバーで認証します。email_server_credential
を指定している場合、email_server
属性には認証を必要とするSMTPサーバーを指定する必要があります。email_server_credential
を指定していない場合、スケジューラでは認証が構成されていないSMTPサーバーを介して通知電子メールを送信できます。 -
email_server_encryption
この属性は、このSMTPサーバー接続で暗号化が有効であるかどうかを示し、有効である場合には暗号化を開始する時点と使用するプロトコルも示します。
email_server_encryption
の値は、次のとおりです。NONE
: デフォルト値で、暗号化が有効でないことを示します。SSL_TLS
: 接続が確立された当初からSSL
またはTLS
が使用されることを示します。両側から、どのプロトコルが最も安全であるかが判断されます。これが、このパラメータに最もよく使用される設定です。STARTTLS
: 暗号化なしで接続を開始するものの、STARTTLS
コマンドの指示があると、電子メール・サーバーがTLS
を使用して暗号化を開始することを示します。 -
event_expiry_time
この属性を使用すると、スケジューラが生成したジョブの状態イベントが終了する(自動的にスケジューラ・イベント・キューからパージされる)までの時間(秒)を設定できます。
NULL
に設定すると、ジョブの状態イベントは24時間後に期限切れになります。 -
log_history
この属性は、ジョブ・ログとウィンドウ・ログの両方のログ・エントリが保持される日数を制御します。これにより、ログが無制限に大きくなるのを防ぐことができます。有効値の範囲は、0から1000000です。0に設定すると、履歴は保持されません。デフォルト値は30です。ジョブ・クラスの
log_history
属性に値を設定することにより、ジョブ・クラス・レベルでこの値をオーバーライドできます。
SET_SCHEDULER_ATTRIBUTE
プロシージャの構文は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
親トピック: Oracle Schedulerの構成
30.1.3 Oracle Scheduler Agentを使用したリモート・ジョブの実行
Oracle Schedulerエージェントは、リモート・ジョブをスケジュールおよび実行できます。
Oracle Scheduler Agentを使用して、スケジューラは次の2種類のリモート・ジョブをスケジュールおよび実行できます。
-
リモート・データベース・ジョブ: リモート・データベース・ジョブはOracle Scheduler Agentを介して実行する必要があります。リモート・データベースと同じホストにエージェントをインストールすることをお薦めします。
リモート・データベース・ジョブを実行する場合は、Oracle Database 11g リリース2 (11.2)以降のスケジューラ・エージェントが必要です。
-
リモート外部ジョブ: リモート外部ジョブは、スケジューラ・エージェントがインストールされているのと同じホストで実行されます。
リモート外部ジョブのみを実行する場合は、Oracle Database 11g リリース1 (11.1)のスケジューラ・エージェントで十分です。
リモート外部ジョブが実行されるすべてのホストにスケジューラ・エージェントをインストールする必要があります。リモート・データベース・ジョブが実行されるリモート・データベースが動作するすべてのホストにスケジューラ・エージェントをインストールする必要があります。
リモート・ジョブが実行される各データベースでは、「リモート・ジョブを実行するためのデータベースの設定」の説明に従って、データベースとリモート・スケジューラ・エージェント間のセキュアな通信を有効にするための初期設定を行う必要があります。
リモート・ジョブの有効化には、次のステップが含まれます。
- リモート・ジョブのためのデータベースの有効化と無効化
リモート・ジョブ用のデータベースを設定すること、およびリモート・ジョブ用のデータベースを無効にすることができます。 - リモート・ホストでのスケジューラ・エージェントのインストールと構成
特定のホスト上のリモート・ジョブを実行できるようにするには、スケジューラ・エージェントをインストールおよび構成する必要があります。 - スケジューラ・エージェントによるタスクの実行
スケジューラ・エージェントは、外部ジョブとデータベース・ジョブをリモート・ホストでスケジュールおよび実行できるようにするスタンドアロン・プログラムです。スケジューラ・エージェントの起動と停止には、UNIXおよびLinuxではschagent
ユーティリティを使用し、WindowsではOracleSchedulerExecutionAgent
サービスを使用します。
関連項目:
-
リモート・データベース・ジョブの詳細は、「データベース・ジョブ」
親トピック: Oracle Schedulerの構成
30.1.3.1 リモート・ジョブを実行するためのデータベースの設定の有効化と無効化
リモート・ジョブ用のデータベースの設定、およびリモート・ジョブ用のデータベースを無効にすることができます。
- リモート・ジョブを実行するためのデータベースの設定
データベースでリモートのスケジューラ・エージェントを使用してジョブを実行するには、その前に、データベースを正しく構成し、そのエージェントをデータベースに登録しておく必要があります。 - リモート・ジョブの無効化
データベースのリモート・ジョブは、REMOTE_SCHEDULER_AGENT
ユーザーを削除することで、無効にできます。
30.1.3.1.1 リモート・ジョブを実行するためのデータベースの設定
データベースでリモートのスケジューラ・エージェントを使用してジョブを実行するには、その前に、データベースを正しく構成し、そのエージェントをデータベースに登録しておく必要があります。
この項では、データベースに必要なエージェント登録パスワードなどの構成について説明します。「スケジューラ・エージェントのデータベースへの登録」に示されているように、後でデータベースを登録します。
登録できるスケジューラ・エージェントの数を制限して、パスワードの有効期限を設定できます。
リモート・ジョブを作成および実行するデータベースごとに1回、次のすべてのステップを実行します。
リモート・ジョブを作成および実行するデータベースを設定するには:
-
共有サーバーが使用可能であることを確認します。
「共有サーバーの使用可能化」を参照してください。
同じデータベースで複数のスケジューラ・エージェントを使用する場合は、それらのエージェントが並行して動作しようとした場合のエラーを回避するために、
SHARED_SERVERS
データベース初期化パラメータを十分に高い値に設定します。ノート:
マルチテナント・モードで実行している場合、
CDB$ROOT
で匿名アカウントのロックを解除する必要があります。SQL*Plusを使用して、
SYS
ユーザーとしてCDB$ROOT
に接続し、次のコマンドを入力します。SQL> alter session set container = CDB$ROOT; SQL> alter user anonymous account unlock container=current;
-
SQL*Plusを使用して、
SYS
ユーザーとしてデータベースに接続します(マルチテナント・モード下のプラガブル・データベースを指定)。 -
次のコマンドを入力して、XML DBオプションがインストールされていることを確認します。
SQL> DESC RESOURCE_VIEW
XML DBがインストールされていない場合は、このコマンドで「オブジェクトが存在しません。」エラーが戻ります。
ノート:
XML DBがインストールされていない場合は、先に進む前にXML DBをインストールする必要があります。
-
HTTPS接続を使用している場合は、次に示すようにデータベース・ウォレットに証明書を追加します。
ノート:
証明書の追加中はデータベースがウォレットを使用していないことを確認してください。そうでない場合は、データベースを停止している間に証明書を追加して、その後でデータベースを起動します。
-
ORACLE_HOME/admin/$ORACLE_SID/xdb_wallet
ディレクトリに既存のデータベース・ウォレットがない場合は、orapki
コマンドライン・ユーティリティを使用してウォレットを作成します。たとえば:orapki wallet create -wallet $ORACLE_HOME/admin/$ORACLE_SID/xdb_wallet -pwd wallet_password -auto_login
-
orapki
コマンドライン・ユーティリティを使用してウォレットに証明書を追加します。たとえば:orapki wallet add -wallet $ORACLE_HOME/admin/$ORACLE_SID/xdb_wallet -dn CN=fully_qualified_domain_name -self_signed -pwd wallet_password -validity number_of_days -keysize key_size_for_the_certificate(512|1024|2048)
関連項目:
orapki
ユーティリティを使用してデータベース・ウォレットに証明書を追加する際の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください -
-
次のように、データベースへのHTTP(S)接続を有効にします。
-
Oracle XML DBM HTTP(S)サーバーが有効であるかどうかを判断します。
HTTP接続の場合は、次のコマンドを実行します。
SQL> SELECT DBMS_XDB_CONFIG.GETHTTPPORT() FROM DUAL;
HTTPS接続の場合は、次のコマンドを実行します。
SQL> SELECT DBMS_XDB_CONFIG.GETHTTPSPORT() FROM DUAL;
文が
0
を返した場合、Oracle XML DBM HTTP(S)サーバーは無効になっています。 -
0(ゼロ)以外のポートでOracle XML DB HTTP(S)サーバーを有効にするには、
SYS
としてログインし、次のコマンドを実行します。HTTP接続を使用している場合:
SQL> EXEC DBMS_XDB_CONFIG.SETHTTPPORT (port); SQL> COMMIT;
HTTPS接続を使用している場合:
SQL> EXEC DBMS_XDB_CONFIG.SETHTTPSPORT (port); SQL> COMMIT;
port
は、データベースがHTTP(S)接続をリスニングするTCPポート番号です。port
には1から65536の整数を指定しますが、UNIXおよびLinuxの場合は、1023より大きな値にします。まだ使用されていないポート番号を選択します。エージェント登録プロシージャ中、後で正確なプラガブル・データベースをスケジューラ・エージェントが特定できるように、各プラガブル・データベースでは固有のポート番号を使用する必要があります。
ノート:
-
これにより、Oracle Real Application ClustersデータベースのすべてのインスタンスでHTTP(S)接続が使用可能になります。
-
Oracle Databaseリリース18c以降は、Oracle SchedulerエージェントでHTTPS接続がサポートされています。
-
-
-
次のコマンドを使用して、スクリプト
prvtrsch.plb
を実行します。SQL> @?/rdbms/admin/prvtrsch.plb
-
SET_AGENT_REGISTRATION_PASS
プロシージャを使用して、スケジューラ・エージェントの登録パスワードを設定します。次の例では、エージェント登録パスワードを
mypassword
に設定します。BEGIN DBMS_SCHEDULER.SET_AGENT_REGISTRATION_PASS('mypassword'); END; /
ノート:
エージェント登録パスワードを設定するには、
MANAGE SCHEDULER
権限が必要です。SET_AGENT_REGISTRATION_PASS
プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。実際の登録は、「スケジューラ・エージェントのデータベースへの登録」で行います。
30.1.3.2 リモート・ホストでのスケジューラ・エージェントのインストールと構成
特定のホスト上のリモート・ジョブを実行できるようにするには、スケジューラ・エージェントをインストールおよび構成する必要があります。
スケジューラ・エージェントをインストールおよび構成した後、「スケジューラ・エージェントによるタスクの実行」で説明しているように、ホスト上のスケジューラ・エージェントを登録し、起動する必要があります。スケジューラ・エージェントも、独自のOracleホームにインストールする必要があります。
スケジューラ・エージェントをリモート・ホストにインストールおよび構成するには:
-
スケジューラ・エージェント・ソフトウェアをダウンロードまたは入手します。このソフトウェアはOracle Databaseクライアントのインストール・メディア(Databaseのインストール・メディア)に収録されており、次のサイトからオンラインで入手することもできます。
-
最初に、エージェントを登録するデータベースが正しく設定されていることを確認します。
手順は、「リモート・ジョブを実行するためのデータベースの設定の有効化と無効化」を参照してください。
-
スケジューラ・エージェントをインストールするホストにログインします。このホストがリモート・ジョブを実行します。
-
Windowsの場合は、管理者としてログインします。
-
UNIXおよびLinuxの場合は、スケジューラ・エージェントを実行する予定のユーザーとしてログインします。このユーザーに特別な権限は必要ありません。
-
-
Oracle Databaseクライアント製品のインストール・メディアからOracle Universal Installer(OUI)を実行します。
-
Windowsの場合は、
setup.exe
を実行します。 -
UNIXおよびLinuxの場合は、次のコマンドを使用します。
/directory_path/runInstaller
directory_path
は、Oracle Databaseクライアント製品のインストール・メディアへのパスです。 -
-
「インストール・タイプの選択」ページで、「カスタム」を選択して、「次へ」をクリックします。
-
「製品言語の選択」ページで、対象の言語を選択して、「次へ」をクリックします。
-
「インストール場所の指定」ページで、エージェントの新しいOracleホームのパスを入力して、「次へ」をクリックします。
-
「使用可能な製品コンポーネント」ページで、「Oracle Scheduler Agent」を選択して、「次へ」をクリックします。
-
「Oracle Database Scheduler Agent」ページで、次の手順を実行します。
-
「Scheduler Agentのホスト名」フィールドに、スケジューラ・エージェントをインストールするコンピュータのホスト名を入力します。
-
「Scheduler Agentのポート番号」フィールドに、スケジューラ・エージェントが接続をリスニングするTCPポート番号を入力するか、デフォルトを使用して、「次へ」をクリックします。
1から65535の整数を選択します。UNIXおよびLinuxの場合は、1023より大きい値にする必要があります。選択するポート番号がまだ使用されていないことを確認します。
OUIで、一連の前提条件チェックが実行されます。前提条件チェックが失敗した場合は、問題を解決してから「次へ」をクリックします。
-
-
「サマリー」ページで「終了」をクリックします。
-
(UNIXおよびLinuxのみ)OUIがスクリプト
root.sh
の実行を求めるプロンプトを表示したら、root
ユーザーとして次のコマンドを入力します。script_path/root.sh
このスクリプトは、エージェントのインストール用に選択したディレクトリに格納されています。
スクリプトが完了したら、「構成スクリプトの実行」ダイアログ・ボックスで「OK」をクリックします。
-
インストールが完了したら、「閉じる」をクリックしてOUIを終了します。
-
テキスト・エディタを使用して、スケジューラ・エージェントのホーム・ディレクトリにあるエージェント構成パラメータ・ファイル
schagent.conf
のPORT=
ディレクティブのポート番号を確認します。 -
リモート・ホスト上のファイアウォール・ソフトウェア、またはそのホストを保護する他のファイアウォールに、スケジューラ・エージェントに対応するための例外があることを確認します。
30.1.3.3 スケジューラ・エージェントによるタスクの実行
スケジューラ・エージェントは、外部ジョブとデータベース・ジョブをリモート・ホストでスケジュールおよび実行できるようにするスタンドアロン・プログラムです。スケジューラ・エージェントの起動と停止には、UNIXおよびLinuxではschagent
ユーティリティを使用し、WindowsではOracleSchedulerExecutionAgent
サービスを使用します。
- schagentユーティリティについて
実行可能ユーティリティschagent
は、Windows、UNIXおよびLinux上のエージェントの特定のタスクを実行します。 - Windowsでのスケジューラ・エージェントの使用
Windowsのスケジューラ・エージェント・サービスは、インストール中に自動的に作成されて起動されます。サービス名の末尾は、OracleSchedulerExecutionAgent
になっています。 - スケジューラ・エージェントの起動
スケジューラ・エージェントを起動すると、それが存在するホストでのリモート・ジョブの実行が可能になります。 - スケジューラ・エージェントの停止
スケジューラ・エージェントを停止すると、スケジューラ・エージェントがあるホストでリモート・ジョブを実行できなくなります。 - スケジューラ・エージェントのデータベースへの登録
スケジューラ・エージェントの構成が終わるとすぐに、リモート・ジョブを実行する予定の1つ以上のデータベースでエージェントを登録できます。
30.1.3.3.1 schagentユーティリティについて
実行可能ユーティリティschagent
は、Windows、UNIXおよびLinux上のエージェントの特定のタスクを実行します。
表30-1に、schagent
のオプションが示されています。
次の適切な構文およびオプションを指定して、schagent
を使用します。
たとえば:
UNIXおよびLinux: AGENT_HOME/bin/schagent -status
Windows: AGENT_HOME/bin/schagent.exe -status
表30-1 schagentのオプション
オプション | 説明 |
---|---|
|
スケジューラ・エージェントを開始します。 UNIXとLinuxのみ |
|
スケジューラ・エージェントに現在実行中のすべてのジョブを停止するようにプロンプトを表示してから、実行を正常に停止します。 UNIXとLinuxのみ |
|
最初にジョブを停止せずに、スケジューラ・エージェントを強制的に停止します。Oracle Database 11g リリース2 (11.2)以降。 UNIXとLinuxのみ |
|
ローカルに実行中のスケジューラ・エージェントに関する、バージョン、稼働時間、エージェントの起動以降に実行されたジョブの合計数、現在実行中のジョブの数およびその説明を返します。 |
|
エージェントのホスト・コンピュータでリモート・ジョブを実行する予定の基本データベースまたは追加データベースにスケジューラ・エージェントを登録します。 |
|
データベースからエージェントを登録解除します。 |
親トピック: スケジューラ・エージェントによるタスクの実行
30.1.3.3.2 Windowsでのスケジューラ・エージェントの使用
Windowsのスケジューラ・エージェント・サービスは、インストール時に自動的に作成および起動されます。サービス名の末尾は、OracleSchedulerExecutionAgent
になっています。
ノート:
Oracle DatabaseがインストールされているWindowsコンピュータ上で実行され、資格証明なしのローカル外部ジョブの実行を管理するOracleJobScheduler
サービスと、このサービスを混同しないでください。
親トピック: スケジューラ・エージェントによるタスクの実行
30.1.3.3.3 スケジューラ・エージェントの起動
スケジューラ・エージェントを起動すると、それが存在するホストでのリモート・ジョブの実行が可能になります。
スケジューラ・エージェントを起動するには:
-
次のいずれかの操作を行います。
-
UNIXおよびLinuxの場合は、次のコマンドを実行します。
AGENT_HOME/bin/schagent -start
-
Windowsの場合は、
OracleSchedulerExecutionAgent
で終わる名前のサービスを起動します。
-
親トピック: スケジューラ・エージェントによるタスクの実行
30.1.3.3.4 スケジューラ・エージェントの停止
スケジューラ・エージェントを停止すると、スケジューラ・エージェントがあるホストでリモート・ジョブを実行できなくなります。
スケジューラ・エージェントを停止するには:
-
次のいずれかの操作を行います。
-
UNIXおよびLinuxでは、表30-1に説明されている
-stop
または-abort
オプションのどちらかを指定してschagent
ユーティリティを実行します。AGENT_HOME/bin/schagent -stop
-
Windowsでは、
OracleSchedulerExecutionAgent
で終わる名前のサービスを停止します。これは-abort
オプションに相当します。
-
親トピック: スケジューラ・エージェントによるタスクの実行
30.1.3.3.5 スケジューラ・エージェントのデータベースへの登録
スケジューラ・エージェントの構成が終わるとすぐに、リモート・ジョブを実行する予定の1つ以上のデータベースでエージェントを登録できます。
後でログインして、追加のデータベースにエージェントを登録することもできます。
親トピック: スケジューラ・エージェントによるタスクの実行
30.2 スケジューラの監視と管理
現在アクティブなウィンドウとそれに関連付けられているリソース・プランの表示、現在実行中のジョブに関する情報の表示、ウィンドウおよびジョブのログの監視と管理、およびスケジューラのセキュリティ管理を実行できます。
- 現在アクティブなウィンドウとリソース・プランの表示
DBA_SCHEDULER_WINDOWS
ビューの問合せにより、現在アクティブなウィンドウとそれに関連付けられたプランを表示できます。 - 現在実行中のジョブに関する情報の検索
DBA_SCHEDULER_JOBS
ビューの問合せにより、ジョブの状態を確認できます。 - ウィンドウ・ログおよびジョブ・ログの監視と管理
スケジューラは、ジョブ・ログとウィンドウ・ログという2種類のログをサポートしています。 - スケジューラのセキュリティの管理
実行するスケジューラ操作に基づいて、適切な権限をユーザーに付与する必要があります。
親トピック: Oracle Schedulerの管理
30.2.1 現在アクティブなウィンドウとリソース・プランの表示
DBA_SCHEDULER_WINDOWS
ビューの問合せにより、現在アクティブなウィンドウとそれに関連付けられたプランを表示できます。
たとえば、次の文を発行します。
SELECT WINDOW_NAME, RESOURCE_PLAN FROM DBA_SCHEDULER_WINDOWS WHERE ACTIVE='TRUE'; WINDOW_NAME RESOURCE_PLAN ------------------------------ -------------------------- MY_WINDOW10 MY_RESOURCEPLAN1
アクティブなウィンドウがない場合は、次の文を発行するとアクティブなリソース・プランを表示できます。
SELECT * FROM V$RSRC_PLAN;
親トピック: スケジューラの監視と管理
30.2.2 現在実行中のジョブに関する情報の検索
DBA_SCHEDULER_JOBS
ビューの問合せにより、ジョブの状態を確認できます。
たとえば、次の文を発行します。
SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'MY_EMP_JOB1'; JOB_NAME STATE ------------------------------ --------- MY_EMP_JOB1 DISABLED
この場合は、ENABLE
プロシージャを使用してジョブを使用可能にできます。表30-2に、ジョブの状態に関する有効値を示します。
表30-2 ジョブの状態
ジョブの状態 | 説明 |
---|---|
|
ジョブは使用禁止です。 |
|
ジョブは実行するようにスケジュールされています。 |
|
ジョブは現在実行中です。 |
|
ジョブは完了しており、次回の実行はスケジュールされていません。 |
|
ジョブは1回実行するようにスケジュールされましたが、実行中に停止しました。 |
|
ジョブは中断されました。 |
|
ジョブは1回実行するようにスケジュールされ、失敗しました。 |
|
ジョブは1回以上失敗し、再試行の実行がスケジュールされました。 |
|
ジョブは1回実行するようにスケジュールされ、正常に完了しました。 |
|
ジョブのタイプがチェーンで、実行されているステップ、実行がスケジュールされているステップおよびイベント待ちのイベント・ステップがなく、チェーンの |
現在実行中のジョブの進行状況を確認するには、次の文を発行します。
SELECT * FROM ALL_SCHEDULER_RUNNING_JOBS;
CPU_USED
列に有効なデータを表示するには、RESOURCE_LIMIT
初期化パラメータをtrue
に設定する必要があります。
リモートおよびローカルのすべての宛先ですべてのジョブの状態を確認するには、次の文を発行します。
SELECT * FROM DBA_SCHEDULER_JOB_DESTS;
実行中のチェーンの一部のジョブに関する情報を得るには、次の文を発行します。
SELECT * FROM ALL_SCHEDULER_RUNNING_CHAINS WHERE JOB_NAME='MY_JOB1';
cjqNNN
の形式のプロセスを検索すると、ジョブ・コーディネータが実行中かどうかをチェックできます。
関連項目:
-
*_SCHEDULER_RUNNING_JOBS
ビューの詳細は、『Oracle Databaseリファレンス』を参照してください -
*_SCHEDULER_JOBS
ビューの詳細は、『Oracle Databaseリファレンス』を参照してください
親トピック: スケジューラの監視と管理
30.2.3 ウィンドウ・ログおよびジョブ・ログの監視と管理
スケジューラは、ジョブ・ログとウィンドウ・ログという2種類のログをサポートしています。
- ジョブ・ログ
ジョブの実行、状態変化および失敗について、ジョブ・ログ内の情報を表示できます。 - ウィンドウ・ログ
ウィンドウ・ログは、ウィンドウでの操作を記録します。 - ログのパージ
ジョブ・ログおよびウィンドウ・ログが無計画に大きくならないように、SET_SCHEDULER_ATTRIBUTE
プロシージャを使用して、保持する履歴の量(日数)を指定します。
親トピック: スケジューラの監視と管理
30.2.3.1 ジョブ・ログ
ジョブの実行、状態変化および失敗について、ジョブ・ログ内の情報を表示できます。
ジョブ・ログは、次の2つのデータ・ディクショナリ・ビューとして実装されます。
-
*_SCHEDULER_JOB_LOG
-
*_SCHEDULER_JOB_RUN_DETAILS
スケジューラがジョブに関して実行するロギングの量は、ジョブ・クラス・レベルと個別ジョブ・レベルの両方で制御できます。通常、クラス内のジョブに関するロギングを厳密に制御できるため、ロギングをクラス・レベルで制御します。
各種ロギング・レベルの定義と、ジョブとジョブ・クラスの間のロギング・レベルの優先度については、「ジョブ・ログの表示」を参照してください。デフォルトでは、ジョブ・クラスのロギング・レベルはLOGGING_RUNS
で、すべてのジョブの実行がログに記録されます。
ジョブ・クラスを作成する際にlogging_level
属性を設定するか、SET_ATTRIBUTE
プロシージャを使用すると、後でロギング・レベルを変更できます。次の例では、myclass1
ジョブ・クラスのジョブのロギング・レベルを、失敗した実行のみがログに記録されるLOGGING_FAILED_RUNS
に設定しています。すべてのジョブ・クラスはSYS
スキーマにあることに注意してください。
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE ( 'sys.myclass1', 'logging_level', DBMS_SCHEDULER.LOGGING_FAILED_RUNS); END; /
ジョブ・クラスのロギング・レベルを設定するには、MANAGE
SCHEDULER
権限が付与されている必要があります。
関連項目:
-
ジョブ・ログの詳細と、ジョブ・ログ・ビューに対する問合せ例については、「ジョブ・ログの表示」
-
*_SCHEDULER_JOB_LOG
ビューの詳細は、『Oracle Databaseリファレンス』を参照してください -
*_SCHEDULER_JOB_RUN_DETAILS
ビューの詳細は、『Oracle Databaseリファレンス』を参照してください -
CREATE_JOB_CLASS
およびSET_ATTRIBUTE
プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 -
ログ・エントリの保存期間の設定については、「スケジューラのプリファレンスの設定」
親トピック: ウィンドウ・ログおよびジョブ・ログの監視と管理
30.2.3.2 ウィンドウ・ログ
ウィンドウ・ログは、ウィンドウでの操作を記録します。
スケジューラでは、次の操作が実行されるたびにウィンドウ・ログにエントリが1つ記録されます。
-
ウィンドウの作成または削除
-
ウィンドウのオープン
-
ウィンドウのクローズ
-
ウィンドウの重複
-
ウィンドウの使用可能化または使用禁止
ウィンドウ・アクティビティのロギングには、ロギング・レベルはありません。
ウィンドウ・ログの内容を調べるには、DBA_SCHEDULER_WINDOW_LOG
ビューを問い合せます。次の文は、このビューの出力例を示しています。
SELECT log_id, to_char(log_date, 'DD-MON-YY HH24:MI:SS') timestamp, window_name, operation FROM DBA_SCHEDULER_WINDOW_LOG; LOG_ID TIMESTAMP WINDOW_NAME OPERATION ---------- -------------------- ----------------- -------- 4 10/01/2004 15:29:23 WEEKEND_WINDOW CREATE 5 10/01/2004 15:33:01 WEEKEND_WINDOW UPDATE 22 10/06/2004 22:02:48 WEEKNIGHT_WINDOW OPEN 25 10/07/2004 06:59:37 WEEKNIGHT_WINDOW CLOSE 26 10/07/2004 22:01:37 WEEKNIGHT_WINDOW OPEN 29 10/08/2004 06:59:51 WEEKNIGHT_WINDOW CLOSE
DBA_SCHEDULER_WINDOWS_DETAILS
ビューは、以前はアクティブで現在はクローズ(完了)されているすべてのウィンドウに関する情報を提供します。次の文は、このビューの出力例を示しています。
SELECT LOG_ID, WINDOW_NAME, ACTUAL_START_DATE, ACTUAL_DURATION FROM DBA_SCHEDULER_WINDOW_DETAILS; LOG_ID WINDOW_NAME ACTUAL_START_DATE ACTUAL_DURATION ---------- ---------------- ------------------------------------ --------------- 25 WEEKNIGHT_WINDOW 06-OCT-04 10:02.48.832438 PM PST8PDT +000 01:02:32 29 WEEKNIGHT_WINDOW 07-OCT-04 10.01.37.025704 PM PST8PDT +000 03:02:00
これらのビューの両方でログIDが対応しており、この例では、DBA_SCHEDULER_WINDOWS_DETAILS
ビューの行がDBA_SCHEDULER_WINDOW_LOG
ビューのCLOSE
操作に対応しています。
関連項目:
-
*_SCHEDULER_WINDOW_LOG
ビューの詳細は、『Oracle Databaseリファレンス』を参照してください -
DBA_SCHEDULER_WINDOWS_DETAILS
ビューの詳細は、『Oracle Databaseリファレンス』を参照してください
親トピック: ウィンドウ・ログおよびジョブ・ログの監視と管理
30.2.3.3 ログのパージ
ジョブ・ログおよびウィンドウ・ログが無計画に大きくならないように、SET_SCHEDULER_ATTRIBUTE
プロシージャを使用して、保持する履歴の量(日数)を指定します。
1日に1回、スケジューラは、指定した履歴期間より古いすべてのログ・エントリをジョブ・ログとウィンドウ・ログから自動的にパージします。デフォルトの履歴期間は30日です。たとえば、履歴期間を90日に変更する場合は、次の文を発行します。
DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE('log_history','90');
一部のジョブ・クラスは他より重要です。そのため、クラス固有の設定を使用して、このグローバルな履歴設定をオーバーライドできます。たとえば、3つのジョブ・クラス(class1
、class2
およびclass3
)があり、class1
とclass3
に対しては10日間のウィンドウ・ログの履歴を保存し、class2
に対しては30日間保存するとします。これを実現するには、次の文を発行します。
DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE('log_history','10'); DBMS_SCHEDULER.SET_ATTRIBUTE('class2','log_history','30');
ジョブ・クラスの作成時には、クラス別の履歴を設定することもできます。
チェーン実行のステップに関連したログ・エントリは、メインのチェーン・ジョブのエントリがパージされるまでパージされません。
手動でのログのパージ
PURGE_LOG
プロシージャを使用して、ログを手動でパージできます。例として、ジョブ・ログとウィンドウ・ログの両方からすべてのエントリをパージする文を示します。
DBMS_SCHEDULER.PURGE_LOG();
別の例として、3日前より古いすべてのエントリをジョブ・ログからパージする文を示します。ウィンドウ・ログはこの文の影響を受けません。
DBMS_SCHEDULER.PURGE_LOG(log_history => 3, which_log => 'JOB_LOG');
次の文では、10日前より古いすべてのウィンドウ・ログ・エントリと、job1
およびclass2
内のジョブに関連する10日前より古いすべてのジョブ・ログ・エントリがパージされます。
DBMS_SCHEDULER.PURGE_LOG(log_history => 10, job_name => 'job1, sys.class2');
親トピック: ウィンドウ・ログおよびジョブ・ログの監視と管理
30.2.4 スケジューラ・セキュリティの管理
実行するスケジューラ操作に基づいて、適切な権限をユーザーに付与する必要があります。
ジョブのスケジュールと実行にスケジューラを使用する必要がある通常のユーザーに対しては、CREATE
JOB
システム権限を付与してください。システム・リソースを管理する必要があるデータベース管理者には、MANAGE
SCHEDULER
を付与してください。スケジューラに関するその他のシステム権限またはロールを付与するときは、十分に注意してください。特に、CREATE
ANY
JOB
システム権限と、この権限が含まれるSCHEDULER_ADMIN
ロールは、コードを任意のユーザーで実行できるため、非常に強力です。これらの権限とロールの付与は、非常に強力な権限を持つロールまたはユーザーに限定してください。
外部ジョブの処理は、セキュリティに関して特に重要な問題です。データベース外でジョブを実行する必要があるユーザーにのみ、これを可能にするCREATE EXTERNAL JOB
システム権限を付与してください。スケジューラに関するセキュリティには、他に特別な要件はありません。セキュリティの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
ユーザーがオペレーティング・システムまたはリモート・データベースにジョブを認証する資格証明を作成する必要がある場合は、CREATE
CREDENTIAL
システム権限を付与します。
ノート:
Oracle Database 10g リリース1 (10.1)からOracle Database 10g リリース2 (10.2)以降にアップグレードすると、CREATE EXTERNAL JOB
がCREATE JOB
権限を持つすべてのユーザーとロールに対して自動的に付与されます。必要のないユーザーに対してはこの権限を取り消すことをお薦めします。
親トピック: スケジューラの監視と管理
30.3 スケジューラのインポート/エクスポート
スケジューラ・オブジェクトをエクスポートするには、データ・ポンプ・ユーティリティ(impdp
およびexpdp
)を使用します。
スケジューラでは、以前のインポートおよびエクスポート・ユーティリティ(IMP
およびEXP
)は使用できません。また、スケジューラ・オブジェクトは、データベースが読取り専用モードの間はエクスポートできません。
エクスポートでは、スケジューラ・オブジェクトの作成に使用されたDDLが生成されます。すべての属性がエクスポートされます。インポートが実行されると、すべてのデータベース・オブジェクトが新規データベースに再作成されます。すべてのスケジュールは、それぞれのタイム・ゾーンで格納され、新規データベース内で保持されます。たとえば、「サンフランシスコにあるデータベースの月曜日午後1時(太平洋沿岸標準時)」というスケジュールは、エクスポートされドイツでデータベースにインポートされた場合でも同じです。
スケジューラの資格証明はエクスポートされますが、セキュリティ上の理由で、これらの資格証明のパスワードはエクスポートされません。スケジューラの資格証明をインポートした後は、DBMS_SCHEDULER
パッケージのSET_ATTRIBUTE
プロシージャを使用してパスワードを再設定する必要があります。
関連項目:
データ・ポンプの詳細は、『Oracle Databaseユーティリティ』を参照してください。
親トピック: Oracle Schedulerの管理
30.4 スケジューラのトラブルシューティング
スケジューラでの問題をトラブルシューティングできます。
- ジョブが実行されない
ジョブはいくつかの理由で実行に失敗する場合があります。 - プログラムが無効化される
プログラムは、プログラム引数が削除された場合やnumber_of_arguments
の変更ですべての引数が定義されなくなった場合に無効化される場合があります。 - ウィンドウの有効化に失敗する
ウィンドウは様々な理由で有効化されない場合があります。
親トピック: Oracle Schedulerの管理
30.4.1 ジョブが実行されない
ジョブはいくつかの理由で実行に失敗する場合があります。
実行されなかった可能性のあるジョブのトラブルシューティングを開始するには、次の文を発行して、ジョブの状態を確認します。
SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBS;
標準的な出力は次のようになります。
JOB_NAME STATE ------------------------------ --------- MY_EMP_JOB DISABLED MY_EMP_JOB1 FAILED MY_NEW_JOB1 DISABLED MY_NEW_JOB2 BROKEN MY_NEW_JOB3 COMPLETED
- ジョブの状態について
ジョブが実行されない場合は、次のいずれかの状態である可能性があります: 失敗、中断、無効または完了。 - ジョブ・ログの表示
ジョブ・ログは、重要なトラブルシューティング・ツールです。 - リモート・ジョブのトラブルシューティング
リモート・ジョブは、リモート・ホスト上のスケジューラ・エージェントと正常に通信する必要があります。リモート・ジョブが実行されない場合は、最初にDBA_SCHEDULER_JOBS
ビューとジョブ・ログを確認してください。 - 障害後のジョブ・リカバリについて
スケジューラは、中断されたジョブのリカバリを試行できます。
親トピック: スケジューラのトラブルシューティング
30.4.1.1 ジョブの状態について
ジョブが実行されない場合は、次のいずれかの状態である可能性があります: 失敗、破損、無効または完了。
- 失敗したジョブ
ジョブ表のジョブのステータスがFAILED
の場合、そのジョブは実行のためにスケジュールされていたが実行に失敗したことを示しています。ジョブが再起動可能として指定されていた場合は、すべての再試行に失敗しています。 - 中断されたジョブ
中断されたジョブは、特定の失敗数を超えたジョブです。この数はmax_failures
で設定され、変更できます。 - 使用禁止のジョブ
ジョブは、いくつかの理由で無効になることがあります。 - 完了したジョブ
ジョブは、end_date
またはmax_runs
に達すると完了します。
親トピック: ジョブが実行されない
30.4.1.1.1 失敗したジョブ
ジョブ表のジョブのステータスがFAILED
の場合、そのジョブは実行のためにスケジュールされていたが実行に失敗したことを示しています。ジョブが再起動可能として指定されていた場合は、すべての再試行に失敗しています。
実行の途中でジョブが失敗すると、最後のトランザクションのみがロールバックされます。複数のトランザクションを実行するジョブの場合は、restartable
をTRUE
に設定するときに注意する必要があります。失敗したジョブを問い合せるには、*_SCHEDULER_JOB_RUN_DETAILS
ビューを問い合せます。
親トピック: ジョブの状態について
30.4.1.1.2 中断されたジョブ
中断されたジョブとは、特定の失敗数を超えたジョブです。この数はmax_failures
で設定され、変更できます。
中断されたジョブは、ジョブ全体が中断されており、修正されるまで実行されません。デバッグとテストには、RUN_JOB
プロシージャを使用できます。
中断されたジョブを問い合せるには、*_SCHEDULER_JOBS
および*_SCHEDULER_JOB_LOG
ビューを問い合せます。
親トピック: ジョブの状態について
30.4.1.1.3 使用禁止のジョブ
ジョブは、いくつかの理由で無効になることがあります。
次のような理由があります:
-
手動で使用禁止にされた場合
-
ジョブが属しているジョブ・クラスが削除された場合
-
ジョブが指し示しているプログラム、チェーンまたはスケジュールが削除された場合
-
ウィンドウまたはウィンドウ・グループがジョブのスケジュールとなっているときに、そのウィンドウまたはウィンドウ・グループが削除された場合
親トピック: ジョブの状態について
30.4.1.1.4 完了したジョブ
ジョブは、end_date
またはmax_runs
に達すると完了します。
最近正常に完了したジョブが再度実行するようにスケジュールされている場合、ジョブの状態はSCHEDULED
になります。
親トピック: ジョブの状態について
30.4.1.3 リモート・ジョブのトラブルシューティング
リモート・ジョブは、リモート・ホスト上のスケジューラ・エージェントと正常にやり取りする必要があります。リモート・ジョブが実行されない場合は、最初にDBA_SCHEDULER_JOBS
ビューとジョブ・ログを確認してください。
次に、次の手順を実行します。
親トピック: ジョブが実行されない
30.4.1.4 障害後のジョブ・リカバリについて
スケジューラは、中断されたジョブのリカバリを試行できます。
スケジューラは、次の場合に中断されたジョブのリカバリを試行します。
-
データベースが異常停止した場合
-
ジョブ・スレーブ・プロセスが終了したか、失敗した場合
-
外部ジョブの場合に、実行可能ファイルまたはスクリプトを起動する外部ジョブ・プロセスが終了したか、失敗した場合。(UNIXでは、外部ジョブ・プロセスは
extjob
です。Windowsでは、外部ジョブ・サービスです。) -
外部ジョブの場合に、エンド・ユーザーの実行可能ファイルまたはスクリプトを実行するプロセスが終了したか、失敗した場合。
ジョブ・リカバリは次のように実行されます。
-
スケジューラにより、障害が発生したときに実行されていたジョブのインスタンスについて、ジョブ・ログにエントリが追加されます。ログ・エントリでは、
OPERATION
はRUN
、STATUS
はSTOPPED
になっており、ADDITIONAL_INFO
には次のいずれかが挿入されます。-
REASON=ジョブ・スレーブ・プロセスは終了しました
-
REASON=ORA-01014: Oracleのシャットダウン処理中です。
-
-
そのジョブの
restartable
がTRUE
に設定されている場合は、ジョブが再開されます。 -
restartable
がFALSE
に設定されている場合は、次のようになります。-
ジョブが1回のみ実行されるジョブであり、
auto_drop
がTRUE
に設定されている場合は、ジョブの実行が完了するとそのジョブは削除されます。 -
ジョブが1回のみ実行されるジョブであり、
auto_drop
がFALSE
に設定されている場合は、ジョブが使用禁止になり、そのジョブの状態state
はSTOPPED
に設定されます。 -
ジョブが繰返しジョブの場合、スケジューラは次回のジョブの実行をスケジュールし、そのジョブの状態
state
はSCHEDULED
に設定されます。
-
このリカバリ・プロセスの結果、ジョブが再開されると、新規実行はRECOVERY_RUN
操作としてジョブ・ログに記録されます。
親トピック: ジョブが実行されない
30.4.2 プログラムが無効化される
プログラムは、プログラム引数が削除された場合やnumber_of_arguments
の変更ですべての引数を定義できなくなった場合に使用禁止になります。
プログラムの詳細は、「ジョブを定義するためのプログラムの作成および管理」を参照してください。
親トピック: スケジューラのトラブルシューティング
30.4.3 ウィンドウの有効化に失敗する
ウィンドウは様々な理由で有効化されない場合があります。
ウィンドウは、次の場合に有効化できません。
-
スケジュールの終了時にウィンドウが使用禁止にされた場合
-
すでに存在しないスケジュールを指すウィンドウが使用禁止にされた場合
ウィンドウの詳細は、「ウィンドウを使用したジョブ・スケジューリングとジョブ優先度の管理」を参照してください。
親トピック: スケジューラのトラブルシューティング
30.5 スケジューラの使用例
スケジューラの使用例を示します。
- ジョブ・クラスの作成例
ジョブ・クラスの作成例を示します。 - 属性の設定例
属性の設定例を示します。 - チェーンの作成例
チェーンの作成例を示します。 - イベントに基づくジョブとスケジュールの作成例
イベントに基づくジョブとイベント・スケジュールの作成例を示します。 - Oracle Data Guard環境でのジョブの作成例
Oracle Data Guard環境では、スケジューラには、2つのデータベース・ロール(プライマリとロジカル・スタンバイ)に対する追加のサポートが含まれています。データベースのロールがプライマリの場合のみ、またはデータベースのロールがロジカル・スタンバイの場合のみ、ジョブが実行されるように構成できます。
親トピック: Oracle Schedulerの管理
30.5.1 ジョブ・クラスの作成例
ジョブ・クラスの作成例を示します。
ジョブ・クラスを作成するには、CREATE_JOB_CLASS
プロシージャを使用します。
例30-1 ジョブ・クラスの作成
次の文ではジョブ・クラスが作成されます。
BEGIN DBMS_SCHEDULER.CREATE_JOB_CLASS ( job_class_name => 'my_class1', service => 'my_service1', comments => 'This is my first job class'); END; /
これにより、my_class1
がSYS
に作成されます。ここでは、my_service1
というサービスが使用されています。ジョブ・クラスが作成されたことを確認するには、次の文を発行します。
SELECT JOB_CLASS_NAME FROM DBA_SCHEDULER_JOB_CLASSES WHERE JOB_CLASS_NAME = 'MY_CLASS1'; JOB_CLASS_NAME ------------------------------ MY_CLASS1
例30-2 ジョブ・クラスの作成
次の文ではジョブ・クラスが作成されます。
BEGIN DBMS_SCHEDULER.CREATE_JOB_CLASS ( job_class_name => 'finance_jobs', resource_consumer_group => 'finance_group', service => 'accounting', comments => 'All finance jobs'); END; /
これにより、finance_jobs
がSYS
に作成されます。finance_group
というリソース・コンシューマ・グループが割り当てられ、accounting
サービス用のサービス・アフィニティが指定されています。accounting
サービスがfinance_group
以外のリソース・コンシューマ・グループにマップされている場合は、resource_consumer_group
属性が優先されるので、このクラスのジョブはfinance_group
コンシューマ・グループで実行されることに注意してください。
関連項目:
CREATE_JOB_CLASS
プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。詳細は、「ジョブ・クラスの作成」を参照してください
親トピック: スケジューラの使用例
30.5.2 属性の設定例
属性の設定例を示します。
属性を設定するには、SET_ATTRIBUTE
およびSET_SCHEDULER_ATTRIBUTE
プロシージャを使用します。
例30-3 繰返し間隔属性の設定
次の例では、my_emp_job1
が日次で実行されるように頻度が再設定されます。
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE ( name => 'my_emp_job1', attribute => 'repeat_interval', value => 'FREQ=DAILY'); END; /
変更されたことを確認するには、次の文を発行します。
SELECT JOB_NAME, REPEAT_INTERVAL FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'MY_EMP_JOB1'; JOB_NAME REPEAT_INTERVAL ---------------- --------------- MY_EMP_JOB1 FREQ=DAILY
例30-4 一連のジョブに対する複数のジョブ属性の設定
次の例では、5つの各ジョブに4つの異なる属性が設定されます。
DECLARE newattr sys.jobattr; newattrarr sys.jobattr_array; j number; BEGIN -- Create new JOBATTR array newattrarr := sys.jobattr_array(); -- Allocate enough space in the array newattrarr.extend(20); j := 1; FOR i IN 1..5 LOOP -- Create and initialize a JOBATTR object type newattr := sys.jobattr(job_name => 'TESTJOB' || to_char(i), attr_name => 'MAX_FAILURES', attr_value => 5); -- Add it to the array. newattrarr(j) := newattr; j := j + 1; newattr := sys.jobattr(job_name => 'TESTJOB' || to_char(i), attr_name => 'COMMENTS', attr_value => 'Test job'); newattrarr(j) := newattr; j := j + 1; newattr := sys.jobattr(job_name => 'TESTJOB' || to_char(i), attr_name => 'END_DATE', attr_value => systimestamp + interval '24' hour); newattrarr(j) := newattr; j := j + 1; newattr := sys.jobattr(job_name => 'TESTJOB' || to_char(i), attr_name => 'SCHEDULE_LIMIT', attr_value => interval '1' hour); newattrarr(j) := newattr; j := j + 1; END LOOP; -- Call SET_JOB_ATTRIBUTES to set all 20 set attributes in one transaction DBMS_SCHEDULER.SET_JOB_ATTRIBUTES(newattrarr, 'TRANSACTIONAL'); END; /
関連項目:
SET_SCHEDULER_ATTRIBUTE
プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』および「スケジューラのプリファレンスの設定」
親トピック: スケジューラの使用例
30.5.3 チェーンの作成例
チェーンの作成例を示します。
チェーンを作成するには、CREATE_CHAIN
プロシージャを使用します。チェーンを作成した後、DEFINE_CHAIN_STEP
またはDEFINE_CHAIN_EVENT_STEP
プロシージャを使用してチェーンにステップを追加し、DEFINE_CHAIN_RULE
プロシージャを使用してルールを定義します。
例30-5 チェーンの作成
次の例では、my_program2
およびmy_program3
の前にmy_program1
を実行するチェーンが作成されます。my_program1
の完了後、my_program2
およびmy_program3
は、並行して実行されます。
この例のユーザーには、CREATE
EVALUATION
CONTEXT
、CREATE
RULE
およびCREATE
RULE
SET
権限が必要です。詳細は、「チェーンの各権限の設定」を参照してください。
BEGIN DBMS_SCHEDULER.CREATE_CHAIN ( chain_name => 'my_chain1', rule_set_name => NULL, evaluation_interval => NULL, comments => NULL); END; / --- define three steps for this chain. Referenced programs must be enabled. BEGIN DBMS_SCHEDULER.DEFINE_CHAIN_STEP('my_chain1', 'stepA', 'my_program1'); DBMS_SCHEDULER.DEFINE_CHAIN_STEP('my_chain1', 'stepB', 'my_program2'); DBMS_SCHEDULER.DEFINE_CHAIN_STEP('my_chain1', 'stepC', 'my_program3'); END; / --- define corresponding rules for the chain. BEGIN DBMS_SCHEDULER.DEFINE_CHAIN_RULE('my_chain1', 'TRUE', 'START stepA'); DBMS_SCHEDULER.DEFINE_CHAIN_RULE ( 'my_chain1', 'stepA COMPLETED', 'Start stepB, stepC'); DBMS_SCHEDULER.DEFINE_CHAIN_RULE ( 'my_chain1', 'stepB COMPLETED AND stepC COMPLETED', 'END'); END; / --- enable the chain BEGIN DBMS_SCHEDULER.ENABLE('my_chain1'); END; / --- create a chain job to start the chain daily at 1:00 p.m. BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'chain_job_1', job_type => 'CHAIN', job_action => 'my_chain1', repeat_interval => 'freq=daily;byhour=13;byminute=0;bysecond=0', enabled => TRUE); END; /
例30-6 チェーンの作成
次の例では、最初にmy_program1
を実行してチェーンを作成します。正常に実行された場合はmy_program2
、失敗した場合はmy_program3
が実行されます。
BEGIN DBMS_SCHEDULER.CREATE_CHAIN ( chain_name => 'my_chain2', rule_set_name => NULL, evaluation_interval => NULL, comments => NULL); END; / --- define three steps for this chain. BEGIN DBMS_SCHEDULER.DEFINE_CHAIN_STEP('my_chain2', 'step1', 'my_program1'); DBMS_SCHEDULER.DEFINE_CHAIN_STEP('my_chain2', 'step2', 'my_program2'); DBMS_SCHEDULER.DEFINE_CHAIN_STEP('my_chain2', 'step3', 'my_program3'); END; / --- define corresponding rules for the chain. BEGIN DBMS_SCHEDULER.DEFINE_CHAIN_RULE ('my_chain2', 'TRUE', 'START step1'); DBMS_SCHEDULER.DEFINE_CHAIN_RULE ( 'my_chain2', 'step1 SUCCEEDED', 'Start step2'); DBMS_SCHEDULER.DEFINE_CHAIN_RULE ( 'my_chain2', 'step1 COMPLETED AND step1 NOT SUCCEEDED', 'Start step3'); DBMS_SCHEDULER.DEFINE_CHAIN_RULE ( 'my_chain2', 'step2 COMPLETED OR step3 COMPLETED', 'END'); END; /
関連項目:
CREATE_CHAIN
、DEFINE_CHAIN_STEP
およびDEFINE_CHAIN_RULE
プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』および「スケジューラのプリファレンスの設定」
親トピック: スケジューラの使用例
30.5.4 イベントに基づくジョブとスケジュールの作成例
イベント・ベースのジョブおよびイベント・スケジュールの作成例を示します。
イベント・ベースのジョブを作成するには、CREATE_JOB
プロシージャを使用します。イベント・ベースのスケジュールを作成するには、CREATE_EVENT_SCHEDULE
プロシージャを使用します。
これらの例では、アプリケーションでシステムにファイルが到着したことが検出されたときに、イベントをmy_events_q
キューにエンキューするアプリケーションがあることを想定しています。
例30-7 イベント・ベースのスケジュールの作成
次の例では、午前9時前にファイルがシステムに到着したことを示すイベントをスケジューラが受信するたびに、ジョブの開始に使用可能なスケジュールを作成する方法を示しています。
BEGIN DBMS_SCHEDULER.CREATE_EVENT_SCHEDULE ( schedule_name => 'scott.file_arrival', start_date => systimestamp, event_condition => 'tab.user_data.object_owner = ''SCOTT'' and tab.user_data.event_name = ''FILE_ARRIVAL'' and extract hour from tab.user_data.event_timestamp < 9', queue_spec => 'my_events_q'); END; /
例30-8 イベント・ベースのジョブの作成
次の例では、ファイルがシステムに到着したことを示すイベントをスケジューラが受信したときに開始されるジョブを作成しています。
BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => my_job, program_name => my_program, start_date => '15-JUL-04 1.00.00AM US/Pacific', event_condition => 'tab.user_data.event_name = ''LOW_INVENTORY''', queue_spec => 'my_events_q' enabled => TRUE, comments => 'my event-based job'); END; /
関連項目:
CREATE_JOB
およびCREATE_EVENT_SCHEDULE
プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
親トピック: スケジューラの使用例
30.5.5 Oracle Data Guard環境でのジョブの作成例
Oracle Data Guard環境では、スケジューラには、2つのデータベース・ロール(プライマリとロジカル・スタンバイ)に対する追加のサポートが含まれています。データベースのロールがプライマリの場合のみ、またはデータベースのロールがロジカル・スタンバイの場合のみ、ジョブが実行されるように構成できます。
そのためには、database_role
属性を設定します。この例では、両方のデータベース・ロールでジョブを実行できるようにする方法を説明します。ジョブのコピーを2つ作成し、それぞれに異なるdatabase_role
を割り当てる方法を使用します。
デフォルトでは、ジョブが実行されるのは、データベースのロールがそのジョブの作成時と同じロールの場合です。両方のロールで同じジョブを実行するステップは、次のとおりです。
- ジョブをコピーします。
- 新しいジョブを使用可能にします。
- 新しいジョブの
database_role
属性を必要なロールに変更します。
この例では、まずprimary_job
というジョブをプライマリ・データベースに作成しています。次に、このジョブのコピーを作成して、そのdatabase_role
属性を「LOGICAL
STANDBY
」に設定しています。プライマリ・データベースがロジカル・スタンバイになった場合は、そのスケジュールに従ってジョブが引き続き実行されます。
ジョブをコピーした場合、新しいジョブは使用禁止になっているため、使用可能にする必要があります。
BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'primary_job', program_name => 'my_prog', schedule_name => 'my_sched'); DBMS_SCHEDULER.COPY_JOB('primary_job','standby_job'); DBMS_SCHEDULER.ENABLE(name=>'standby_job', commit_semantics=>'ABSORB_ERRORS'); DBMS_SCHEDULER.SET_ATTRIBUTE('standby_job','database_role','LOGICAL STANDBY'); END; /
この例を実行すると、DBA_SCHEDULER_JOB_ROLES
ビューのデータは、次のようになります。
SELECT JOB_NAME, DATABASE_ROLE FROM DBA_SCHEDULER_JOB_ROLES WHERE JOB_NAME IN ('PRIMARY_JOB','STANDBY_JOB'); JOB_NAME DATABASE_ROLE -------- ---------------- PRIMARY_JOB PRIMARY STABDBY_JOB LOGICAL STANDBY
ノート:
フィジカル・スタンバイ・データベースの場合、スケジューラのオブジェクトに対する変更またはプライマリ・データベース上のスケジューラのジョブによるデータベースの変更は、他のデータベースの変更と同様にフィジカル・スタンバイに適用されます。
親トピック: スケジューラの使用例
30.6 スケジューラの参照情報
スケジューラに関連するいくつかの権限およびデータ・ディクショナリ・ビューがあります。
- スケジューラ権限
様々なスケジューラ権限をユーザーに付与することができます。 - スケジューラのデータ・ディクショナリ・ビュー
スケジューラに関する情報について一連のビューを問い合せることができます。
親トピック: Oracle Schedulerの管理
30.6.1 スケジューラ権限
様々なスケジューラ権限を付与できます。
表30-3 スケジューラのシステム権限
権限名 | 許可される操作 |
---|---|
|
自分のスキーマ内にジョブ、チェーン、スケジュール、プログラム、File Watcher、宛先およびグループを作成できます。 |
|
|
|
この権限はデータベース外で実行するジョブを作成する場合に必要です。 |
|
自分のジョブに任意のスキーマのプログラムまたはチェーンを使用できます。 |
|
自分のジョブを任意のジョブ・クラスの下で実行できます。 |
|
これはスケジューラを管理するための最も重要な権限です。ジョブ・クラス、ウィンドウおよびウィンドウ・グループの作成、変更および削除、 |
表30-4 スケジューラのオブジェクト権限
権限名 | 許可される操作 |
---|---|
|
|
|
この権限はプログラム、チェーン、File Watcher、資格証明およびジョブ・クラスのみに付与できます。 |
|
権限付与されているオブジェクトを変更または削除できます。変更操作には、プログラム引数の使用可能化、使用禁止化、定義または削除、ジョブ引数値の設定または再設定、およびジョブの実行などの操作が含まれます。ジョブ・タイプ プログラム、ジョブ、チェーン、File Watcherおよび資格証明の場合には、この権限により、これらのオブジェクトを所有しないスキーマを使用可能にして表示することもできます。この権限は、ジョブ、チェーン、プログラム、スケジュール、File Watcherおよび資格証明に対してのみ付与できます。他のタイプのスケジューラ・オブジェクトに対しては、 |
|
この権限では、指定したオブジェクトに対して他のすべてのオブジェクト権限で許可されている操作が可能です。これは、ジョブ、プログラム、チェーン、スケジュール、File Watcher、資格証明およびジョブ・クラスに付与できます。 |
ノート:
別のユーザーによって作成された宛先オブジェクトを使用する場合に、オブジェクト権限は必要ありません。
SCHEDULER_ADMIN
ロールは、表30-3に記載されているすべてのシステム権限付き(ADMIN
オプション付き)で作成されます。SCHEDULER_ADMIN
ロールはDBA
(ADMIN
オプション付き)に付与されます。
DBMS_SCHEDULER
プロシージャおよびファンクションを定義者の権限PL/SQLブロックからコールする場合、オブジェクト権限はコール側のユーザーに直接付与される必要があります。すべてのPL/SQLストアド・プロシージャと同様に、DBMS_SCHEDULERは定義者の権限PL/SQLブロックからコールされると、データベース・オブジェクト上のロールを介して付与された権限を無視します。
SELECT
ALL_SCHEDULER_*
ビュー、SELECT
USER_SCHEDULER_*
ビュー、SELECT
SYS.SCHEDULER$_JOBSUFFIX_S
(ジョブ名生成用)、およびEXECUTE
SYS.DEFAULT_JOB_CLASS
の各オブジェクト権限が、PUBLIC
に付与されます。
親トピック: スケジューラの参照情報
30.6.2 スケジューラのデータ・ディクショナリ・ビュー
スケジューラに関する情報について一連のビューを問い合せることができます。
次の例は、my_job1
の完了したインスタンスに関する情報を示しています。
SELECT JOB_NAME, STATUS, ERROR# FROM DBA_SCHEDULER_JOB_RUN_DETAILS WHERE JOB_NAME = 'MY_JOB1'; JOB_NAME STATUS ERROR# -------- -------------- ------ MY_JOB1 FAILURE 20000
表30-5に、スケジューラに関連付けられたビューを示します。*_SCHEDULER_JOBS
、*_SCHEDULER_SCHEDULES
、*_SCHEDULER_PROGRAMS
、*_SCHEDULER_RUNNING_JOBS
、*_SCHEDULER_JOB_LOG
および*_SCHEDULER_JOB_RUN_DETAILS
の各ビューは、ジョブの管理に特に役立ちます。スケジューラのビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
ノート:
次の表のビュー名の先頭にあるアスタリスクは、DBA
、ALL
またはUSER
で置換されます。
表30-5 スケジューラのビュー
ビュー | 説明 |
---|---|
*_SCHEDULER_CHAIN_RULES |
すべてのチェーンについて、すべてのルールが表示されます。 |
*_SCHEDULER_CHAIN_STEPS |
すべてのチェーンについて、すべてのステップが表示されます。 |
*_SCHEDULER_CHAINS |
すべてのチェーンが表示されます。 |
*_SCHEDULER_CREDENTIALS *_CREDENTIALS |
すべての資格証明が表示されます。 ** * 推奨されるビューは*_CREDENTIALSです。 |
*_SCHEDULER_DB_DESTS |
すべてのデータベース宛先が表示されます。 |
*_SCHEDULER_DESTS |
すべてのデータベース宛先と外部宛先が表示されます。 |
*_SCHEDULER_EXTERNAL_DESTS |
すべての外部宛先が表示されます。 |
*_SCHEDULER_FILE_WATCHERS |
すべてのFile Watcherが表示されます。 |
*_SCHEDULER_GLOBAL_ATTRIBUTE |
スケジューラ属性の現行値が表示されます。 |
*_SCHEDULER_GROUP_MEMBERS |
すべてのグループのすべてのグループ・メンバーが表示されます。 |
*_SCHEDULER_GROUPS |
すべてのグループが表示されます。 |
|
非互換性定義のメンバーであるすべてのプログラムまたはジョブが表示されます。 |
*_SCHEDULER_JOB_ARGS |
すべてのジョブについて、すべての引数の設定値が表示されます。 |
*_SCHEDULER_JOB_CLASSES |
すべてのジョブ・クラスが表示されます。 |
*_SCHEDULER_JOB_DESTS |
これらのビューには、複数の宛先のジョブの子ジョブを含む、ローカル・ジョブとリモート宛先のジョブの両方の状態が表示されます。これらのビューからジョブ宛先ID ( |
*_SCHEDULER_JOB_LOG |
設定されているロギング・レベルに応じて、ジョブの実行と状態変化が表示されます。 |
*_SCHEDULER_JOB_ROLES |
Oracle Data Guardデータベース・ロールによるすべてのジョブが表示されます。 |
*_SCHEDULER_JOB_RUN_DETAILS |
完了(失敗または成功)したすべてのジョブ実行が表示されます。 |
*_SCHEDULER_JOBS |
すべてのジョブ(使用可能なジョブと使用禁止のジョブ)が表示されます。 |
*_SCHEDULER_NOTIFICATIONS |
すべてのジョブの状態の電子メール通知が表示されます。 |
*_SCHEDULER_PROGRAM_ARGS |
すべてのプログラムに定義されているすべての引数が、デフォルト値(存在する場合)とともに表示されます。 |
*_SCHEDULER_PROGRAMS |
すべてのプログラムが表示されます。 |
|
リモート・データベース・ジョブのソースおよび宛先として登録されている、現行のユーザーがアクセスできるリモート・データベースに関する情報が表示されます。 |
|
リモート・データベースにおいて現行のユーザーがアクセスできるジョブの状態に関する情報が表示されます。 |
|
リソース・メタデータが表示されます。 |
*_SCHEDULER_RUNNING_CHAINS |
実行中のすべてのチェーンが表示されます。 |
*_SCHEDULER_RUNNING_JOBS |
現在実行中のすべてのジョブに関する状態情報が表示されます。 |
|
ジョブまたはプログラムで使用されるリソースのタイプ、および必要とされる各リソースのユニットの数が表示されます。 |
*_SCHEDULER_SCHEDULES |
すべてのスケジュールが表示されます。 |
*_SCHEDULER_WINDOW_DETAILS |
完了したすべてのウィンドウの実行が表示されます。 |
*_SCHEDULER_WINDOW_GROUPS |
すべてのウィンドウ・グループが表示されます。 |
*_SCHEDULER_WINDOW_LOG |
ウィンドウに行われた変更の状態がすべて表示されます。 |
*_SCHEDULER_WINDOWS |
すべてのウィンドウが表示されます。 |
*_SCHEDULER_WINGROUP_MEMBERS |
すべてのウィンドウ・グループのメンバーが、グループ・メンバーごとに1行ずつ表示されます。 |
親トピック: スケジューラの参照情報