使用 RMAN 備份從物件儲存復原資料庫
本文說明如何復原儲存在物件儲存中的復原管理程式 (RMAN) 備份。
先決條件
您需要下列項目:
- 將資料庫回復至的新資料庫系統 (請參閱下方的假設)。如需詳細資訊,請參閱建立資料庫系統簡介。
- 必須在資料庫系統上安裝 Oracle Database Cloud Backup Module。如需詳細資訊,請參閱使用 RMAN 將資料庫備份至物件儲存中的在資料庫系統上安裝備份模組。
假設
以下程序假設下列事項:
- 已建立新的資料庫系統來代管回復的資料庫,而且新資料庫系統上沒有其他資料庫存在。您可以回復至含有現有資料庫但超出本主題範圍的資料庫系統。
-
原始資料庫會遺失,且仍是最新的 RMAN 備份。此程序假設資料庫系統 (包括資料庫) 已不存在。
注意:未包含在最近備份中的任何資料都將會遺失。
- 可使用上次備份時原始資料庫所使用的 Oracle Wallet 和 (或) 加密金鑰。
- RMAN 備份會包含截至最近備份為止的控制檔與 spfile 複本,以及執行完整資料庫復原所需的所有資料檔與存檔日誌備份。
- 進行回復時不會使用 RMAN 目錄。
在資料庫系統上設定儲存
-
將 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 -
使用資料庫命令可確保資料庫本位目錄未與任何資料庫關聯。
如有需要,請使用 Dbhome 命令來建立回復的資料庫本位目錄。
-
-
使用 Dbstorage Commands 設定 DATA、RECO 以及 REDO 儲存的目錄。下列範例會為糾正資料庫建立 10GB 的 ACFS 儲存體。
dbcli create-dbstorage --dbname rectest --dataSize 10 --dbstorage ACFS
注意:回復 11.2 版資料庫時,必須指定 ACFS 儲存體。
執行資料庫回復和復原
-
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 備份資料庫至物件儲存中在資料庫系統上安裝備份模組所述。
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 NOMOUNTstartup 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 -
從 autobackup 回復伺服器參數檔。
安裝「備份模組」時,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。您可以透過搜尋字串的 spfileaudit_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 將使用存檔重做日誌來復原,直到找不到其他日誌為止。當 RMAN 在備份中套用最後一個存檔重做日誌,而且找不到其他日誌時,就會發生類似下方的錯誤。
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;
復原已完成。資料庫將會有截至上次備份之存檔重做日誌為止的所有確認交易。