2011年7月1日金曜日

"Oracle RDS"をエクスポート

スズキです。

下記で"exp"コマンドが利用出来るEC2インスタンスが用意できたので、
"SUZ-LAB AMI"(CentOS 5.6)に"Oracle Client"をインストール
ようやく、"Oracle RDS"をエクスポートしてみます。

その前に、"oracle"ユーザーの".bash_profile"は下記のようにしておきます。

...
ORACLE_HOME=/opt/oracle/product/11.2
NLS_LANG=JAPANESE_JAPAN.AL32UTF8
PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export ORACLE_HOME NLS_LANG PATH

そして"oracle"ユーザーで実際にエクスポートです。

$ exp user/pass@suzlab.xxxxxxxx.ap-northeast-1.rds.amazonaws.com:1521/suzlab owner=user

Export: Release 11.2.0.1.0 - Production on 金 7月 1 13:26:57 2011

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.


接続先: Oracle Database 11g Release 11.2.0.2.0 - 64bit Production
AL32UTF8キャラクタ・セットおよびAL16UTF16 NCHARキャラクタ・セットでエクスポートを実行します

指定されたユーザーをエクスポートします...
. プリスキーマ・プロシージャ型オブジェクトとアクションをエクスポート中
. ユーザーSUZUKIの外部関数ライブラリ名をエクスポート中 
. PUBLICタイプのシノニムをエクスポート中
. プライベート・タイプのシノニムをエクスポート中
. ユーザーSUZUKIのオブジェクト型定義をエクスポート中 
SUZUKIのオブジェクトをエクスポートします...
. データベース・リンクをエクスポート中
. 順序番号をエクスポート中
. クラスタ定義をエクスポート中
. SUZUKIの表をエクスポートします... 従来型パス経由...
. シノニムをエクスポート中
. ビューをエクスポート中
. ストアド・プロシージャをエクスポート中
. 演算子をエクスポート中
. 参照整合性制約をエクスポート中
. トリガーをエクスポート中
. 索引タイプをエクスポート中
. ビットマップ、ファンクションおよび拡張可能索引をエクスポート中
. ポスト可能なアクションをエクスポート中
. マテリアライズド・ビューをエクスポート中
. スナップショット・ログをエクスポート中
. ジョブ・キューをエクスポート中
. リフレッシュ・グループと子をエクスポート中
. ディメンションをエクスポート中
. ポストスキーマ・プロシージャ型オブジェクトとアクションをエクスポート中
. 統計をエクスポート中
エクスポートは警告なしで正常終了しました。

ついでに日時のファイル名でエクスポートして、"s3fs"などでマウントした
バックアップ領域にダンプファイルをコピーするスクリプトも作成しておきました。
(引数に残す世代も指定できます)

#!/bin/sh

# RDSの接続先情報
RDS=user/pass@suzlab.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com:1521/suzlab
# エクスポート対象オーナー
OWNER=user
# 一時出力ディレクトリ
BASE_TMP=/tmp/oracle/tmp
# ("s3fs"でマウントした)出力ディレクトリ
BASE_S3=/tmp/oracle/s3

# Oracle系環境変数
ORACLE_HOME=/opt/oracle/product/11.2
NLS_LANG=JAPANESE_JAPAN.AL32UTF8
PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export ORACLE_HOME NLS_LANG PATH

# 変数定義
GENERATION=$1
TIMESTAMP=`date +"%Y%m%d%H%M%S"`
FILE_TMP=$BASE_TMP/$TIMESTAMP.dmp
LOG_TMP=$BASE_TMP/$TIMESTAMP.log
FILE_S3=$BASE_S3/$TIMESTAMP.dmp
LOG_S3=$BASE_S3/$TIMESTAMP.log

# エクスポート
exp $RDS owner=$OWNER file=$FILE_TMP log=$LOG_TMP
# ダンプファイルを一時出力先から移動
mv $FILE_TMP $FILE_S3
# ログファイルを一時出力先から移動
mv $LOG_TMP $LOG_S3

# 引数(世代)が指定されていたら実行
if [ $# -eq 1 ]; then

    # ダンプファイルの削除(世代を残して)
    COUNT_LOG=`ls -1 $BASE_S3/*.log | wc -l`
    COUNT_LOG_DELETE=`expr $COUNT_LOG - $GENERATION`
    if [ $COUNT_LOG_DELETE -ge 0 ]; then
        ls -1 $BASE_S3/*.log | sort -r | tail -$COUNT_LOG_DELETE | xargs rm -f
    fi

    # ログファイルの削除(世代を残して)
    COUNT_FILE=`ls -1 $BASE_S3/*.dmp | wc -l`
    COUNT_FILE_DELETE=`expr $COUNT_FILE - $GENERATION`
    if [ $COUNT_FILE_DELETE -ge 0 ]; then
        ls -1 $BASE_S3/*.dmp | sort -r | tail -$COUNT_FILE_DELETE | xargs rm -f
    fi

fi

ダンプファイルを3世代残す場合は下記のように実行でき、
スクリプト上で定義している出力フォルダ(/tmp/oracle/s3/)に、
3世代残っていることが確認できるはずです。

$ ./oracle-export.sh 3
...
$ ls -1 /tmp/oracle/s3/
20110630192144.dmp
20110630192144.log
20110701140804.dmp
20110701140804.log
20110701140810.dmp
20110701140810.log

"Oracle RDS"モードも、そろそろ終了かな...
--------
http://www.suz-lab.com

0 コメント: