cronとexpユーティリティを使ったOracleのかんたんバックアップ
最近の Linuxだと、/etc/cron.daily に置いてあるスクリプトが勝手に毎日実行されるようになっていると思う。
なので、これを使って Oracleのデイリーバックアップをしてみよう。
※この記事で扱っている内容を実際に運用した結果について責任は持てませんので、やるなら必ず自分で検証してからにしてください。
私の作成した /etc/cron.daily/exp.cron は下記。
/etc/cron.dailyに配置されたスクリプトは cronデーモンにより root権限で実行されるが、私の場合 rootユーザにOracle用の環境設定をしておらず、かわりに oracle ユーザに対してORACLE_HOMEなどの設定をしてある。そのためこのスクリプトでは expコマンドを su - oracle で呼び出している。suコマンドに - オプションがついているので、expコマンドはユーザ oracleのホームディレクトリで実行される。そのためこのスクリプトではバックアップファイルもそこに出力されることになる。
また、このスクリプトでは1ユーザのスキーマのみexpしている。もしデータベース全体のバックアップを取る必要がある場合は、expコマンドに与えるユーザーとしてDBA権限(Oracleにデフォルトで存在するのは sys, system など)を持ったものを選択し、FULL=y を指定する。
出力先ファイル名として、`date +%a` を用いている。このコマンドは曜日を返す。つまり、曜日毎に違うファイル名でバックアップファイルを出力するので、常に一週間分のバックアップが保持されることになる。
cronの実行中に出力された内容はrootにメールされるが、その中に expコマンドから出力された「EXP-00091: 不審な統計をエクスポートしています」という警告があるかもしれない。
不審という言葉もどうかと思うが、これは「統計情報をエクスポートしたものの、(なんらかの理由で)これをインポートしても使えないかもよ?」という意味である。この警告が出力される原因は色々あるようだが、統計情報はインポート後に再作成できるので、よほどテーブルが巨大で統計に時間がかかるというのでなければこの警告は無視して構わないと思う。
ついでにメモしておくと、統計情報の再作成をするには、プリセットのANALYZE_SCHEMAプロシージャをコールするのが早い。
('HR' はユーザー名で置き換えること。大文字小文字の区別あり)
統計情報ってなに?という人はOracleの CBO(コストベース・オプティマイザ)について調べると良い。
なので、これを使って Oracleのデイリーバックアップをしてみよう。
※この記事で扱っている内容を実際に運用した結果について責任は持てませんので、やるなら必ず自分で検証してからにしてください。
私の作成した /etc/cron.daily/exp.cron は下記。
#!/bin/sh
USER=hr # Oracleユーザー名
PASSWORD=secret # パスワード
FILE=$USER-`date +%a`.dmp
echo "exp $USER/$PASSWORD FILE=$FILE && gzip --force $FILE" | su - oracle
/etc/cron.dailyに配置されたスクリプトは cronデーモンにより root権限で実行されるが、私の場合 rootユーザにOracle用の環境設定をしておらず、かわりに oracle ユーザに対してORACLE_HOMEなどの設定をしてある。そのためこのスクリプトでは expコマンドを su - oracle で呼び出している。suコマンドに - オプションがついているので、expコマンドはユーザ oracleのホームディレクトリで実行される。そのためこのスクリプトではバックアップファイルもそこに出力されることになる。
また、このスクリプトでは1ユーザのスキーマのみexpしている。もしデータベース全体のバックアップを取る必要がある場合は、expコマンドに与えるユーザーとしてDBA権限(Oracleにデフォルトで存在するのは sys, system など)を持ったものを選択し、FULL=y を指定する。
出力先ファイル名として、`date +%a` を用いている。このコマンドは曜日を返す。つまり、曜日毎に違うファイル名でバックアップファイルを出力するので、常に一週間分のバックアップが保持されることになる。
cronの実行中に出力された内容はrootにメールされるが、その中に expコマンドから出力された「EXP-00091: 不審な統計をエクスポートしています」という警告があるかもしれない。
不審という言葉もどうかと思うが、これは「統計情報をエクスポートしたものの、(なんらかの理由で)これをインポートしても使えないかもよ?」という意味である。この警告が出力される原因は色々あるようだが、統計情報はインポート後に再作成できるので、よほどテーブルが巨大で統計に時間がかかるというのでなければこの警告は無視して構わないと思う。
ついでにメモしておくと、統計情報の再作成をするには、プリセットのANALYZE_SCHEMAプロシージャをコールするのが早い。
('HR' はユーザー名で置き換えること。大文字小文字の区別あり)
call DBMS_UTILITY.ANALYZE_SCHEMA('HR','compute');
統計情報ってなに?という人はOracleの CBO(コストベース・オプティマイザ)について調べると良い。
ラベル: Oracle

0 件のコメント:
コメントを投稿
<< ホーム