はじめに
どんなシステムにおいても、障害等によりデータが破損・損失してしまった場合に備え、バックアップを取っていることかと思います。
バックアップにも様々な種類があり、それぞれの特徴を理解し、適切なバックアップ方法を選択することが大切です。
本記事では、Oracleにおいて代表的なバックアップ方法を紹介したいと思います。
バックアップの種類
Oracle Databaseのバックアップ方法は、大きく分けて「論理バックアップ」と「物理バックアップ」の二種類があります。
論理バックアップ
・データベースが稼働している状況でデータのみ抽出し、障害時にデータを再ロードする方法
・Oracle Data Pumpを使用
・データを抽出した時点までしか復旧できない
・物理バックアップの補助手段としては有効だが、データベース全体の保護はできない
物理バックアップ
・データファイルや制御ファイルなど、データベースを構成するファイル群を物理的に別媒体へコピーし、障害時に置き換える方法
・バックアップ専用のコマンドやツールを使用
-OSコマンド
-バックアップ専用のコマンド(RMAN)
-サードベンダー製のツール
・変更ログ(REDOログ)を保存しておくことによって、障害直前の状態まで復元可能
・さらに物理バックアップには、データベースを停止して行うオフラインバックアップと、データベースが稼働している状態で行うオンラインバックアップがある。
Oracle Data Pumpのエクスポートおよびインポート
エクスポートおよびインポートとは
※エクスポートおよびインポートの種類としてはOracle Database10g以前に提供された「オリジナルのエクスポート、オリジナルのインポート」と、Oracle Database10g以降に提供された「Oracle Data Pump」の二種類がありますが、現在「Oracle Data Pump」が主流となっているため本記事では「Oracle Data Pump」について説明します。
データベース間のデータの移動を可能にするユーティリティです。
・エクスポートにより、ソース・データベースから対象のオブジェクトを抽出し、ダンプファイルと呼ばれるOSファイルを作成
・このダンプファイルは、エクスポートおよびインポートのみで読み書き可能なバイナリファイル
・インポートにより、ダンプファイルからオブジェクトの定義および表データを読み込み、ターゲット・データベースに書き込む
注意点
エクスポートで取得したデータは、エクスポートを実行した時点のデータしか含まれず、その後の変更されたデータはダンプファイルに含まれません。従って、障害が発生した場合は、エクスポートを取得した時点の状態までしか復旧できません。
また、SYSユーザー所有のオブジェクトはエクスポート対象外ですので、データベースが完全に障害を受けた場合、復旧手順としてデータベースの作成から作業を行う必要があります。
Oracle Data Pumpの特徴
・expdp/impdpコマンドラインユーティリティとDBMS_METADATA/DBMS_DATAPUMPパッケージで構成される
・Oracle Database間におけるデータの高速移動が可能
・Export/Import処理を中断/再開することが可能
・Enterprise Edition版であればパラレル実行が可能
・対象範囲を選択したデータ移動が可能(モード:データベース全体、表領域、スキーマ、表)
・対象範囲を選択したデータ移動が可能(オブジェクト単位:EXCLUDE、INCLUDE、QUERY、CONTENT)
(参考)Oracle Data Pumpによるエクスポートとインポートの用途
論理バックアップの際にOracle Data Pumpを使用すると説明しましたが、異なるバージョン間での移動も可能なため、データベースのバージョンアップや異なる環境(オンプレミス→クラウド等)におけるデータ移行としても使用可能です。
OSコマンド、バックアップツールによるオフラインバックアップ
オフラインバックアップとは、その言葉の通りデータベースを停止した状態で行うバックアップのことです。
オフラインバックアップの手順
1. Oracle Databaseを停止する
2. OSコマンドで下記対象のファイルをほかのディレクトリやテープストレージなどにバックアップを取る
【バックアップ対象ファイル】
・データファイル
・制御ファイル
・REDOログファイル
3. Oracle Databaseを起動する
オフラインバックアップはOracleを停止してファイルコピーするだけです。
アーカイブログモードになっていれば、バックアップ取得後に出力されたアーカイブREDOログファイルを適用して障害発生直前まで復旧することが可能です。
OSコマンド、バックアップツールによるオンラインバックアップ
データベースを起動した状態で行うオンラインバックアップでは、アーカイブログモードで稼働している必要があります。
オンラインバックアップの手順
1. バックアップを取得する表領域をSQLコマンドでバックアップ・モードに変更
SQL>ALTER TABLESPACE <表領域名> BEGIN BACKUP;
もしくは
SQL>ALTER DATABASE BEGIN BACKUP;
2. OSコマンドなどを使用し該当表領域を構成するデータファイルのバックアップを実施
3. SQLコマンドでバックアップ・モードを解除
SQL>ALTER TABLES PACE <表領域名> END BACKUP;
もしくは
SQL>ALTER DATABASE END BACKUP;
注意点
データベースを起動した状態でバックアップを行うので、バックアップの処理中にもデータが更新される可能性があります。そのため、リカバリの際はバックアップ中に出力されたアーカイブログも必要になります。
また、システム内の通常の処理に加えて、バックアップを取得するためにメモリやCPUなどのリソースを消費することによって、システムに負荷がかかる場合があります。
そのため、バックアップを取得する時間帯や運用ジョブの中での前後関係などを適切に管理する必要があります。
最後に
バックアップの種類、論理バックアップと物理バックアップの特徴や注意点についてまとめましたが、いかがだったでしょうか。
それぞれのバックアップ方法にメリット・デメリットはありますが、障害が起きた際、論理バックアップのみではデータベース全体の保護が難しいため物理バックアップと併せて使用することがおすすめです。
バックアップ方法を決める際に参考になれば幸いです。