部署拓樸
RMAN「來源服務」子句可讓您將主要資料庫檔案回復並復原至整個網路的待命資料庫。您可以使用這項功能代替 RMAN DUPLICATE DATABASE
命令建立待命資料庫,而且較為直觀且較不易出錯,因此可節省時間。
附註:
按一下複製,將命令範例儲存至剪貼簿,以貼到命令行中。請務必將任何variables
取代為您實行的特定值。
使用 RMAN 建立待命資料庫
使用「Oracle 復原管理程式 (RMAN)」從作用中主要資料庫建立待命資料庫。或者,您可以從主要資料庫的備份回復。
- 連線至資料庫,然後以
NOMOUNT
模式啟動資料庫。$ rman target /
startup nomount;
- 從主要服務回復待命控制檔。在此範例中,DBUKS_898_LHR 是主要資料庫:
執行結果應該和下列類似:restore standby controlfile from service 'DBUKS_898_LHR';
Starting restore at 04-JUL-23 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=28 device type=DISK channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:04 output file name=+RECO/DBUKS_R2J_AMS/CONTROLFILE/current.256.1139953721 Finished restore at 04-JUL-23
- Mount the database:
執行結果應該和下列類似:alter database mount;
released channel: ORA_DISK_1 Statement processed
- 在 OCI 執行處理上,將 Oracle 目錄的權限變更為開啟 (
chmod 777
)。cd /opt/
ls -ltra
您應該會看見:drwxr-xr-x 10 root root 4096 Jun 20 03:52 oracle
輸入:[root@ldbuksdr]# chmod 777 oracle/
ls -ltra
您應該會看見:drwxrwxrwx 10 root root 4096 Jun 20 03:52 oracle
- 從主要資料庫 (DBUKS_898_LHR) 回復資料庫:
執行結果應該和下列類似:restore database from service ' DBUKS_898_LHR ';
Starting restore at 04-JUL-23 using target database control file instead of recovery catalog allocated channel: ORA_SBT_TAPE_1 channel ORA_SBT_TAPE_1: SID=162 device type=SBT_TAPE channel ORA_SBT_TAPE_1: Oracle Database Backup Service Library VER=19.0.0.1 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=28 device type=DISK channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00001 to +DATA/DBUKS_898_LHR/DATAFILE/system.261.1139943103 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00003 to +DATA/DBUKS_898_LHR/DATAFILE/sysaux.268.1139943085 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:38 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00004 to +DATA/DBUKS_898_LHR/DATAFILE/undotbs1.260.1139943133 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:04 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00005 to +DATA/DBUKS_898_LHR/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/system.264.1139942759 channel ORA_DISK_1: restore complete, elapsed time: 00:00:49 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00006 to +DATA/DBUKS_898_LHR/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/sysaux.265.1139942759 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:25 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00007 to +DATA/DBUKS_898_LHR/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/undotbs1.266.1139942759 channel ORA_DISK_1: restore complete, elapsed time: 00:00:18 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00008 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/system.273.1139943583 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:04 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00009 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/sysaux.271.1139943599 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:16 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00010 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/undotbs1.270.1139943611 channel ORA_DISK_1: restore complete, elapsed time: 00:00:20 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00011 to +DATA/DBUKS_898_LHR/DATAFILE/users.269.1139943873 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:02 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00012 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/users.274.1139943875 channel ORA_DISK_1: restore complete, elapsed time: 00:00:02 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:02 Finished restore at 04-JUL-23
exit ;
驗證待命資料庫
接下來,您需要驗證待命資料庫。
- 檢視資料庫名稱與角色從
SQL>
提示中,輸入:select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
您應該會看見和下列類似的回應:
FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE DATAGUARD_BROKER PROTECTION_MODE -------------------- ------------------ --------------- ------------------- ------------------------ ---------------------------- YES NO MOUNTED PHYSICAL STANDBY DISABLED MAXIMUM PERFORMANCE
- 檢視資料庫的存檔處理作業、狀態繫線編號和序號:
select sysdate,process,status,thread#,sequence#,block# from v$managed_standby where status!='IDLE';
您應該會看見和下列類似的回應:
04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0
接著輸入:
select distinct process from gv$managed_standby;
您應該會看見和下列類似的回應:
PROCESS --------- ARCH DGRD
新增待命日誌檔至主要資料庫和待命資料庫
待命資料庫會使用待命日誌檔來接收主要資料庫的重做資料。將寫入主要資料庫線上重做日誌的記錄會傳輸至待命資料庫,並同時寫入待命重做日誌,進而將待命資料庫資料遺失的機率降到最低。即時套用必須要有待命重做日誌。
請使用
SQL>
指令提示輸入下列步驟。
- 首先,將待命日誌檔新增至主要資料庫。
- 請輸入:
select group#, type, member from v$logfile;
您會看到類似以下的回應:
GROUP# TYPE MEMBER ---------- ------- --------------------------------------------------------- 3 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_3.259.1139942665 2 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_2.258.1139942665 1 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_1.257.1139942665
- 請輸入:
select bytes, group# from v$log;
您會看到類似以下的回應:1073741824 1 1073741824 3 1073741824 2
- 輸入此系列的命令:
SQL> alter database add standby logfile thread 1 group 5 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 6 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 7 ('+RECO') size 1073741824;
每個回應應為:Database altered
- 請輸入:
select group#, type, member from v$logfile;
您會看到類似以下的回應:GROUP# TYPE MEMBER ---------- ------- ------------------------------------------------------- 3 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_3.259.1139942665 2 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_2.258.1139942665 1 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_1.257.1139942665 4 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_4.432.1141789993 5 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_5.431.1141790001 6 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_6.430.1141790011 7 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_7.430.1141790017
- 存檔日誌清單:
archive log list
- 請輸入:
- 現在,將待命日誌檔新增至待命資料庫。
- 請輸入:
select group#, type, member from v$logfile;
您會看到類似以下的回應:GROUP# TYPE MEMBER ---------- ------- ------------------------------------------------------ 3 ONLINE +RECO/DBUKS_R2J_AMS/ONLINELOG/group_3.489.1141280529 2 ONLINE +RECO/DBUKS_R2J_AMS/ONLINELOG/group_2.488.1141280519 1 ONLINE +RECO/DBUKS_R2J_AMS/ONLINELOG/group_1.487.1141280511
- 請輸入:
select bytes, group# from v$log;
您會看到類似以下的回應:1073741824 1 1073741824 3 1073741824 2
- 輸入此系列的命令:
alter database add standby logfile thread 1 group 4 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 5 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 6 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 7 ('+RECO') size 1073741824;
每個命令的回應應該是:Database altered
- 請輸入:
select group#, type, member from v$logfile;
您會看到類似以下的回應:GROUP# TYPE MEMBER ---------- ------- ------------------------------------------------------ 3 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_3.489.1141280529 2 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_2.488.1141280519 1 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_1.487.1141280511 4 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_4.294.1141283919 5 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_5.295.1141283929 6 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_6.296.1141283937 7 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_7.296.1141283938
- 請輸入:
- 刪除具有主要資料庫唯一名稱的日誌檔。在這三個日誌檔當中,其中一個檔案是目前的日誌,因此您目前無法刪除它;這個檔案將會被刪除,稍後再重新建立。
- 請輸入:
alter database drop logfile group 1;
您會看到類似以下的回應:alter database drop logfile group 1 * ERROR at line 1: ORA-01623: log 1 is current log for instance dbuks (thread 1) - cannot drop ORA-00312: online log 1 thread 1: '+RECO/DBUKS_898_LHR/ONLINELOG/group_1.257.1139942665'
- 請輸入:
alter database drop logfile group 2;
alter database drop logfile group 3;
每個回應應為:Database altered
- 請輸入:
- 輸入下列命令以重新建立日誌檔:
alter database add logfile thread 1 group 2 ('+RECO') size 1073741824;
alter database add logfile thread 1 group 3 ('+RECO') size 1073741824;
每個回應應為:Database altered.
設定 Oracle Data Guard Broker
現在,設定 Oracle Data Guard Broker、註冊待命資料庫,以及同步主要和待命資料庫。啟用主要和待命資料庫上的 dg_broker_config_file 參數以設定 Oracle Data Guard Broker。若為 Oracle Automatic Storage Management (Oracle ASM),請將中介組態檔放在個別的磁碟群組上。若為 Oracle Real Application Clusters (Oracle RAC),中介組態檔必須位於共用儲存體上。
- 檢查主要資料庫與待命資料庫的 dg_broker_start 值。請確定將其設為 True;在 SQL 命令行中輸入:
show parameter dg_broker_start;
執行結果應該和下列類似:NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ dg_broker_start boolean TRUE
如果 dg_broker_start 設為FALSE
,請先將參數設為TRUE
,再繼續進行下一個步驟;輸入:alter system set dg_broker_start=true;
執行結果應該和下列類似:select pname from v$process where pname like 'DMON%';
PNAME ----- DMON
- 檢查主要資料庫的 Oracle Data Guard 檔案:
show parameter dg_broker_config_file1;
如果您有 Oracle RAC 或 Oracle ASM,您可以變更組態檔位置;例如:show parameter dg_broker_config_file2;
alter system set dg_broker_config_file1=broker_config_file_location;
alter system set dg_broker_config_file2=broker_config_file_location;
- 註冊主要與備用資料庫:使用 Oracle Data Guard 命令行介面 (DGMGRL) 註冊主要資料庫,並將待命資料庫設定檔新增至中介組態:
- 以 sys 身分登入主要主機。
dgmgrl sys/password@net_service_name_for_primary
- 建立使用主要資料庫名稱的組態。
CREATE CONFIGURATION configuration_name AS PRIMARY DATABASE IS primary_database_name CONNECT IDENTIFIER IS primary_database_name;
執行結果應該和下列類似:CREATE CONFIGURATION dbuks_898_lhr_dbuks_r2j_ams AS PRIMARY DATABASE IS dbuks_898_lhr CONNECT IDENTIFIER IS dbuks_898_lhr;
- 新增待命資料庫。
舉例而言:ADD DATABASE standby unique database name AS CONNECT IDENTIFIER IS standby unique database name MAINTAINED AS PHYSICAL;
ADD DATABASE dbuks_r2j_ams AS CONNECT IDENTIFIER IS dbuks_r2j_ams MAINTAINED AS PHYSICAL;
執行結果應該和下列類似:Database "dbuks_r2j_ams" added
- 以 sys 身分登入主要主機。
- 啟用組態:
enable configuration;
- 顯示組態:
- 請輸入:
show configuration;
附註:
如果您收到無法判斷套用延遲的警告,請透過 sqlplus 登入主要資料庫,然後執行一些日誌切換。Configuration - dbuks_898_lhr_dbuks_r2j_ams Protection Mode: MaxPerformance Members: dbuks_898_lhr - Primary database dbuks_r2j_ams - Physical standby database Fast-Start Failover: Disabled Configuration Status: SUCCESS (status updated 36 seconds ago)
- 顯示主要資料庫的組態 (在此範例中為 dbuks_898_lhr):
您將會看到類似以下的回應:show database dbuks_898_lhr
Database - dbuks_898_lhr Role: PRIMARY Intended State: TRANSPORT-ON Instance(s): dbuks Database Status: SUCCESS
- 顯示待命資料庫的組態 (在此範例中為 dbuks_r2j_ams):
您將會看到類似以下的回應:show database dbuks_r2j_ams
Database - dbuks_r2j_ams Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 0 seconds (computed 1 second ago) Apply Lag: 0 seconds (computed 0 seconds ago) Average Apply Rate: 59.00 KByte/s Real Time Query: ON Instance(s): dbuks Database Status: SUCCESS
- 請輸入:
確認複寫
待命資料庫現在應該開始套用從主要資料庫收到的重做。
請使用
SQL>
指令提示輸入下列步驟。
- 檢查 MRP 處理:
- 請輸入:
select sysdate, process, status, thread#, sequence#, block# from v$managed_standby where status!='IDLE';
執行結果應該和下列類似:SYSDATE PROCESS STATUS THREAD# SEQUENCE# BLOCK# --------- --------- ------------ ---------- ---------- ---------- 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 RFS RECEIVING 1 417 2413 10-JUL-23 MRP0 APPLYING_LOG 1 417 2412
- 檢視 Data Guard 處理作業。
執行結果應該和下列類似:select distinct process from gv$managed_standby;
PROCESS --------- DGRD RFS MRP0 ARCH
- 待命資料庫現在已開始套用重做日誌。在主要資料庫上執行部分日誌切換,然後在待命資料庫上再次確認:
執行結果應該和下列類似:select sysdate, process, status, thread#, sequence#, block#from v$managed_standbywhere status!='IDLE';
SYSDATE PROCESS STATUS THREAD# SEQUENCE# BLOCK# --------- --------- ------------ ---------- ---------- ---------- 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 ARCH CLOSING 1 253 1 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 ARCH CLOSING 1 252 1 04-JUL-23 MRP0 APPLYING_LOG 1 254 17 04-JUL-23 RFS RECEIVING 1 254 18
- 將主要資料庫上的日誌清單存檔:
執行結果應該和下列類似:archive log list
接著輸入:Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 415 Next log sequence to archive 417 Current log sequence 417
alter system switch logfile;
您應該會收到此回應:System altered.
請輸入:/
您應該會看見:System altered.
現在,將記錄清單歸檔:
您應該會收到此回應:archive log list
Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 417 Next log sequence to archive 419 Current log sequence 419
- 將待命資料庫上的日誌清單存檔;輸入:
select sysdate, process, status, thread#, sequence#, block# from v$managed_standby where status!='IDLE';
您應該會收到此回應:
SYSDATE PROCESS STATUS THREAD# SEQUENCE# BLOCK# --------- --------- ------------ ---------- ---------- ---------- 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CLOSING 1 418 1 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 ARCH CLOSING 1 417 2048 10-JUL-23 RFS RECEIVING 1 419 59 10-JUL-23 MRP0 APPLYING_LOG 1 419 58
- 請輸入:
- 在待命資料庫上啟用倒溯:
- 請輸入:
在每個指令之後,您應該會看到:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel; SQL> alter database flashback on;
Database altered
- 確認已啟用 (開啟) 資料庫倒溯。
執行結果應該和下列類似:select flashback_on from v$database;
FLASHBACK_ON ------------------ YES
- 接著輸入:
您應該會看見:recover managed standby database using current logfile disconnect from session;
Media recovery complete.
- 請輸入:
- 檢視資料庫詳細資訊:
執行結果應該和下列類似:select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE DATAGUARD_BROKER PROTECTION_MODE ---------------------------------------------------------- --------------- ----- ----------------------- ----------------------------- YES YES MOUNTED PHYSICAL STANDBY ENABLED MAXIMUM PERFORMANCE
- 使用「伺服器控制」公用程式 (srvctl) 停止待命資料庫:
執行結果看起來像這樣:srvctl stop database -d db_unique_name
srvctl stop database -d dbuks_r2j_ams
- 使用「伺服器控制」公用程式啟動待命資料庫:
執行結果看起來像這樣:srvctl start database -d db_unique_name
srvctl start database -d dbuks_r2j_ams
- 檢視資料庫詳細資訊:
執行結果看起來像這樣:select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE DATAGUARD_BROKER PROTECTION_MODE ----------------------------------------------------------------------- -------------------- ----------------------- YES YES READ ONLY WITH APPLY PHYSICAL STANDBY ENABLED MAXIMUM PERFORMANCE
- 您現在可以從主要資料庫提供其他日誌檔切換,並確保重做已套用至待命資料庫。
- 重新建立具有主要唯一名稱的擱置中日誌檔。輸入下列命令:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel;
alter database drop logfile group 1;
每個命令之後,您應該會看到:alter database add standby logfile thread 1 group 1 ('+RECO') size 1073741824;
最後,輸入:Database altered.
您應該會看見:recover managed standby database using current logfile disconnect from session;
Media recovery complete.