RMANバックアップを使用したオブジェクト・ストレージからのデータベースのリカバリ
この記事では、オブジェクト・ストレージに格納されたRecovery Manager (RMAN)バックアップをリカバリする方法について説明します。
前提条件
次のものが必要になります:
- データベースのリストア先の新しいDBシステム(後述の前提条件を参照)。詳細は、DB Systemの作成の概要を参照してください。
- Oracle Database Cloud Backup ModuleをDBシステムにインストールする必要があります。詳細は、RMANを使用したオブジェクト・ストレージへのデータベースのバックアップのDB Systemへのバックアップ・モジュールのインストールを参照してください。
前提作業
後述の手順では、次のことを前提としています:
- リストアしたデータベースをホストするための新しいDBシステムが作成されており、その新しいDBシステムに他のデータベースが存在していないこと。既存のデータベースがあるDBシステムにリストアすることも可能ですが、それについてはこのトピックでは扱いません。
-
元のデータベースが失われ、最新のRMANバックアップのみが残ります。この手順では、DBシステム(データベースを含む)が存在しないことを前提としています。
ノート:
最新のバックアップに含まれていないデータは失われます。 - 最後のバックアップの時点で元のデータベースによって使用されていたOracle Walletまたは暗号化キー(あるいはその両方)が使用可能になっていること。
- RMANバックアップに、最新のバックアップの時点での制御ファイルとspfileのコピー、および完全なデータベース・リカバリの実行に必要なすべてのデータ・ファイル・バックアップとアーカイブ・ログ・バックアップが含まれていること。
- リストア中、RMANカタログは使用されません。
DBシステムでのストレージの設定
- DBシステムにSSH接続します。
ssh -i <private_key_path> opc@<db_system_ip_address>
- opcとしてログインし、sudoでrootユーザーに切り替えます。ハイフンを含む
sudo su -
を使用して、rootユーザーのプロファイルを起動します。これによって、PATHがdbcliディレクトリ(/opt/oracle/dcs/bin
)に設定されます。login as: opc sudo su -
- 既存の空のデータベース・ホームを使用することも、リストア用に新しいデータベース・ホームを作成することもできます。このステップの完了に役立つ、該当するコマンドを使用します。
既存のデータベース・ホームを使用する場合:
-
dbhomeコマンドを使用して、データベース・ホームをリストします。
出力:dbcli list-dbhomes
ID Name DB Version Home Location ---------------------------------------- -------------------- ---------- --------------------------------------------- 2e743050-b41d-4283-988f-f33d7b082bda OraDB12102_home1 12.1.0.2 /u01/app/oracle/product/12.1.0.2/dbhome_1
-
databaseコマンドを使用して、データベース・ホームがどのデータベースとも関連付けられていないことを確認します。
必要に応じて、dbhomeコマンドを使用して、リストア用のデータベース・ホームを作成します。
-
- dbstorageコマンドを使用して、DATA、RECOおよびREDOストレージ用のディレクトリを設定します。次の例では、rectestデータベースに10GBのACFSストレージを作成します。
dbcli create-dbstorage --dbname rectest --dataSize 10 --dbstorage ACFS
ノート:
バージョン11.2データベースをリストアする場合は、ACFSストレージを指定する必要があります。
データベースのリストアおよびリカバリの実行
- DBシステムにSSH接続して、opcとしてログインし、oracleユーザーになります。
sudo su - oracle
/etc/oratab
にデータベースのエントリを作成します。元のデータベースと同じSIDを使用します。db1:/u01/app/oracle/product/12.1.0.2/dbhome_1:N
- oraenvユーティリティを使用して、
ORACLE_HOME
およびORACLE_SID
環境変数を設定します。. oraenv
- 元のデータベースのDBIDを取得します。これは、バックアップ・メディアの
controlfile
自動バックアップのファイル名から取得できます。ファイル名には、DBIDを含む文字列が含められます。文字列の一般的な形式はc-DDDDDDDDDDDD-YYYYMMDD-NN
です。DDDDDDDDDDDD
はDBID、YYYYMMDD
はバックアップが作成された日付、NN
はファイル名を一意にする順序番号です。次の例では、DBIDは1508405000です。実際のDBIDとは異なります。オブジェクト・ストレージの一般的な問合せを実行するには、次のcurl構文を使用します。赤色のパラメータは、バックアップ・モジュールのインストール時に指定したパラメータと同じです(RMANを使用したオブジェクト・ストレージへのデータベースのバックアップのDB Systemへのバックアップ・モジュールのインストールを参照)。
curl -u '<user_ID>.com:<auth_token>' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/<object_storage_namespace>
リージョン名を調べるには、リージョンおよび可用性ドメインを参照してください。
たとえば次のようにします。
curl -u 'djones@mycompany.com:1cnk!d0++ptETd&C;tHR' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/myobjectstoragenamespace
制御ファイル名からDBIDを取得するには、次の構文を使用します:
curl -u '<user_id>.com:<auth_token>' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/<object_storage_namespace>/<bucket_name>?prefix=sbt_catalog/c-
たとえば次のようにします。
curl -u 'djones@mycompany.com:1cnk!d0++ptETd&C;tHR' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/myobjectstoragenamespace/dbbackups/?prefix=sbt_catalog/c-
次の出力例では、1508405000がDBIDです。
{ "bytes": 1732, "content_type": "binary/octet-stream", "hash": "f1b61f08892734ed7af4f1ddaabae317", "last_modified": "2016-08-11T20:28:34.438000", "name": "sbt_catalog/c-1508405000-20160811-00/metadata.xml" }
- RMANを実行し、ターゲット・データベースに接続します。
pfile
やspfile
を作成したり、バックアップのcontrolfile
を使用する必要はありません。これらは以降のステップでリストアされます。ターゲット・データベースは(not started)
となっています。この時点では、これは正常であり、予期されたものです。
出力:rman target /
Recovery Manager: Release 12.1.0.2.0 - Production on Wed Jun 22 18:36:40 2016 Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved. connected to target database (not started)
- 前述のステップで取得した値を使用してDBIDを設定します。
set dbid 1508405000;
- 次のコマンドを実行しますサーバー・パラメータ・ファイルを使用できない場合、RMANは仮のサーバー・パラメータ・ファイルを使用してインスタンスの起動を試みます。ORA-01078およびLRM-00109のエラーは正常であり、無視してかまいません。
STARTUP NOMOUNT
startup failed: ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/u01/app/oracle/product/12.1.0.2/dbhome_1/dbs/initdb1.ora' starting Oracle instance without parameter file for retrieval of spfile Oracle instance started Total System Global Area 2147483648 bytes Fixed Size 2944952 bytes Variable Size 847249480 bytes Database Buffers 1254096896 bytes Redo Buffers 43192320 bytes
- 自動バックアップからサーバー・パラメータ・ファイルをリストアします。
SBT_LIBRARYは、バックアップ・モジュールがインストールされたときに
-libDir
パラメータで指定されたライブラリ(/home/oracle/lib/
など)と同じです。OPC_PFILEは、バックアップ・モジュールがインストールされたときに
-configfile
パラメータで指定されたファイル(/home/oracle/config
など)と同じです。set controlfile autobackup format for device type sbt to '%F'; run { allocate channel c1 device type sbt PARMS 'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)'; restore spfile from autobackup; }
- audit_file_destのディレクトリを作成します。デフォルトは
/u01/app/oracle/admin/$ORACLE_SID/adump
です。元のデータベースで使用されている設定は、spfileで文字列audit_file_dest
を検索すると確認できます。strings ${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora | grep audit_file_dest *.audit_file_dest='/u01/app/oracle/admin/db1/adump' mkdir -p /u01/app/oracle/admin/db1/adump
- 元のデータベースでブロック変更トラッキングが有効になっている場合は、ブロック変更トラッキング・ファイル用のディレクトリを作成します。これは、
db_create_file_dest
の下のディレクトリになります。spfile
でディレクトリの名前を検索します。strings ${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora | grep db_create_file_dest *.db_create_file_dest='/u02/app/oracle/oradata/db1' mkdir -p /u02/app/oracle/oradata/db1/<$ORA_UNQNAME if available or database name>/changetracking
- リストアされたサーバー・パラメータ・ファイルを使用してインスタンスを再起動します。
STARTUP FORCE NOMOUNT;
- RMAN自動バックアップから制御ファイルをリストアし、データベースをマウントします。
set controlfile autobackup format for device type sbt to '%F'; run { allocate channel c1 device type sbt PARMS 'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)'; restore controlfile from autobackup; alter database mount; }
- データベースをリストアおよびリカバリします。
RESTORE DATABASE; RECOVER DATABASE;
- RMANは、アーカイブREDOログを使用してリカバリし、それ以上見つからなくなるまで続けます。RMANがバックアップ内の最後のアーカイブREDOログを適用し、それ以上ログが見つからなくなると、次のようなエラーが発生するのは正常です。
unable to find archived log archived log thread=1 sequence=29 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 06/28/2016 00:57:35 RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 29 and starting SCN of 2349563
- resetlogsでデータベースをオープンします。
ALTER DATABASE OPEN RESETLOGS;
リカバリが完了しました。データベースには、最後にバックアップされたアーカイブREDOログの時点でコミット済のトランザクションすべてが含められます。