OracleマスターSilver 12ｃ Oracle Schedulerの使用によるタスクの自動化

※用語はなるべく、Oracle® Databaseリファレンス　12c リリース1 (12.1) より抜粋しております。

###■公式チェックリストより出題範囲
Oracle Schedulerの使用によるタスクの自動化
　・Oracle Schedulerを使用して管理タスクを簡素化する
　・ジョブ・チェーンを使用して一連の関連タスクを実行する
　・リモート・システムでスケジューラ・ジョブを使用する
　・スケジューラの高度な機能を使用してジョブの優先度を指定する

－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－

###要点
ジョブチューン、軽量ジョブ、スケジューラの構成が要点となっている。
少し量が多いが、試験重要度は低いのでスケジューラに関する基礎知識と、出題範囲に記載されている４点のみ押さえれていればいい。

－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－

###スケジューラの概要
　Oracle Schedulerは、DBMS_SCHEDULERパッケージを使用して構成する自動タスク実行機能です
スケジューラは自動タスクとしての定期的なジョブ実行機能を提供します。

●**無名ブロックやストアドプログラムの実行**
　PL/SQLで開発された無名ブロックやストアドプログラム、Javaストアドプログラムを実行できる。

●**OS上のシェルスクリプトの実行**
　DBMS_SCHEDULERパッケージを使用したスケジューラでは、OS上に配置されているスクリプトや実行可能ファイルをコールできるため、OS側の機能を使用せずに、Oracleサーバー側で完全な自動タスクを実現できます。

●**タスク定義の再利用**
　プログラム（特定の実行可能スクリプト/プロシージャに名前を付けたコンポーネント）とスケジュール（実行に必要な時間情報に名前を付けたコンポーネント）を作成し、これらを使ったジョブを作成できる。
そのため、プログラムやスケジュールの修正はそれらを使用するジョブに自動的に反映されることになり、管理が容易になる。

●**柔軟なスケジュール管理**
　「時間ベース」：1度のみ、または特定の間隔で実行するスケジュール
　「イベントベース」：特定のシステムイベントやビジネスイベントに対応するスケジュール
バッチ処理（時間ベース）でトランザクションが失敗した場合（イベントベース）に別の処理を行わせるといった**「ジョブチェーン」**を構成することもできます。

【ポイント】
イベントベースはアプリケーション生成イベントとスケジューラ生成イベントベースに分かれる

アプリケーション生成イベント例
　・送信されたファイルを受信した時
　・Oracleユーザーのアカウントがロックされた時
　・在庫データが最低値を下回った時

スケジューラ生成イベントベースの例
　・ジョブの完了時
　・ジョブの実行許容最大時間を超えた時


●**データベースリソースマネージャとの連携**　
　スケジューラでは、ウインドウ（時間枠を作るコンポーネント）を使用することで、リソースプラントの対応付けが可能です。コンシューマグループはジョブクラス（ジョブをグループ化するコンポーネント）との対応付けができるため、ジョブの実行時にリソースマネージャによるリソース制限や、**優先順位を設定**できます。

●**クラスタ環境におけるジョブの実行**
　RAC（Real Application Clusters)を使用している場合、サービスと連携させることで、ジョブが実行するインスタンスを制限し、システムの負荷を均衡させることができます。デフォルトでは、負荷が低いノードでジョブが実行されるため、パフォーマンスの向上にもつながります。

####スケジューラのコンポーネント
　●ジョブ
　　1回以上行われるように接待したタスクに名前を付けたコンポーネントです。
　　　・プログラムとスケジューラコンポーネントを使用しないジョブも作成可能
　　　・**処理の実行結果に基づいて次の処理を決めるジョブチェーン**を作成することができる
　　　・**大量のジョブを作成する際のREDOログ生成を抑えた軽量ジョブ**を作成することができる

　●プログラム
　　特定の実行可能ファイル、スクリプト、PL/SQLプロシージャ、PL/SQLブロックと関連する引数に名前を付けたコンポーネントです。
　　プログラムをジョブ定義に使用することで、複数のジョブで同じ操作を実行できます。ジョブを変えずにプログラムのみを変更可能です。

　●スケジュール
　　いつ、何回、いつまでに実行するかといった時間情報、またはトランザクションの終了やネットワーク越しにファイルが到達したなどのイベント情報に名前をつけたコンポーネントです。
　　イベントベースのスケジュールも使用可能です。スケジュールをジョブ定義に使用することで、複数のジョブで同じ時間情報を再利用できます。スケジュールを使用しているジョブを変更することなく、時間情報やイベント情報を変更できます。

　●ジョブクラス
　　ジョブは1つのジョブクラスと対応しています。複数のジョブをグループ化し、有効化/無効化の切替えや削除を一括で行うことができます。
　　ジョブクラスはリソースマネージャのコンシューマグループと対応づけることができるため、ジョブのグループに対してCPU使用率/実行時間の制限などを適用できます。

　●ウィンドウ
　　**時間枠の概念をスケジューラに提供します**。日中のみ、夜間のみといった一定の期間だけジョブを動作させる場合に使用します。ウィンドウを作成するときにはスケジュールを利用できます。ジョブ定義では、スケジュールお利用するのと同じ方法デウィンドウ使用し、時間枠を利用できます。ウィンドウは、リソースマネージャのリソースプラント対応付けることができるため、**ウィンドウをオープンすると自動的にプランを有効化することができます。**

　●ウィンドウグループ
　　ウィンドウをグループとして管理することができます。1つのジョブには1つのスケジュール、ウィンドウ、またはウィンドウグループを対応づけることができます。
　　つまり、複数のウィンドウをジョブに対応付けるのであれば、ウィンドウグループが必要ということになります。

出題例：スケジューラーのジョブに関する説明として正しいものを2つ選択しなさい
→各ジョブにおいてスケジュール指定は必須であるが、事前定義とジョブ作成の一部として定義することが出来る
→スケジューラの定義としてジョブの作成は必須である

出題例：ジョブに対して必ず1つだけ対応づけられ、ジョブをグループ化してロギング設定やリソースコンシューマグループと対応付けて管理するためのスケジューラコンポーネントは？
→ジョブグループ

－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
####スケジューラの管理に必要な権限
　●スケジューラのコンポーネントの作成に必要な権限
　　・CREATE JOB：自分のスキーマオブジェクトとして、ジョブ/プログラム/スケジュールを作成するために必要な権限
　　・CREATE ANY JOB：任意のスキーマオブジェクトとして、ジョブ/プログラム/スケジュールを作成するために必要な権限
　　・CREATE EXTERNAL JOB：外部実行可能ファイルを使用したジョブを作成するために必要な権限、外部JOBの作成では別途CREATE JOB権限も必要
　　・MANAGE SCHEDULER：ジョブクラス/ウィンドウ/ウィンドウグループを作成するために必要な権限

　●プログラム：EXCUTEオブジェクト権限またはEXECUTE ANY PROGRAMシステム権限
　●ジョブクラス：EXECUTEオブジェクト権限またはEXECUTE ANY CLASSシステム権限

－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
###ジョブチェーン
　　ジョブチェーンは、前の処理の結果によって異なる処理を行う依存関係を定義したジョブです。
ジョブチェーンは次の手順で作成します
　①　チェーンオブジェクトの作成
　②　ステップの定義
　③　ルールの定義
　④　チェーンの有効化
　⑤　チェーンの開始
試験重要度が低いので詳細は割愛。

【ポイント】
　●ジョブチェーンの特徴について
　　・プログラム、イベント、ネストチェーンでステップを作成
　　・チェーンルールによってステップ間の依存関係を定義
　　・ジョブまたは一時ジョブで開始

【重要】
　●**ネストしたジョブチェーンを含めることができる**
　●**依存性ベースのスケジューリングの実装に使用できる**
　●**イベントベースまたは時間ベースのスケジュールを使用して実行できる**
－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－

###軽量ジョブ
　軽量ジョブでは、最小限のメタデータおよびフットプリントが作成され、ジョブの開始に必要な時間が短縮され、作成されるREDOが削減されます。

●**標準ジョブ**
　ジョブクラスによる**グループ化**や、ジョブの定義に実行内容を組み込んで**自己完結**したジョブを作成することもできます。ただし、**データベースオブジェクトを作成する**ためのREDOログ生成が必要なため<FONT COLOR=red>作成と削除を繰り返すようなジョブには向いていません</FONT>
※標準ジョブをあとから軽量ジョブに変更することはできない

●**軽量ジョブ**
　データベースオブジェクトとして作成されないため、作成と削除に伴うオーバーヘッドが少ないジョブです。
1秒間に数百、数千のジョブを作成／削除するような場合に適しています。
※プログラムによるテンプレートの使用が必須。（プログラムの引数を使用することは可能）
　－スケジュールの使用は必須ではないが定期的に実行するのであれば推奨。


| 条件|標準ジョブ|軽量ジョブ|
|:---------------------------------|:--------------------------|:-------------------------|
| オブジェクトのタイプ　　　　　　　　|スキーマオブジェクト　　　　　|非スキーマオブジェクト　　　|
| ジョブの作成／削除時の負荷　　　　　|**REDOログ生成が必要**　　　 |REDOログ生成が不要　　　　　|
| 実行するためのセッション作成時間　　|**通常のセッションと同様**　　|標準ジョブよりも短い　　　　|
| 実行に必要なメタデータと実行時データ|データベースインスタンスで管理|**ディスクを使用（負荷大）**|
| 自己完結型（インライン）のジョブ作成|可能　　　　　　　　　　　　　|不可能（テンプレート：プログラムが必要）|
| ジョブの属性　　　　　　　　　　　　|すべて設定可能　　　　　　　　|**ほとんど設定できない**　　|
| ジョブの権限設定　　　　　　　　　　|すべて設定可能　　　　　　　　|**設定できない**　　　　　　|

【ポイント】
処理の内容にから標準ジョブ、軽量ジョブのどちらが適しているかを判断できるようにすること。
・設定の柔軟性を最大にするには標準ジョブ
・非常に短時間に多数のジョブを作成する場合は軽量ジョブ

■複数ジョブ
　DBMS_SCHEDULER.CREATE_JOBS プロシージャを使用して、**複数のジョブ（通常ジョブ、軽量ジョブ）をまとめて実行できます**

■ウィンドウとウィンドウグループの作成
　ウィンドウは、日、週、月などの一定の期間の中だけで動作させることを定義するスケジューラコンポーネントです。
ウィンドウとリソースマネージャのプランを対応付けることで**リソース割当ての制限を自動的に行うことも可能です**
リソースプラント対応付けておくことで、**ウィンドウがオープンされると**自動的にリソースプランが有効化されます。
※1つのジョブに2つ以上のウィンドウを指定することはできません。
複数のウィンドウと対応付ける場合にはウィンドウグループを作成します。

■優先度
　ウィンドウには優先度の概念があります。これは、ある1時点においてオープンできるのは1つのウィンドウに限られるためです。
　●優先順位が最も高いウィンドウをオープン
　●同じ優先順位場合
　　●すでにアクティブであれば、そのままアクティブなウィンドウをオープンしておく
　　●残りの期間がより長いウィンドウをオープンする

<FONT COLOR=red>※注意※</FONT>
ジョブの優先度は、異なるジョブクラス（グループ）のジョブに対しては保証されない。

例
APPグループ　　：優先度2
ADMINグループ　：優先度1　

この場合どちらが優先されるかは優先度では決定しない点に注意すること。

出題例：スケジューラの構成に関する説明として正しいものを2つ選択しなさい
→ジョブチェーンは依存性スケジューリングの実装のために使用される
→スケジューラのウィンドウはリソースマネージャを使用してリソース割当てを制御できる
－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
####■その他
　名前と太文字の部分だけ押さえておく。

■ファイルウォッチャ
　Oracle Scheduler オブジェクトの1つ。**ローカルシステムまたはリモートシステムでファイルの監視を行い、ファイルがシステムに作成された時にジョブを開始することができる。**
　リモートシステムからファイル作成のイベントを受信するにはスケジューラエージェントが実行され、そのエージェントがデータベースに登録されている必要がある。
　ファイルウォッチャは、10分間隔でファイルの作成をチェックし、指定したファイルが作成されたことを検出すると、到着イベントを呼び出す。

【理解】10分間隔でファイルの到着チェックを行いますが、時間ベースのジョブではなくイベントベースのジョブです。
ファイルが到着するというイベントが起きたらジョブが実行されるイメージです。

設定手順に関しては割愛。出題されたら捨てる。

出題例：ファイルウォッチャに関する説明として正しいものを2つ選択しなさい
→ファイルがシステムに到着したことでジョブが開始される対象ファイルの場所、名前などのプロパティを定義したオブジェクト
→スケジューラ資格証明は、ファイルアクセスのためにホストOSで認証に使用するオブジェクト

■リモートデータベースジョブ
　ジョブが作成されたデータベースで実行されるデータベースジョブをローカルデータベースジョブまたは単にジョブといいます。これに対しデータベース以外のターゲットデータベースで実行されるデータベースジョブをリモートデータベースジョブといいます。**同じホストやリモートホストにある別のインスタンスでストアドプロシージャや無名PL/SQLブロックを実行します。**

出題例：リモートデータベースジョブに関する説明として正しいものを2つ選択しなさい
ジョブを作成、実行するデータベースで、スケジューラエージェントのエージェント登録パスワードを設定する
ジョブが作成されたデータベースから、ジョブの実行や監視対象となるターゲットを複数指定することができる