データベースのバックアップ手法には、物理バックアップと論理バックアップの2つが存在します。本記事ではそれぞれの違いや適切な使用方法について解説します。また、Oracle Databaseで利用可能なバックアップ機能のうち代表的なRMAN(物理バックアップ)とData Pump(論理バックアップ)についてのバックアップおよびリストア方法についても解説します。
バックアップの種類と違いについて
Oracle Databaseのバックアップ方法には、2つの手法があります。
これらのバックアップは、障害時以外にOracle Databaseの移行にも利用されます。
※ 本記事では物理バックアップツールを紹介します。
- 物理バックアップ (本記事ではRMANツールを紹介します。)
- 論理バックアップ (本記事ではData Pumpツールを紹介します。)
物理バックアップ
物理バックアップは、特定のデータファイル、コンフィグファイル等を直接コピーして保管する手法を指します。つまり、Oracle Databaseの場合はデータファイルや制御ファイル、REDOログファイル等をそのままコピーし、別の場所に保存します。これによって、データベース内の情報が失われてしまったときや、何らかの理由で以前の状態に戻す必要があるときのバックアップとして利用できます。RMANを使用した物理バックアップはデータベースを停止せずに実行できます。バックアップ時点でのデータベースの物理的な状態を保持するため、データの整合性を維持することが可能です。
論理バックアップ
論理バックアップは、データベースの論理的なコンポーネント(テーブル、ビュー、トリガー、プロシージャなど)をダンプファイル形式でエクスポートし、必要な場合にインポートする手法を指します。論理バックアップは、特定のテーブルやデータセットだけをバックアップし、必要な場合にそれを復元できるため、特定のデータを復元したい場合や、データの移行を行いたい場合に有用です。
どちらのバックアップ方法も異なる用途と利点があります。データベースの要件や運用方針に合わせて選択することをおすすめします。
物理バックアップ
RMANでオンラインバックアップを取得
対象データベースのログモードの確認
ログモードとは、データベースの変更履歴をどのようにREDOログに記録するかを制御する設定です。ログはデータベースの変更履歴を記録しているため、リカバリやデータベースの整合性の保持に重要な役割を果たします。Oracle Databaseのログモードにはアーカイブログモードと非アーカイブログモードがあります。
データベースのログモードはアーカイブモードで運用すると、データベースを停止することなくバックアップを行うことができます。この手法は「オンライン/ホットバックアップ」と呼ばれています。対照的に、非アーカイブモードでバックアップを取得したい場合は、データベースを停止した状態でバックアップを取得する必要があります。
データベースの変更履歴がREDOログとしてオンラインREDOログファイルに記録されますが、1つのオンラインログファイルに格納できるデータ量には上限があります。複数のオンラインログファイルが存在しますが、1つのファイルが満杯になると、別のオンラインREDOログファイルを順次ローテーションしながら使用します。そのため、時間が経過するにつれ、オンラインREDOログファイルに記録された過去のデータが上書きされて失われてしまいます。これを回避するために、アーカイブログモードに設定し、過去のREDOログが上書きされる前にアーカイブREDOログファイルへコピーし、一連のREDOログが失われないように過去のREDOログを保管します。
今回は、オンラインバックアップを取得するため、RMANバックアップを実行する前に、データベースのログモードがアーカイブモードに設定されていることを確認してください。
RMANを使用し、オンラインバックアップを取得
Oracle DatabaseのRMAN機能を利用することで、簡単にオンラインバックアップを取得できます。バックアップを取得するためにはデータベースを稼働中にRMANを使用し、データベースのCDBルートに接続する必要があります。
RMANでデータベースのCDBルートに接続
DBサーバにOracleユーザーでログインし、以下のコマンドを実行すると非コンテナであれば直接DBインスタンスに接続されます。コンテナであればCDB$ROOTコンテナに接続されます。
実行例:rman TARGET/
データベースとアーカイブREDOログファイルをバックアップ
データベース全体をバックアップ取得する「BACKUP DATABASE」コマンドを実行するとデータベースのバックアップを取得することができます。「BACKUP DATABASE」コマンドを実行するとデータベース内の全てのコンテナがバックアップされます。バックアップ対象のファイルを指定する必要がなく、取得すべきファイルはRMANが自動的に判断します。さらに、「BACKUP DATABASE」コマンドに「PLUS ARCHIVELOG」を追加で指定すると、データベースと合わせてアーカイブREDOログファイルをバックアップすることもできます。データベース全体とアーカイブREDOログファイルをまとめてバックアップすることができるため、RMAN独自のバックアップセット形式にファイルをまとめて管理しやすくなります。
データベースバックアップ(データベース内の全コンテナをバックアップします)
BACKUP DATABASE
データベースとアーカイブREDOログファイルをまとめてバックアップ
BACKUP DATABASE PLUS ARCHIVELOG;
実行例:BACKUP DATABASE PLUS ARCHIVELOG;
バックアップ先を設定する
バックアップ先として高速リカバリ領域を使用する場合は、以下のパラメータを設定するだけで実現できます。
DB_RECOVERY_FILE_DEST=<高速リカバリ領域のディレクトリパス>
DB_RECOVERY_FILE_DEST_SIZE=<高速リカバリ領域の上限サイズ>
高速リカバリ領域以外をバックアップ先に指定する場合はFORMAT句にバックアップ出力先のディレクトリを含めたバックアップファイルのフルパスを指定します。
ファイル名に原則的に「%U」という置換変数指定を含めるとバックアップファイルのファイル名がバッティングしないことが保証されます。どちらの方法にしても、データベースの構成ファイルを配置するディスクと別のディスクにファイルを出力することに注意してください。
実行例:CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/disk1/%U';
バックアップ保持世代数の設定
RMANに「どのファイルが古くて不要であるか」を判断させるためには、バックアップ保持世代数を設定する必要があります。RMANはバックアップファイルの保持世代数の設定とバックアップ取得状態をもとに、不要なファイルを判定します。
以下の実行例ではバックアップ保持世代数は「2世代」に設定しており、2世代より前のバックアップファイルは不要だと判定します。
実行例:CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
RMANでデータベースを復旧
データベースのリストア
データベースをリストアする際には、データベースをマウントモードで起動します。
RMANでデータベースのCDBルートに接続し、リストア作業を実行します。その際、リストア元となるバックアップファイルや障害復旧の対象となるデータベース構成ファイルを指定する必要はありません。これらはRMANが自動的に判断します。以下のコマンドを実行するとデータベースを構成するすべてのデータファイルをバックアップから復元します。
実行例:RESTORE DATABASE;
データベースのリカバリ
データベースを構成するすべてのデータファイルに対してREDOログを適用し、データベース障害発生直前の状態に復旧します。
実行例:RECOVER DATABASE;
論理バックアップ
expdpでダンプデータ(バックアップデータ)をエクスポート
Data Pump (expdp) 行うための事前作業
Data Pump機能でエクスポートするためには、バックアップ取得先のディレクトリを作成する必要があります。以下のコマンドを実行することでディレクトリを作成することができます。
コマンド:mkdir <ディレクトリパス>
実行例:mkdir /home/oracle/TEST_DIR
ディレクトリオブジェクトの作成
※ sysユーザーで対象のPDBに接続し、次に以下の手順を実行してください。
コマンド:create or replace directory [ディレクトリオブジェクト名] as [ディレクトリのパス]
実行例:create or replace directory TEST_DIR AS '/home/oracle/TEST_DIR';
ディレクトリへ読み書き権限をDatapump実行ユーザーへ付与
コマンド:grant read, write on directory <ディレクトリオブジェクト名> to <ユーザー名 or ロール名>;
実行例:grant read, write on directory TEST_DIR to sonic;
Data Pumpの実行権限を実行ユーザーへ付与(エクスポート権限)
コマンド:grant DATAPUMP_EXP_FULL_DATABASE to <ユーザー名 or ロール名>;
実行例 :grant DATAPUMP_EXP_FULL_DATABASE to sonic;
expdpでダンプデータ(バックアップデータ)のエクスポート
バックアップをエクスポート(テーブルバックアップ)
ユーザー名 | :実行するユーザー名 |
パスワード | :ユーザーのパスワード |
DB名 | :対象データベース名 |
ディレクトリオブジェクト名 | :出力ディレクトリ名(先ほど作成したディレクトリ) |
ダンプファイル名 | :バックアップファイル名 |
ログファイル名 | :ログファイル出力名 |
tables | :テーブルの指定 |
tablesのバックアップではなく、スキーマ、表領域、FULL単位でバックアップしたい場合はtablesの代わりに以下を設定します。
FULL | =<y>(yはフルバックアップする場合必須) |
Schemas | =<スキーマ名> |
Tablespaces | =<表領域名> |
Tables | =<テーブル名> |
コマンド: |
expdp <ユーザー名>/<パスワード>@<DB名> |
実行例 : | expdp sonic/xxxxxxxxx@pdb1 directory=TEST_DIR dumpfile=FULLTEST_ORCL.dmp logfile=FULL_TEST_ORCL.log tables=EMP |
エクスポートしたファイルの確認
コマンド:ls -l <ディレクトリパス>
実行例 :ls -l /home/oracle/TEST_DIR/
impdpでダンプデータ(バックアップデータ)をインポート
Data Pumpの実行権限を実行ユーザーへ付与(インポート権限)
※ sysユーザーで対象のPDBに接続し、次に以下の手順を実行してください。
コマンド:grant DATAPUMP_IMP_FULL_DATABASE to <ユーザー名 or ロール名>;
実行例 :grant DATAPUMP_IMP_FULL_DATABASE to sonic;
impdpでダンプデータ(バックアップデータ)のインポート
インポート対象となるデータベース内にバックアップデータと同名のオブジェクトが存在している場合、ORA-31684が発生して、エクスポートがエラーで終了することがあります。この場合、「TABLE_EXISTS_ACTION=<指定>」を使用することにより、ORA-31684の発生を回避することができます。
※ TABLE_EXISTS_ACTIONに以下のどれかを必要に応じて指定します。
SKIP | : 既に同名の表が存在する場合,何も行わず次のオブジェクトに移動します |
APPEND | : 既存の表に対してダンプファイルに含まれる行を追加でロードします |
TRUNCATE | : 既存の行を全て削除して、ダンプファイルから行をロードします |
REPLACE | : 既存の表を削除して、ダンプファイルから表の定義と行をロードします |
コマンド | impdp <ユーザー名>/<パスワード>@<DB名> directory=<ディレクトリオブジェクト名> dumpfile=< ダンプファイル名> logfile=<ログファイル名> tables= <テーブル名> table_exists_action=<指定> |
実行例 | impdp sonic/ xxxxxxxxx @pdb1 directory=TEST_DIR dumpfile=FULL_TEST_ORCL.dmp logfile=FULL_TEST_ORCL.log tables=EMP table_exists_action=skip |
おわりに
バックアップ戦略の構築には、データの重要度や復旧の要件に応じて物理バックアップと論理バックアップの組み合わせを検討することが重要です。どちらの手法もデータの保護と復旧を確保するために欠かせない要素です。そのため状況に応じて適切なバックアップ戦略を選択することが重要です。
Oracle Cloudは利用用途に合わせて、複数のOracle Databaseのサービスを提供しています。Oracle Databaseをクラウドで使い続けるならOracle Cloudがおすすめです。
- カテゴリ:
- エンジニアリング