Oracle11gのバックアップをバッチファイルから実行したい

私の周りにあるOracle11gのバックアップは、Oracle Enterprise Manager(Database Control)で行っています。
以前の日記(id:sikakura:20100818)にある通り、バックアップが失敗した場合もメールで通知がきます。
そういえば、Oracle11g(11.1)では、メール通知できないと書いたのですが、では11.2では出来るようになっているのかな?


結果、なっていました!
前回はグレーアウトされていた部分が Oracle11.2ではちゃんと機能します。


Oracle 11g (11.1.0.6)赤い枠内がグレーアウトされてます。。。

Oracle 11g (11.2.0.1) 赤い枠内でちゃんとチェックボックスがクリックできます!


さて今回はこのメール通知のお話ではなく、バッチファイルからOracle Enterprise Manager(Database Control)で
行っているようなバックアップを取得したいのです。
理由は、ある案件の対応で、バックアップをジョブ連携させる必要がでてきたためです。
でも、最近のOracleでは、RMANがありますし、バックアップをスケジュールするとRMANスクリプトが表示されるので
簡単だと高を括っていたのですが、表示されたRMANスクリプトを実行してもエラーが出て、すんなり行きませんでした。


上の内容がOracle Enterprise Manager(Database Control)でスケジュールした際に出力されるRMANスクリプトなのですが、
このまま実行してもエラーになります。
すこし調査してみると、RMANとインタラクティブに作業できる場合は、上で出力されたRMANスクリプトでOKなようです。
今回はバッチファイルで実行したいので、これでは駄目です。。。


上のどの部分がどうエラーとなるかは、あまり意味が無いと思いますので、ここでは省略したいと思います。
コマンドプロンプトからは以下のように実行します。

rman target / @rman_script.cmd log=rman_backup.log nocatalog

そして、問題のrman_script.cmdですが、以下のように設定しました。


run{
allocate channel MyChannel device type disk format='G:\Oracle\full_db_%U';
backup database plus archivelog delete all input;
delete noprompt obsolete;
release channel MyChannel;
}

allocate channelで、チャネルを開き(チャネル名をMyChannelとしました)
formatの引数で物理的なファイル名を指定します。
%Uは、Oracleがユニークな名称を設定してくれる置換文字列です。


backup database plus archivelog delete all input;
で、データベースの全体バックアップとアーカイブログのバックアップを指定しています。
delete all inputで、アーカイブログの削除を行っています。


delete noprompt obsolete;
で、ポリシーに従って過去のバックアップを削除してくれます。
ポリシーの設定はOracle Enterprise Manager(Database Control)で設定した内容が適用されます。
Oracle Enterprise Managerにログオンして、可用性>バックアップ設定>ポリシーで設定します。


最後にrelease channel MyChannel;で使用していたチャネルを開放します。
これで問題なくバックアップが取得できます。


ただし、この設定で不安なのは、RMANでバックアップを取得して、なんらかの原因でバックアップが
取得できなかった場合にきちんとエラー検出できるかどうか。。。
何か発見したら、報告します。。。