Oracle DatabaseでDBMS_JOBで管理されているジョブをなんとかしたい? いいよ、調べよう。ところで、人に聞く前にGoogleったんだろうね? #oracle
DBMS_JOBで管理されているジョブを何とかしたい、とかざっくばらんな質問をされたので、やり方を教えるなどした。といっても、ボクも DBMS_JOBなんて、普段意識しない(担当してるシステムでも使ってるけどスクリプトに落としこんである)ので、さらっと調べ直すところから。
ざっくりDBMS_JOBでGoogleすると:
A リリース11g におけるDBMS_JOBのサポート - Oracle Database 管理者ガイド 11gリリース1(11.1) E05760-03DBMS_JOBの概要
DBMS_JOB
はジョブ のスケジュールに使用するPL/SQLパッケージです。このパッケージは、より強力で柔軟性の高いOracle Schedulerで置き換えられています。DBMS_JOB
からOracle Schedulerに切り替えることをお薦めしますが、DBMS_JOB
は下位互換性を維持するために引き続きサポートされま す。
というドキュメントにいきあたる。おぉっと、もう最新の環境ではDBMS_JOBは時代遅れなのかと軽く意表を驚きつつ。DBMS_JOBを管理す るためのプロシージャとして次の三つが紹介されている。
- DBMS_JOB.SUBMIT
DBMS_JOBにジョブを登録する
- DBMS_JOB.WHAT
DBMS_JOBに登録されたジョブの内容を変更する
- DBMS_JOB.REMOVE
DBMS_JOBからジョブを取り除く
そーいや、これ以外にDBMS_JOB.RUN(DBMS_JOBに登録されたジョブを今、実行する)なんてのもあったな。たまに使うや。
さておき、どれを使うにせよ、ジョブ名(番号)をしる必要がある。Oracleのことだからテーブルかビューで管理してるんだろうけど、思い出せな い。それで調べるために:
connect / as sysdba select OBJECT_NAME, OBJECT_TYPE from DBA_OBJECTS where OBJECT_NAME like '%JOB%' and ( OBJECT_TYPE = 'TABLE' or OBJECT_TYPE = 'VIEW');
と実行。ヒットした中から DBA_JOBS が怪しいかろうと desc DBA_JOBS してみと、これでドンピシャりっぽい。JOBbの名 前やら、持ち主やらの情報が入っている。どうやら見覚えもある。
select JOB, SCHEMA_USER, WHAT from DBA_JOBS;
と実行すると、どうやら登録されていると思しきジョブらしいものが出てきた。あとは出てきたジョブの内容を確認をするなどして引渡し。
以上。
ボクがOracleデータベースに絡む仕事をするときは、総じてこんな感じなんである。われながら振り返ってみるに、テキトー極まりないなぁ。