OCI Classicオブジェクト・ストアからのデータベースのリカバリ
この記事では、Oracle Database Backup Moduleによって作成され、Oracle Cloud Infrastructure Object Storage Classicに格納されたバックアップを使用してデータベースをリカバリする方法について説明します。
このトピック全体では、次の用語が使用されます:
- ソース・データベース: Object Storage Classicのデータベース・バックアップ。
- ターゲット・データベース: Oracle Cloud InfrastructureのDBシステム上の新しいデータベース。
前提条件
次のことが必要になります:
- Oracle Cloud Infrastructure Object Storage Classicのサービス名、アイデンティティ名、コンテナ、ユーザー名およびパスワード。
- Object Storage Classicへのバックアップ時にパスワード・ベースの暗号化が使用された場合のバックアップ・パスワード。
- ソース・データベースID、データベース名、データベースの一意の名前(ストレージの設定に必要)。
- ソース・データベースがTransparent Data Encryption (TDE)で構成されている場合は、ウォレットおよびウォレット・パスワードのバックアップが必要です。
- 任意のデータベース・リンクに設定するTnsnames。
- 参照用のソース・データベースOracle_homeの
Opatch lsinventoryの出力。 - ソース・データベース・ホームからのsqlpatchディレクトリのコピー。 ターゲット・データベースにこれらのパッチが含まれていない場合は、ロールバックに必要です。
関連トピック
DBシステムでのストレージの設定
- DB SystemにSSHを実行します。
ssh -i <private_key_path> opc@<db_system_ip_address> - opcとしてログインし、rootユーザーにsudoを実行します。
sudo su -をハイフンとともに使用して、PATHをdbcliディレクトリ(/opt/oracle/dcs/bin)に設定するrootユーザー・プロファイルを起動します。login as: opc sudo su - - 「Dbstorageコマンド」を使用して、DATA、RECOおよびREDOストレージのディレクトリを設定します。 次の例では、tdetestデータベース用に10GBのACFSストレージを作成します。
dbcli create-dbstorage --dbname tdetest --dataSize 10 --dbstorage ACFSノート:
バージョン11.2データベースを移行する場合は、ACFSストレージを指定する必要があります。 - 「Dbstorageコマンド」を使用して、ストレージIDをリストします。 次のステップのIDが必要です。
出力:dbcli list-dbstoragesID Type DBUnique Name Status ---------------------------------------- ------ -------------------- ---------- 9dcdfb8e-e589-4d5f-861a-e5ba981616ed Acfs tdetest Configured - 前のステップのストレージIDとともに「Dbstorageコマンド」を使用して、DATA、RECOおよびREDOのロケーションをリストします。
出力:dbcli describe-dbstorage --id 9dcdfb8e-e589-4d5f-861a-e5ba981616edDBStorage details ---------------------------------------------------------------- ID: 9dcdfb8e-e589-4d5f-861a-e5ba981616ed DB Name: tdetest DBUnique Name: tdetest DB Resource ID: Storage Type: Acfs DATA Location: /u02/app/oracle/oradata/tdetest RECO Location: /u03/app/oracle/fast_recovery_area/ REDO Location: /u03/app/oracle/redo/ State: ResourceState(status=Configured) Created: August 24, 2016 5:25:38 PM UTC UpdatedTime: August 24, 2016 5:25:53 PM UTC - DATA、RECOおよびREDOのロケーションを書き留めます。 データベースに
db_create_file_dest、db_create_online_log_destおよびdb_recovery_file_destパラメータを設定するには、後で必要になります。
ORACLE_HOMEを選択
データベースのリストアに使用するORACLE_HOMEを決定し、正しいORACLE_BASE、ORACLE_HOMEおよびPATH設定を使用してそのホームに切り替えます。 ORACLE_HOMEは、まだデータベースに関連付けられていない必要があります。
既存のORACLE_HOMEsのリストを取得し、ORACLE_HOMEが空であることを確認するには、それぞれ「Dbhomeコマンド」および「データベース・コマンド」を使用します。 新しいORACLE_HOMEを作成するには、「Dbhomeコマンド」を使用します。
ソース・データベース・ウォレットのコピー
ソース・データベースがTDEで構成されていない場合、このセクションをスキップします。
- DBシステムで、oracleユーザーになります:
sudo su - oracle - 次のディレクトリがまだ存在しない場合は作成します:
mkdir /opt/oracle/dcs/commonstore/wallets/tde/<db_unique_name> - ソース・データベースから前のステップで作成したディレクトリにewallet.p12ファイルをコピーします。
- ターゲット・ホストで、
$ORACLE_HOME/network/admin/sqlnet.oraに次の行が含まれていることを確認します:ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME)))ファイルに存在しない場合は、行を追加します。 (これが新しいホームであり、このホストにまだデータベースが作成されていない場合、行は存在しない可能性があります。)
- リストアおよびリカバリ操作中にウォレットを自動オープンできるように、パスワード・ベースのウォレットから自動ログイン・ウォレットを作成します。
バージョン12.1以上のデータベースの場合は、
ADMINISTER KEY MANAGEMENTコマンドを使用します:$cat create_autologin_12.sh #!/bin/sh if [ $# -lt 2 ]; then echo "Usage: $0 <dbuniquename><remotewalletlocation>" exit 1; fi mkdir /opt/oracle/dcs/commonstore/wallets/tde/$1 cp $2/ewallet.p12* /opt/oracle/dcs/commonstore/wallets/tde/$1 rm -f autokey.ora echo "db_name=$1" > autokey.ora autokeystoreLog="autologinKeystore_`date +%Y%m%d_%H%M%S_%N`.log" echo "Enter Keystore Password:" read -s keystorePassword echo "Creating AutoLoginKeystore -> " sqlplus "/as sysdba" <<EOF spool $autokeystoreLog set echo on startup nomount pfile=autokey.ora ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/opt/oracle/dcs/commonstore/wallets/tde/$1' -- Keystore location IDENTIFIED BY "$keystorePassword"; shutdown immediate; EOFcwallet.sso権限をoracle:asmadminからoracle:oinstallに調整します。
出力:ls -ltr /opt/oracle/dcs/commonstore/wallets/tde/<db_unique_name>total 20 -rw-r--r-- 1 oracle oinstall 5680 Jul 6 11:39 ewallet.p12 -rw-r--r-- 1 oracle asmadmin 5725 Jul 6 11:39 cwallet.ssoバージョン11.2データベースの場合は、
orapkiコマンドを使用します:orapki wallet create -wallet wallet_location -auto_login [-pwd password]
Oracle Database Backup Moduleのインストール
バックアップ・モジュールのJARファイルはDBシステムに含まれていますが、インストールする必要があります。
- DBシステムにSSH接続し、opcとしてログインし、oracleユーザーになります。
ssh -i <path to SSH key used when launching the DB System> opc@<DB System IP address or hostname> sudo su - oracle - バックアップ・モジュールの
opc_install.jarファイルを含むディレクトリに移動します。cd /opt/oracle/oak/pkgrepos/orapkgs/oss/<version>/ - バックアップ・モジュールをインストールするには、「Oracle Database Backup Cloud Serviceの使用」の「Oracle Database Cloud BackupモジュールをOCI Classic用にインストールする方法」で説明されているコマンド構文を参照してください。
環境変数の設定
RMANおよびデータベースのSQL*Plusセッションに対して、次の環境変数を設定します:
ORACLE_HOME=<path of Oracle Home where the database is to be restored>
ORACLE_SID=<database instance name>
ORACLE_UNQNAME=<db_unique_name in lower case>
NLS_DATE_FORMAT="mm/dd/yyyy hh24:mi:ss"RMAN SBTチャネルの割当て
リストア操作ごとに、SBTチャネルを割り当て、SBT_LIBRARYパラメータをlibopc.soファイルのロケーションに設定し、OPC_FILEパラメータをopc_sbt.oraファイルのロケーションに設定します。次に例を示します:
ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/<ORACLE_HOME>/dbs/opc_sbt.ora)';これらのファイルの詳細は、「Oracle Database Backup Cloud Serviceの使用」の「OCIクラシックのOracle Database Cloud Backupモジュールのインストール時に作成されたファイル」を参照してください。
復号化がオンになっていることを確認
すべてのRMANリストア・セッションで復号化が有効になっていることを確認します。
set decryption wallet open identified by <keystore password>;詳細は、「暗号化されたバックアップの復号化に必要なパスワードの指定」を参照してください。
Spfileのリストア
次のサンプル・シェル・スクリプトは、spfileをリストアします。 $dbID変数を、リストアするデータベースのdbidに設定します。 デフォルトでは、spfileは$ORACLE_HOME/dbs/spfile<sid>.oraにリストアされます。
rman target / <<EOF
spool log to "`date +%Y%m%d_%H%M%S_%N`_dbid_${dbID}_restore_spfile.log"
startup nomount
set echo on
run {
ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
SET DBID=$dbID;
RESTORE SPFILE FROM AUTOBACKUP;
shutdown immediate;
EOFデータベース・パラメータの設定
- データベースをnomountモードで起動します。
startup nomount - spfileを更新し、次のパラメータを変更します。
-
データベース・ストレージ・タイプがACFSの場合、DBシステムでのストレージの設定の説明に従って、
dbcli describe-dbstorageコマンド出力から取得したDATA、RECOおよびREDOのロケーションを使用します:alter system set db_create_file_dest='/u02/app/oracle/oradata/' scope = spfile; alter system set db_create_online_log_dest_1='/u03/app/oracle/redo' scope = spfile; alter system set db_recovery_file_dest='/u03/app/oracle/fast_recovery_area' scope = spfile; -
データベース・ストレージ・タイプがASMの場合:
alter system set db_create_file_dest='+DATA' scope = spfile; alter system set db_create_online_log_dest_1='+RECO' scope = spfile; alter system set db_recovery_file_dest='+RECO' scope = spfile; -
db_recovery_file_dest_sizeが設定されていないか、正しく設定されていません:alter system set db_recovery_file_dest_size=<sizeG> scope=spfile; -
audit_file_destを正しい値に設定します:alter system set audit_file_dest=/u01/app/oracle/admin/<db_unique_name in lower case>/adump
-
control_filesパラメータを削除します。 Oracle Managed Files (OMF)パラメータを使用して制御ファイルを作成します。alter system reset control_files scope=spfile;- 新しく追加したパラメータを使用して、データベースをマウント・モードで再起動します。
shutdown immediate startup nomount
制御ファイルのリストア
使用している環境の次のサンプル・シェル・スクリプトを変更して、制御ファイルをリストアします。 $dbID変数を、リストアするデータベースのdbidに設定します。 バックアップ・モジュールのインストール時に、SBT_LIBRARYを-libDir パラメータで指定されたロケーションに設定します。 OPC-PFILEを-configFileパラメータで指定されたロケーションに設定します(デフォルトはORACLE_HOME/dbs/opcSID.oraです)。
rman target / <<EOF
spool log to "`date +%Y%m%d_%H%M%S_%N`_dbid_${dbID}_restore_controlfile.log"
set echo on
run {
ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/<Backup Module libDir>/libopc.so ENV=(OPC_PFILE=/<Backup Module configFile>/opcSID.ora)';
SET DBID=$dbID;
RESTORE CONTROLFILE FROM AUTOBACKUP;
alter database mount;
}
exit;
EOFデータベースのリストア
- バックアップをプレビューおよび検証します。 データベースがマウントされ、RMANはリストアされた制御ファイルからバックアップを特定できるはずです。 このステップは、アーカイブ・ログのリストが存在し、バックアップ・コンポーネントをリストアできることを確認するのに役立ちます。
次の例では、環境に応じてSBT_LIBRARYおよびOPC_PFILEを変更します。
rman target / <<EOF spool log to "`date +%Y%m%d_%H%M%S_%N`_restore_database_preview.log" set echo on run { ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)'; ALLOCATE CHANNEL c2 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)'; ALLOCATE CHANNEL c3 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)'; restore database validate header preview; }出力を確認し、エラー・メッセージがある場合は、問題の原因を調査します。
set newnameを使用してリストアをリダイレクトし、OMF形式でデータファイルをリストアし、switch datafile allを使用して制御ファイルを新しいデータファイルのコピーで更新できるようにします。rman target / <<EOF spool log to "`date +%Y%m%d_%H%M%S_%N`_restore_database_preview.log" set echo on run { ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)'; ALLOCATE CHANNEL c2 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)'; ALLOCATE CHANNEL c3 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)'; set newname for database to new; restore database; switch datafile all; switch tempfile all; recover database; }このリカバリでは、使用可能な最後のアーカイブ・ログ・バックアップの使用が試行され、次のようなエラーで失敗します:
RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 07/20/2016 12:09:02 RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 22 and starting SCN of 878327- 不完全なリカバリを完了するには、RMAN-06054メッセージに示されている順序番号とスレッド番号を使用してリカバリを実行します。次に例を示します:
recover database until sequence 22 thread 1;
データベースの登録の準備
データベースを登録する前に:
- データベースのCOMPATIBLEパラメータ値が許容できることを確認します。 値が最小値より小さい場合、データベースの互換性をアップグレードするまでデータベースを登録できません。
- データベースがリスナーおよびサービス名に登録されていることを確認します。
lsnrctl services - 新しいデータベースに対してパスワード・ファイルがリストアまたは作成されたことを確認します。
ls -ltr $ORACLE_HOME/dbs/orapw<oracle sid>ファイルが存在しない場合は、orapwdユーティリティを使用して作成します。
orapwd file=<$ORACLE_HOME/dbs/orapw<$ORACLE_SID>> password=<sys password> - 読取り書込みモードでオープンしている場合は、リストアされたデータベースを確認します。
select open_mode from v$database;コマンド出力は、読み取り書き込みモードを示します。
dbcli register-databaseコマンドはdatapatchの実行を試行します。これには読取り/書込みモードが必要です。 PDBがある場合は、datapatchが確実に実行されるように、読取り/書込みモードである必要があります。 - リストアされたデータベースのoracleホームから、次のコマンドを使用し、SYSへの接続を確認します:
conn sys/<password>@//<hostname>:1521/<database service name>この接続は、後でデータベースを登録するために必要です。 接続の問題を修正してから続行してください。
- SQL*Plusコマンドを使用して、データベースがspfileで実行されていることを確認します。
SHOW PARAMETERS SPFILE - (オプション) dbcliコマンドライン・インタフェースを使用してデータベース・バックアップを管理する場合は、新規または既存のバックアップ構成を、登録時または登録後に移行されたデータベースに関連付けることができます。 バックアップ構成では、データベースのバックアップの保存先とリカバリ・ウィンドウを定義します。 「Backupconfigコマンド」を使用して、バックアップ構成を作成、リストおよび表示します。
- ソース・データベースからターゲット・データベースにフォルダ
$ORACLE_HOME/sqlpatchをコピーします。 これにより、dbcli register-databaseコマンドが競合するパッチをロールバックできるようになります。
DBシステムでのデータベースの登録
「データベース・コマンド」は、リストアされたデータベースをdcs-agentスタックで管理できるように、dcs-agentに登録します。
ノート:
dbcli register-databaseコマンドは、2ノードのRAC DBシステムでは使用できません。
rootユーザーとして、dbcli register-databaseコマンドを使用してDBシステムにデータベースを登録します。次に例を示します:
dbcli register-database --dbclass OLTP --dbshape odb1 --servicename tdetest --syspassword出力:
Password for SYS:
{
"jobId" : "317b430f-ad5f-42ae-bb07-13f053d266e2",
"status" : "Created",
"message" : null,
"reports" : [ ],
"createTimestamp" : "August 08, 2016 05:55:49 AM EDT",
"description" : "Database service registration with db service name: tdetest",
"updatedTime" : "August 08, 2016 05:55:49 AM EDT"
}tnsnames.oraの更新
バックアップのロケーションでtnsnames.oraを確認し、クローン・データベースで使用されるデータベース・リンクを確認し、関連する接続文字列を$ORACLE_HOME/network/admin/tnsnames.oraのクローン・データベース・ファイルに追加します。
バージョン11.2データベースでのパッチのロールバック
バージョン11.2データベースの場合、sqlpatchアプリケーションは自動化されていないため、インストールされているPSUの一部ではないソース・データベースに適用された個別パッチ(以前は個別パッチと呼ばれていました)は、ターゲット・データベースで手動でロールバックする必要があります。 データベースを登録したら、次に示すように、catbundle.sqlスクリプトを実行してから、対応するPSUパッチ(またはPSUパッチ上のオーバーレイ・パッチ)でpostinstall.sqlスクリプトを実行します。
ヒント:
一部の個別パッチには、$ORACLE_HOME/rdbms/adminディレクトリに書き込まれたファイルと$ORACLE_HOME/sqlpatchディレクトリが含まれる場合があります。 Oracleでは、データベースをOCI環境に移行する前に、パッチのread-meの手順を使用して、ソース・データベースでこれらのパッチをロールバックすることをお薦めします。 これらのパッチのロールバックに関するサポートが必要な場合は、Oracle Supportに連絡してください。- DBシステムで、
dbcli list-dbhomesコマンドを使用して、バージョン11.2データベース・ホームのPSUパッチ番号を検索します。 次のサンプル・コマンド出力では、PSUパッチ番号がDB Version列の2番目の番号です:
出力:dbcli list-dbhomesID Name DB Version Home Location Status ------------------------------------ ----------------- ------------------------------------- ----------------------------------------- ---------- 59d9bc6f-3880-4d4f-b5a6-c140f16f8c64 OraDB11204_home1 11.2.0.4.160719 (23054319, 23054359) /u01/app/oracle/product/11.2.0.4/dbhome_1 Configured(前述の例の最初のパッチ番号23054319は、データベース・ホームのOCWコンポーネント用です。)
lsinventoryコマンドを使用して、オーバーレイ・パッチ(存在する場合)を検索します。 次の例では、パッチ番号24460960が23054359 PSUパッチの上部にあるオーバーレイ・パッチです。
出力:$ORACLE_HOME/OPatch/opatch lsinventory... Installed Top-level Products (1): Oracle Database 11g 11.2.0.4.0 There are 1 products installed in this Oracle Home. Interim patches (5) : Patch 24460960 : applied on Fri Sep 02 15:28:17 UTC 2016 Unique Patch ID: 20539912 Created on 31 Aug 2016, 02:46:31 hrs PST8PDT Bugs fixed: 23513711, 23065323, 21281607, 24006821, 23315889, 22551446, 21174504 This patch overlays patches: 23054359 This patch needs patches: 23054359 as prerequisites- SQL*Plusを起動し、
catbundle.sqlスクリプトを実行します。次に例を示します:startup connect / as sysdba @$ORACLE_HOME/rdbms/admin/catbundle.sql psu apply exit - 前のステップのオーバーレイ・パッチ番号を使用して、sqlpatchを適用します。次に例を示します:
connect / as sysdba @$ORACLE_HOME/sqlpatch/24460960/postinstall.sql exit
ノート:
ソース・データベースに個別パッチがインストールされており、それらのパッチがクラウド環境にインストールされているPSUの一部でない場合は、それらの個別パッチに対応するSQL変更をロールバックする必要があります。 SQL変更をロールバックするには、$ORACLE_HOME/sqlpatch/<patch#>/postdeinstall.sqlスクリプトをソース環境からクラウド環境にコピーし、postdeinstall.sqlスクリプトを実行します。
リストア後チェックリスト
データベースがリストアされてDBシステムに登録された後、次のチェックリストを使用して結果を確認し、リストア後のカスタマイズを実行します。
- データベース・ファイルがOMF形式でリストアされたことを確認します。
- データベースが「データベース・コマンド」出力にリストされていることを確認します。
- データベース内の次の外部参照を確認し、必要に応じて更新します:
- 外部表: ソース・データベースで外部表が使用されている場合は、そのデータをバックアップし、ターゲット・ホストに移行します。
- ディレクトリ: リストアされたデータベースに必要なデフォルト・ディレクトリをカスタマイズします。
- データベース・リンク: 必要なTNSエントリがORACLE_HOMEの
tnsnames.oraファイルですべて更新されていることを確認します。 - メールとURL: データベースで使用されている電子メール・アドレスおよびURLに、DBシステムから引き続きアクセスできることを確認します。
- スケジュール済ジョブ: ソース・データベースでスケジュールされているジョブを確認し、リストアされたデータベースで必要に応じて同様のジョブをスケジュールします。
- データベースを登録するときにバックアップ構成を関連付けた場合は、「バックアップ・コマンド」を使用してテスト・バックアップを実行します。
- リストアされたデータベースにCDBおよびPDBが含まれている場合は、パッチがすべてのPDBに適用されていることを確認します。