從 OCI Classic 物件存放區復原資料庫
本文說明如何使用 Oracle Database Backup Module 建立並儲存在 Oracle Cloud Infrastructure Object Storage Classic 中的備份來復原資料庫。
本主題使用下列詞彙:
- 來源資料庫:Object Storage Classic 中的資料庫備份。
- 目標資料庫:Oracle Cloud Infrastructure 中資料庫系統上的新資料庫。
必備條件
需要下列項目:
- Oracle Cloud Infrastructure Object Storage Classic 的服務名稱、識別名稱、容器、使用者名稱以及密碼。
- 備份至 Object Storage Classic 時使用密碼式加密時的備份密碼。
- 來源資料庫 ID、資料庫名稱、資料庫唯一名稱 (設定儲存體所需)。
- 如果來源資料庫使用通透資料加密 (TDE) 設定,您需要備份公事包和公事包密碼。
- 設定任何資料庫連結的 Tnsnames。
- 來源資料庫 Oracle_home 的
Opatch lsinventory
輸出,以供參考。 - 來源資料庫本位目錄的 sqlpatch 目錄複本。目標資料庫若未包含這些修正程式,則必須進行倒回。
相關主題
設定資料庫系統上的儲存體
- 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 Commands 列出儲存體 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
參數。
複製來源資料庫公事包
如果來源資料庫未設定 TDE,請略過此段落。
- 在資料庫系統上,成為 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
將
oracle:asmadmin
的cwallet.sso
權限調整為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 檔案,但您需要安裝。
- 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>/
- 若要安裝備份模組,請參閱 Using Oracle Database Backup Cloud Service 中 Installing the 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 中的 Files Created When the Oracle Database Cloud Backup Module for OCI Classic 。
確定已開啟解密
確定已為所有 RMAN 回復階段作業開啟解密。
set decryption wallet open identified by <keystore password>;
如需詳細資訊,請參閱 Providing the Password Required to Decrypted Backups 。
回復 Spfile
下列範例 Shell 程序檔會復原 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,請使用從
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
回復控制檔
為您的環境修改下列範例 Shell 命令檔以回復控制檔。將 $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 也應處於讀寫模式,以確保在該模式上執行資料修正。 - 從已回復資料庫的 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 版資料庫,則在註冊資料庫之後需要執行其他步驟。如需詳細資訊,請參閱 Roll Back Patches on a Version 11.2 Database 。
在資料庫系統上註冊資料庫
資料庫命令會將回復的資料庫註冊到 dcs-agent,以便由 dcs-agent 堆疊管理。
附註:
2 節點 RAC 資料庫系統上無法使用dbcli register-database
命令。
root 使用者可以使用 dbcli register-database
命令在資料庫系統上註冊資料庫,例如:
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 環境之前,先使用修正程式讀我檔案中的指示,在來源資料庫中倒回這些修正程式。如果您需要回復這些修正程式的協助,請洽詢 Oracle Support。- 在資料庫系統上,使用
dbcli list-dbhomes
命令尋找版本 11.2 資料庫本位目錄的 PSU 修正程式編號。在下列命令輸出範例中,PSU 修正程式編號是「資料庫版本」資料欄中的第二個編號:
輸出: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
附註:
如果來源資料庫已安裝單次修正程式,且這些修正程式不是雲端環境中已安裝 PSU 的一部分,則必須倒回與這些單次修正程式對應的 SQL 變更。若要倒回 SQL 變更,請將$ORACLE_HOME/sqlpatch/<patch#>/postdeinstall.sql
命令檔從來源環境複製到雲端環境,然後執行 postdeinstall.sql
命令檔。
後續回復檢查清單
在資料庫系統上還原並註冊資料庫之後,請使用下列檢查清單來驗證結果,並執行任何還原後自訂。
- 請確定資料庫檔案是以 OMF 格式回復。
- 確定資料庫列在資料庫命令輸出中。
- 檢查資料庫中的下列外部參照,並視需要加以更新:
- 外部表格:如果來源資料庫使用外部表格,請備份該資料並將其移轉至目標主機。
- 目錄:視需要自訂回復之資料庫的預設目錄。
- 資料庫連結:確定已在 ORACLE_HOME 的
tnsnames.ora
檔案中更新所有必要的 TNS 項目。 - 電子郵件和 URL:確定資料庫中使用的任何電子郵件地址和 URL 仍可從資料庫系統存取。
- 排定的工作:複查來源資料庫中排定的工作,並視需要在回復的資料庫中排定類似的工作。
- 如果您在註冊資料庫時建立備份組態的關聯,請使用備份命令執行測試備份。
- 回復的資料庫如果包含 CDB 與 PDB,請確認已將修正程式套用至所有 PDB。