2010/02/12

Oracle DatabaseでDBMS_JOBで管理されているジョブをなんとかしたい? いいよ、調べよう。ところで、人に聞く前にGoogleったんだろうね? #oracle

DBMS_JOBで管理されているジョブを何とかしたい、とかざっくばらんな質問をされたので、やり方を教えるなどした。といっても、ボクも DBMS_JOBなんて、普段意識しない(担当してるシステムでも使ってるけどスクリプトに落としこんである)ので、さらっと調べ直すところから。

ざっくりDBMS_JOBでGoogleすると:

DBMS_JOBの概要

DBMS_JOBはジョブ のスケジュールに使用するPL/SQLパッケージです。このパッケージは、より強力で柔軟性の高いOracle Schedulerで置き換えられています。DBMS_JOBからOracle Schedulerに切り替えることをお薦めしますが、DBMS_JOBは下位互換性を維持するために引き続きサポートされま す。

A リリース11g におけるDBMS_JOBのサポート - Oracle Database 管理者ガイド 11gリリース1(11.1) E05760-03

というドキュメントにいきあたる。おぉっと、もう最新の環境では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データベースに絡む仕事をするときは、総じてこんな感じなんである。われながら振り返ってみるに、テキトー極まりないなぁ。

blog comments powered by Disqus