Oracleをcronで定期的にexpでバックアップする方法
概要
expコマンドをcronで定期的に実行する、というだけの話。
簡単そうに思えるが、意外とハマったのでメモとして残しておく。
crontabへの登録
oracleユーザというものがすでに存在すると仮定して、以下、crontabに登録する内容。
(oracleユーザで登録する。)
SHELL=/bin/bash MAILTO="" 0 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,0 * * * $HOME/bin/backup_app >> $HOME/databackup/backup_app.log 2>&1
起動されるスクリプト
#! /bin/bash WEEKDAY=$(env LANG=C date '+%a') export ORACLE_HOME=/opt/oracle/product/10.2.0/db_1 export ORACLE_SID=orcl export NLS_LANG=.AL32UTF8 BACKFILE=/home/oracle/databackup/app.$WEEKDAY.exp rm -f $BACKFILE $ORACLE_HOME/bin/exp system/systemmanager file=$BACKFILE owner=app
本題とはあまり関係ないが、このスクリプトは業務時間内(?)で毎時expをとっている。
開発チームで共有しているデータベースで「うわー、SQL間違えてマスタごっそり消しちまったよ!!」みたいなアホミスの回復を助けられるかも、
という淡い期待を背負ったスクリプトである。(本番運用のスクリプトじゃない。)
なので、毎時とって、ファイルとしては曜日で最大7つのローテートになっている。
厳密なデータ整合性なんかは考えていない。