OCI Classic Object Storeからのデータベースのリカバリ
この記事では、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システムに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 -
- dbstorageコマンドを使用して、DATA、RECOおよびREDOストレージ用のディレクトリを設定します。次の例では、tdetestデータベースに10GBのACFSストレージを作成します。
dbcli create-dbstorage --dbname tdetest --dataSize 10 --dbstorage ACFS
ノート:
バージョン11.2データベースを移行する場合は、ACFSストレージを指定する必要があります。 - dbstorageコマンドを使用して、ストレージIDをリストします。このIDは、次のステップで必要になります。
出力:dbcli list-dbstorages
ID Type DBUnique Name Status ---------------------------------------- ------ -------------------- ---------- 9dcdfb8e-e589-4d5f-861a-e5ba981616ed Acfs tdetest Configured
- dbstorageコマンドを前のステップで取得したストレージIDとともに使用して、DATA、RECOおよびREDOの場所をリストします。
出力:dbcli describe-dbstorage --id 9dcdfb8e-e589-4d5f-861a-e5ba981616ed
DBStorage 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_HOMEのリストを取得するにはdbhomeコマンドを使用し、ORACLE_HOMEが空であることを確認するにはdatabaseコマンドを使用します。新しい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; EOF
cwallet.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 Module for 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の使用のOracle Database Cloud Backup Module for OCI Classicのインストール時に作成されるファイルを参照してください。
復号化が有効になっていることの確認
すべての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
データベース・パラメータの設定
- データベースを非マウント・モードで起動します。
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
コマンドはデータパッチの実行を試みますが、これには読取り/書込みモードが必要です。PDBが存在する場合は、データパッチがPDB上で動作するように、PDBも読取り/書込みモードになっている必要があります。 - リストアされたデータベースのoracleホームから、次のコマンドを実行して、SYSへの接続を確認します:
conn sys/<password>@//<hostname>:1521/<database service name>
この接続は、後でデータベースを登録するために必要です:接続の問題を修正してから続行します。
- SQL*Plusコマンドを使用して、spfileでデータベースが実行されていることを確認します。
SHOW PARAMETERS SPFILE
- (オプション) dbcliコマンドライン・インタフェースを使用してデータベースのバックアップを管理する場合は、新規または既存のバックアップ構成を、登録時または登録後に、移行済のデータベースに関連付けることができます。バックアップ構成によって、データベースのバックアップ保存先とリカバリ・ウィンドウが定義されます。backupconfigコマンドを使用して、バックアップ構成を作成、リストおよび表示します。
- ソース・データベースのフォルダ
$ORACLE_HOME/sqlpatch
をターゲット・データベースにコピーします。これにより、dbcli register-database
コマンドで競合するパッチをロールバックできるようになります。ノート:
バージョン11.2のデータベースを移行している場合は、データベースの登録後に追加のステップが必要になります。詳細は、バージョン11.2のデータベースでのパッチのロールバックを参照してください。
DBシステムでのデータベースの登録
databaseコマンドは、リストアされたデータベースを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/sqlpatchディレクトリと同様に$ORACLE_HOME/rdbms/adminディレクトリに書き込まれるファイルが含まれる場合があります。データベースをOCI環境に移行する前に、パッチのread-meの手順を使用してソース・データベースでこれらのパッチをロールバックすることをお薦めします。これらのパッチのロールバックについてヘルプが必要な場合は、Oracle Supportに連絡してください。- DBシステムで、
dbcli list-dbhomes
コマンドを使用して、バージョン11.2のデータベース・ホームのPSUパッチ番号を見つけます。次のサンプル・コマンド出力では、PSUパッチ番号は「DB Version」列の2つ目の番号です:
出力:dbcli list-dbhomes
ID 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
ノート:
ソース・データベースに1回限りのパッチがインストールされており、それらのパッチがクラウド環境にインストールされているPSUの一部ではない場合、これらの1回限りのパッチに対応するSQL変更をロールバックする必要があります。SQL変更をロールバックするには、ソース環境の$ORACLE_HOME/sqlpatch/<patch#>/postdeinstall.SQL
スクリプトをクラウド環境にコピーし、postdeinstall.SQL
スクリプトを実行します。
リストア後のチェックリスト
データベースがリストアされ、DBシステムに登録されたら、次のチェックリストを使用して結果を確認し、リストア後のカスタマイズを実行します。
- データベース・ファイルがOMF形式でリストアされたことを確認します。
- databaseコマンドの出力にそのデータベースがリストされていることを確認します。
- データベース内にある次の外部参照を確認し、必要に応じて更新します:
- 外部表: ソース・データベースで外部表が使用されている場合は、そのデータをバックアップしてターゲット・ホストに移行します。
- ディレクトリ: リストアされたデータベースの必要に応じてデフォルト・ディレクトリをカスタマイズします。
- データベース・リンク: ORACLE_HOMEの
tnsnames.ora
ファイルですべての必要なTNSエントリが更新されていることを確認します。 - 電子メールおよびURL: データベースで使用される電子メール・アドレスおよびURLに、DBシステムからまだアクセスできることを確認します。
- スケジュール済ジョブ: ソース・データベースでスケジュールされているジョブを確認し、リストアされたデータベースで同様のジョブを必要に応じてスケジュールします。
- データベースを登録したときにバックアップ構成を関連付けた場合は、backupコマンドを使用してテスト・バックアップを実行します。
- リストアされたデータベースにCDBおよびPDBが含まれている場合は、パッチがすべてのPDBに適用されていることを確認します。