Skill Note

平凡なエンジニアがメモ代わりにプログラミング, インフラ, ネットワークを書き綴るブログ

[Oracle]ジョブをスケジューリングして定期実行する方法

      2015/11/07

DBMS_SCHEDULERパッケージを使用したジョブスケジューリング

Oracleでジョブを定期実行するには、DBMS_SCHEDULERパッケージやDBMS_JOBパッケージを使用してスケジューリングします。

DBMS_SCHEDULERパッケージはOracle10g以降から使用可能なパッケージで、DBMS_JOBパッケージよりも詳細なスケジューリング設定をすることができます。

また、DBMS_JOBパッケージで作成しているスケジュールは、DBMS_SCHEDULERパッケージへの移行が推奨されています。

DBMS_SCHEDULERパッケージでは、ジョブタイプに外部プログラムを指定することができ、バッチファイルやコマンドラインをOracleから起動することができます。

この記事ではDBMS_SCHEDULERパッケージを使用したジョブスケジュールの作成方法を記載します。

ジョブの作成

1つのジョブを作成する場合はCREATE_JOBプロシージャ、複数のジョブを作成する場合はCREATE_JOBSプロシージャでジョブを作成します。

新規ジョブとしてジョブ名をjob1、TEST_PROCストアドプロシージャを2015/01/01から2015/12/31まで1日おきに実行するジョブスケジュールを作成する場合。

Windows上でDOSコマンドを実行する外部ジョブの作成する場合。

パラメータ概要

パラメータ名説明
job_nameジョブを一意に識別できる名前を指定します。
job_type作成するジョブのタイプを指定します。
PLSQL_BLOCK - 無名PL/SQLブロック
STORED_PROCEDURE - ストアドプロシージャ
EXECUTABLE - OSのコマンドラインから実行可能な外部プログラム
CHAIN - チェーン
job_actionジョブのアクションを指定します。
ジョブタイプがPLSQL_BLOCKの場合は、PL/SQLコードを指定します。
例.BEGIN my_proc(); END;
ジョブタイプがSTORED_PROCEDUREの場合は、ストアドプロシージャ名を指定します。
ジョブタイプがEXECUTABLEの場合は、外部プログラム名を指定します。
例.コマンドプロンプトを実行 '\windows\system32\cmd.exe'
ジョブタイプがCHAINの場合は、チェーンオブジェクト名を指定します。
start_dateジョブを開始する日時を指定します。
repeat_interval繰り返す間隔を指定します。指定がない場合は、指定した開始日に1回のみ実行されます。
end_dateジョブを終了する日時を指定します。end_dateに値が指定されていない場合、ジョブは無期限で繰り返されます。
job_classジョブに関連付けるクラス。
auto_dropデフォルトはTRUEが設定されており、ジョブはスケジュールが全て完了するとジョブは自動で削除されます。
フラグをFALSEに設定すると削除されなくなります。
enabledデフォルトはFALSEが設定されており、ジョブ作成時は使用不可で作成されます。
フラグをTRUEに設定するとジョブが使用可能状態で作成されます。
number_of_argumentsプログラムがインラインされている場合の引数の数。
commentsジョブのコメントを指定します。

詳細は下記参照。
http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/appdev.111/E05686-02/d_sched.htm

ジョブの有効化、無効化

ジョブを有効にするにはENABLEプロシージャを使用しジョブ名を指定します。

ジョブを有効にするにはDISABLEプロシージャを使用しジョブ名を指定します。

ジョブの停止

実行中のジョブを停止するにはSTOP_JOBプロシージャを使用しジョブ名を指定します。
1回かぎりのジョブの状態はSTOPPEDに設定され、繰返しジョブの状態は、(次回のジョブ実行がスケジュールされているため)SCHEDULEDに設定されます。

ジョブの削除

ジョブを削除するにはDROP_JOBプロシージャを使用しジョブ名を指定します。

ジョブの確認

現ユーザのジョブを確認するにはUSER_SCHEDULER_JOBSを参照します。

Google AdSense PC

Google AdSense PC

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

sqlserer
[SQL Server]データを期間別に集計する

SQL Serverで集計表を出力 日付をDATETIME型で管理している場合、CONVERT関数、DATEPART関数を使って、日、週、月、年別の集計結果を出 …

oracle
[Oracle]Data Pumpを使用したデータベースのバックアップ

Data Pump機能のexpdp/impdpコマンドを使用するとデータベース全体、スキーマ単位、表単位など対象範囲を指定したバックアップやリストアを行うことが …

sqlserer
[SQLServer]日付文字列 + 時刻文字列をDATETIME型に変換する方法

SQLServerで日付文字列 + 時刻文字列をDATETIME型に変換する方法 日付と時刻を別のカラムに格納している場合に日時データとして扱いたい場合はCON …

oracle
[Oracle]インストールに失敗する原因と対処方法

Oracleインストールエラー時の確認事項 OracleのデータベースやクライアントをWindowsへインストール中に インストーラが途中で落ちたり、エラーが発 …

oracle
ODP.NETをNuGetからインストールする

ODP.NETのインストール手順 Oracle 12cから公式のODP.NETがNuGetに追加されました。 この記事ではODP.NETをNuGetからインスト …

sqlserer
[SQL Server]除算時の注意点

SQLServerで除算結果が小数になる場合 たとえば、1100グラムをキロに換算する場合は「1100 / 1000」で計算すれば「1.1kg」と求められるが …

db
[Database]データベースのバージョン/エディションを確認する方法

OracleとSQLServerのバージョン/エディションを確認 Oracle

SQLServ …

sqlserer
[SQLServer]形式指定で日付を取得する方法

SQLServerで形式を指定して日付を取得する 日付形式を指定するために、CONVERT関数、または、FORMAT関数を使用する。CONVERT関数とFORM …

oracle
Oracle 11g XEへのデータ移行方法を検討してみる

Oracleのデータ移行時は移行元と移行先の文字コードに注意する必要があります。 Windows環境のOracleでは「JA16SJIS」や「JA16SJIST …

sqlserer
[SQL Server]IDENTITYの値を初期化する

ID値の初期化(リセット)方法 IDENTITYプロパティを設定した列のID値を初期化(リセット)する方法を記載します。 現在のID値を確認する ID値を確認す …