使用 RMAN 備份從物件儲存復原資料庫
本文說明如何復原儲存在物件儲存中的復原管理程式 (RMAN) 備份。
必備條件
需要下列項目:
- 用以回復資料庫的新資料庫系統 (請參閱下面的假設)。如需詳細資訊,請參閱建立資料庫系統簡介。
- Oracle Database Cloud Backup 模組必須安裝在資料庫系統上。如需詳細資訊,請參閱使用 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 命令設定 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 語法執行 Object Storage 的一般查詢。紅色的參數與您安裝備份模組時所指定的參數相同,如使用 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 NOMOUNT
startup 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
- 從自動備份回復伺服器參數檔。
安裝備份模組時,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;
復原完成。資料庫會自上次備份的存檔重做日誌以來,有所有已確認的交易。