從 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 Commands 設定 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參數。
選擇 ORACLE_HOME
決定要用於資料庫回復的 ORACLE_HOME,然後使用正確的 ORACLE_BASE、ORACLE_HOME 以及 PATH 設定值切換至該本位目錄。ORACLE_HOME 不能與資料庫關聯。
若要取得現有的 ORACLE_HOME 清單並確定 ORACLE_HOME 是空的,請分別使用 Dbhome 命令和資料庫命令。若要建立新的 ORACLE_HOME,請使用 Dbhome 命令。
複製來源資料庫公事包
如果來源資料庫未設定 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將
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 備份模組
備份模組 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>/ -
若要安裝備份模組,請參閱使用 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)';
如需有關這些檔案的詳細資訊,請參閱 Using Oracle Database Backup Cloud Service 中的 Files Created When the Oracle Database Cloud Backup Module for OCI Classic is Installed 。
確定已開啟解密
請確定已開啟所有 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
設定資料庫參數
-
以 Nomount 模式啟動資料庫。
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;
重設日誌
重設日誌。
alter database open resetlogs;
準備註冊資料庫
註冊資料庫之前:
- 確定可接受資料庫 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,它們也應該處於讀寫模式,以確保資料修正會在它們上執行。 -
從已回復資料庫的 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 資料庫上的修正程式。
在資料庫系統上註冊資料庫
資料庫命令會將回復的資料庫註冊到 dcs-agent,讓資料庫可以由 dcs-agent 堆疊管理。
注意:雙節點 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 修正程式編號是「資料庫版本 (DB Version)」資料欄中的第二個編號: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 格式回復資料庫檔案。
- 確定資料庫列在資料庫命令輸出中。
-
檢查資料庫中的下列外部參考,並視需要加以更新:
- 外部表格:如果來源資料庫使用外部表格,請備份該資料並將其移轉至目標主機。
- 目錄:視需要自訂已回復資料庫的預設目錄。
- 資料庫連結:確定所有必要的 TNS 項目都已更新在 ORACLE_HOME 的
tnsnames.ora檔案中。 - 電子郵件和 URL:請確定資料庫系統中使用的電子郵件地址和 URL 仍可從資料庫系統存取。
- 排定的工作:複查來源資料庫中排定的工作,並視需要在回復的資料庫中排定類似的工作。
- 如果您在註冊資料庫時建立備份組態的關聯,請使用備份命令執行測試備份。
- 如果回復的資料庫包含 CDB 與 PDB,請確認修正程式已經套用至所有 PDB。