こんにちは。GMO NIKKO エンジニアのN.I.です。
みなさんデータベースは何を使っていますか?
弊社ではRDBMSはMariaDBとOracleをメインで使用しています。
アドテク業界でOracleDBを使用しているのは珍しいという話をたまに聞いたりしますが…現役で使用しています。
今回は、弊社のシステムで使用しているOracleDBのバックアップ方法について紹介させていただこうと思います。
はじめに
バックアップはOracle標準のOracle Data Pumpを使用して行っています。Oracleのバックアップとリストアをする時に便利でこの方法に統一して運用しています。
性能としては1TBのOracleDBをデータベース を約3時間でバックアップ出来ます。
アクセスが少し遅くなりますが、バックアップ中もSelect文、Insert文の発行を問題なく出来ますので、週1回深夜帯に3時間半かけてデータベース全体のバックアップを取得しています。
また、フルバックアップを取得しておけば一部テーブルデータだけを復旧するなんてことも出来ます。
実際の使用方法について
expdp/impdpコマンドで指定してバックアップを取得します。手順としては以下の流れになります。
1.事前準備
バックアップファイルの出力フォルダの設定を行います。
デフォルトの場所にも出力出来ますが、Oracleインストールされたフォルダ内に出力為、出力フォルダーを別途設定することをお勧めします。
CREATE DIRECTORY文で出力フォルダの指定が出来ます。
出力フォルダー作成
1 2 3 4 5 6 7 |
##フォルダ作成SQL文 CREATE {OR REPLACE} DIRECTORY ディテクトリーパス名 AS 'ディレクトリーパス' ##SQL例 CREATE DIRECTORY DATA_BACKUP_DIR AS 'C:\oracle_backup' ##作成には、システム権限「CREATE ANY DIRECTORY」が必要です。 |
2.データベースのバックアップ
実際にデータベース全体のバックアップファイルを作成する場合は以下expdpコマンドを実行します。
フルバックアップのバックアップ
1 2 3 4 5 6 7 8 9 10 |
##バックアップコマンド expdp system/*******@MARSDB DIRECTORY=DATA_BACKUP_DIR DUMPFILE=FULL_EXPORT_yyyymmdd.DMP LOGFILE=MARS_FULL_EXPORT_yyyymmdd.log FULL=y ##内容説明 system/******* ・・・ユーザー名/パスワード @MARSDB ・・・データペース名(初期設定の場合はNAMS) DIRECTORY DATA_BACKUP_DIR ・・・出力ディレクトリー名(1.事前準備で作成したディレクトリーパス名) DUMPFILE=FULL_EXPORT.DMP ・・・バックアップファイル名 LOGFILE=MARS_FULL_EXPORT_yyyymmdd.log ・・・ログファイル出力名 FULL=y ・・・フルエクスポートの指定(フルバックアップする場合必須) |
そんなに難しくは無いかなと思います。
他にも特定のユーザーデータのみエクスポートや、表を選択していエクスポートすることも出来ます。
3.データベースのリストア
リストアする場合、impdpコマンドを実行しインポート出来ます。
リストア時注意点:DROPは自動的に行われない為、リストアするデータベースに同じ名前のSEQUENCE、VIEWがある場合はインポートされません。
SEQUENCE、VIEWもインポートしたい場合は事前にDROPが必要です。
1 2 3 4 5 6 7 8 9 10 11 |
##リストアコマンド impdp system/*******@MARSDB DIRECTORY=DATA_BACKUP_DIR TABLE_EXISTS_ACTION=REPLACE DUMPFILE=FULL_EXPORT_yyyymmdd.DMP LOGFILE=MARS_FULL_EXPORT_yyyymmdd.log SCHEMAS=TESTUSER,TESTSYSUSER ##内容説明 system/******* ・・・ユーザー名/パスワード @MARSDB ・・・データペース名 DIRECTORY DATA_BACKUP_DIR ・・・出力ディレクトリー名(1.事前準備で作成したディレクトリーパス名) TABLE_EXISTS_ACTION=REPLACE ・・・既存の表を削除した後、ソースから表を作成およびロードします。 DUMPFILE=FULL_EXPORT.DMP ・・・リストアするバックアップファイル名 LOGFILE=MARS_FULL_EXPORT_yyyymmdd.log ・・・ログファイル出力名 SCHEMAS=TESTUSR,TESTSYSUSR ・・・インポートするスキーマ名(スキーマ[ORACLEログインユーザー名]を設定しない場合はsystem領域の表も全部インポートされます。エラーだらけになる為、弊社ではスキーマでインポートデータを指定して使用しています。) |
おわりに
今回はOracleDBのバックアップについて紹介させていただきました。
Oracle Data Pumpを使用すれば本番DBのデータをテストDBにそのままコピーしたい場合も対応出来ますので運用が楽になると思います。
意外と使いやすいと思いますのでOracleを使用している方はぜひ使用してみてください。