將 Oracle Data Guard 與資料庫 CLI 搭配使用
本文將說明如何使用資料庫 CLI 在 Oracle Cloud Infrastructure 中設定具有快速啟動容錯移轉 (FSFO) 的 Data Guard。本文中的主題說明如何準備主要和待命資料庫,然後設定 Data Guard 從主要資料庫傳輸重做資料並將其套用至待命資料庫。
Oracle 建議您使用主控台 (而非資料庫 CLI) 來設定及使用 Oracle Cloud Infrastructure 中的 Data Guard。
備註:本文假設您已熟悉 Data Guard 和 FSFO。若要深入瞭解它們,請參閱在資料庫系統上使用 Oracle Data Guard 。
先決條件
若要執行本主題中的程序,您需要主要和待命資料庫的下列資訊。
- db_name (或 oracle_sid)
- db_unique_name
- oracle 本位目錄 (或資料庫本位目錄)
尋找資料庫資訊
啟動主要和待命資料庫系統並建立資料庫之後 (如本主題稍後所述),您可以使用這些系統上的 CLI 來尋找所需的資料庫資訊。
-
將 SSH 連線至資料庫系統。
ssh -i <private_key_path> opc@<db_system_ip_address> -
以
opc登入,然後以sudo登入root使用者。使用連字號的sudo su -來呼叫 root 使用者的設定檔,該設定檔會將PATH設為 dbcli 目錄 (/opt/oracle/dcs/bin)。sudo su - -
若要尋找 db_name (或 oracle_sid) 和 db_uniqueName,請執行
dbcli list-databases -j命令。dbcli list-databases -j輸出:
[ { "id" : "80ad855a-5145-4f8f-a08f-406c5e4684ff", "name" : "dbtst", "dbName" : "dbtst", "databaseUniqueName" : "dbtst_phx1cs", "dbVersion" : "12.1.0.2", "dbHomeId" : "2efe7af7-0b70-4e9b-ba8b-71f11c6fe287", "instanceOnly" : false, . . . -
若要尋找 oracle 本位目錄 (或資料庫本位目錄),請執行
dbcli list-dbhomes命令。如果資料庫系統上有多個資料庫本位目錄,請使用與上述dbcli list-databases -j命令輸出中 "dbHomeId" 相符的本位目錄。dbcli list-dbhomes輸出:
ID Name DB Version Home Location Status ---------------------------------------- -------------------- ---------------------------------------- --------------------------------------------- ---------- 2efe7af7-0b70-4e9b-ba8b-71f11c6fe287 OraDB12102_home1 12.1.0.2.160719 (23739960, 23144544) /u01/app/oracle/product/12.1.0.2/dbhome_1 Configured 33ae99fe-5413-4392-88da-997f3cd24c0f OraDB11204_home1 11.2.0.4.160719 (23054319, 23054359) /u01/app/oracle/product/11.2.0.4/dbhome_1 Configured
建立主要資料庫系統
如果您還沒有主要資料庫系統,請依照建立資料庫系統簡介中的說明建立資料庫系統。資料庫系統將會包含起始資料庫。您可以使用資料庫系統上可用的資料庫命令來建立其他資料庫。
建立待命資料庫系統
注意:待命資料庫的 db_name 必須與主要資料庫的 db_name 相同,但它必須具有不同的 db_unique_name。如果您在待命資料庫和主要資料庫使用相同的資料庫名稱,則必須先使用 dbcli delete-database 命令從待命資料庫系統刪除資料庫,才能執行下面描述的 dbcli create-database 命令。刪除並建立資料庫需要數分鐘的時間才能完成。dbcli 指令必須以 root 使用者身分執行。
-
依建立資料庫系統簡介中的描述建立待命資料庫系統,然後等待資料庫系統完成佈建並可供使用。
您可以針對可用性和災害復原目的,在與主要資料庫系統不同的可用性網域中建立待命資料庫系統 (強烈建議這樣做)。您可以在主要資料庫系統的雲端網路中建立待命資料庫系統,讓這兩個系統都位於單一的可路由網路中。
-
將 SSH 連線至資料庫系統。
ssh -i <private_key_path> opc@<db_system_ip_address> -
以
opc登入,然後以sudo登入root使用者。使用連字號的sudo su -來呼叫 root 使用者的設定檔,該設定檔會將PATH設為 dbcli 目錄 (/opt/oracle/dcs/bin)。sudo su - -
資料庫系統將包含初始資料庫,但您需要使用
dbcli create-database命令搭配--instanceonly參數來建立待命資料庫。此參數只會建立資料庫儲存體結構,並以非掛載模式啟動資料庫 (不會建立其他資料庫檔案)。使用
--instanceonly時,需要--dbname和--adminpassword參數,而且它們應該與主要資料庫的 dbname 和管理員密碼相符,以避免混淆。下列範例命令會提示您輸入管理員密碼,然後建立名為 dbname 之資料庫的儲存體結構。
dbcli create-database --dbname <same as primary dbname>;--databaseUniqueName <different from primary uniquename>;--instanceonly --adminpassword如果您使用可插式資料庫,請同時指定
--cdb參數。如需完整的命令語法,請參閱資料庫命令。
-
等待幾分鐘的時間,讓
dbcli create-database命令建立待命資料庫。您可以使用
dbcli list-jobs命令來驗證建立工作是否已順利執行,然後使用dbcli list-databases命令來驗證資料庫是否已設定。
準備主要資料庫系統
若要準備主要資料庫系統,您必須設定靜態監聽器、更新 tnsnames.ora,以及設定部分資料庫設定值和參數。
設定靜態監聽器
建立 RMAN 和「資料保全中介」要使用的靜態監聽器。
-
SSH 至主要資料庫系統,以
opc或root使用者身分登入,並以 Grid OS 使用者身分登入sudo。sudo su - grid -
編輯
/u01/app/<version>/grid/network/admin/listener.ora並新增下列內容至該內容。此處顯示的第一個靜態監聽器是選擇性的。第二個DGMGRL靜態監聽器對於 12.1 或更新的版本資料庫是選擇性的,但 11.2 版資料庫則是必要的。SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <primary_db_unique_name>.<primary_db_domain>) (SID_NAME = <primary_oracle_sid>) (ORACLE_HOME=<oracle_home_directory>) (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin") ) (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <primary_db_unique_name>_DGMGRL.<primary_db_domain>) (SID_NAME = <primary_oracle_sid>) (ORACLE_HOME=<oracle_home_directory>) (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin") ) ) -
儲存您的變更,然後重新啟動監聽器。
srvctl stop listener srvctl start listener
將網路服務名稱新增至 tnsnames.ora
作為 oracle 使用者,編輯 $ORACLE_HOME/network/admin/tnsnames.ora 並新增待命資料庫網路服務名稱。
<standby db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <standby db_unique_name>.<standby db_domain>)
)
)
上述範例假設名稱解析正在運作中,且 <standby_server>.<domain> 可在主要資料庫解析。如果 IP 位址可在單一雲端網路 (VCN) 內路由,您也可以使用待命伺服器的專用 IP 位址。
設定主要資料庫參數
提示:如果主要主機和待命主機的目錄結構不同,您可能需要設定此處未討論的其他參數,例如 log_file_name_convert 參數。如需有關如何建立不同目錄結構之主機的待命資料庫的詳細資訊,請參閱 RMAN 文件。
-
oracle 使用者身分啟用自動待命檔案管理功能。
alter system set standby_file_management=AUTO; -
識別 Broker 組態檔名稱與位置。此處使用的命令取決於資料庫儲存的類型。如果您不確定資料庫儲存類型,請使用資料庫系統上的資料庫命令。
對於 ACFS 資料庫儲存,請使用下列命令來設定「中介」組態檔。
alter system set dg_broker_config_file1='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr1<Primary db_unique_name>.dat'; alter system set dg_broker_config_file2='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr2<Primary db_unique_name>.dat';對於 ASM 資料庫儲存體,請使用下列命令來設定「中介」組態檔。
alter system set dg_broker_config_file1='+DATA/<Primary db_unique_name>/dr1<db_unique_name>.dat'; alter system set dg_broker_config_file2='+DATA/<Primary db_unique_name>/dr2<db_unique_name>.dat'; -
啟用資料庫的代理程式 DMON 處理作業。
alter system set dg_broker_start=true; -
強制記錄所有資料庫交易的資料庫。
alter database force logging ; -
根據「線上重做日誌 (ORL)」新增待命重做日誌 (SRL)。在新啟動的資料庫系統上,將有三個大小為 1073741824 的 ORL,因此建立四個相同大小的 SRL。
您可以使用下方的查詢來決定 ORL 的數目和大小 (位元組)。
select group#, bytes from v$log;輸出:
GROUP# BYTES ---------- ---------- 1 1073741824 2 1073741824 3 1073741824所有 ORL 的大小必須相同。
SRL 的大小必須與 ORL 的大小相同,但至少要有一個 SRL 比 ORL 多。在上述範例中,有三個 ORL,所以需要四個 SRL。因此,請指定目前的重做日誌再加上一個日誌,並使用與重做日誌相同的大小。
alter database add standby logfile thread 1 size <size>;SRL 群組中應該只有一個成員 (根據預設,會為每個 SRL 群組只建立一個成員建立資料庫系統)。若要確保如此,您可以使用下列語法來命名檔案。
alter database add standby logfile thread 1 group 4 (<logfile name with full path>) size 1073741824, group 5(<logfile name with full path>) size 1073741824 ...若為 ASM/OMF 組態,上述命令會使用磁碟群組,而非
\<logfile name with full path>。alter database add standby logfile thread 1 group 4 (+RECO) size 1073741824, group 5(+RECO) size 1073741824 ...提示:應調整 ORL 與 SRL 的大小,如此日誌切換的頻率不會超過每 10 分鐘一次。這需要瞭解應用程式,且可能需要在部署後進行調整。如需詳細資訊,請參閱適當地使用待命重做日誌並設定大小。
-
確認您已建立正確的 SRL 數目。
select group#, bytes from v$standby_log; -
請確定資料庫為 ARCHIVELOG 模式。
archive log list -
啟用資料庫 FLASHBACK。db_flashback_retention_target 的最小建議值為 120 分鐘。
alter database flashback on ; alter system set db_flashback_retention_target=120; -
如果資料庫是新建立的,請執行單一交換器重做日誌來啟用存檔。(至少必須先存檔一個日誌,才能執行 RMAN 複製。)
alter system switch logfile;
準備待命 Database
在您準備待命資料庫之前,請確定待命資料庫的本位目錄版本與主要資料庫的版本相同。(如果主要和待命資料庫都是新建立的資料庫版本相同,則資料庫本位目錄將會相同。) 如果不是,請建立相同版本的資料庫本位目錄。您可以使用 Dbhome 命令來驗證版本,並視需要建立新的資料庫本位目錄。
若要準備待命資料庫系統,您需要設定靜態監聽器、更新 tnsnames.ora、設定 TDE 公事包、建立暫時密碼檔、驗證連線、執行 RMAN DUPLICATE、啟用 FLASHBACK,然後建立資料庫服務。
設定靜態監聽器
建立 RMAN 和「資料保全中介」要使用的靜態監聽器。
-
SSH 至待命資料庫系統、以
opc或root使用者身分登入,以及以sudo身分登入 Grid OS 使用者。sudo su - grid -
將下列內容附加至
/u01/app/<db_version>/grid/network/admin/listener.ora.RMAN DUPLICATE 需要下方顯示的第一個靜態監聽器。對於資料庫版本 12.2.0.1 和 12.1.0.2,第二個 DGMGRL 靜態監聽器是選擇性的,但資料庫版本 11.2.0.4 需要此監聽器。
SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <standby db_unique_name>.<standby db_domain>) (SID_NAME = <standby oracle_sid>) (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <standby db_unique_name>_DGMGRL.<standby db_domain>) (SID_NAME = <standby oracle_sid>) (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) ) -
重新啟動監聽器。
srvctl stop listener srvctl start listener -
確認靜態監聽器可供使用。以下範例輸出適用於資料庫版本 12.1.0.2。請注意,目前預期會有
...status UNKNOWN訊息。lsnrctl status輸出:
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 29-SEP-2016 21:09:25 Copyright (c) 1991, 2014, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production Start Date 29-SEP-2016 21:09:19 Uptime 0 days 0 hr. 0 min. 5 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/12.1.0.2/grid/network/admin/listener.ora Listener Log File /u01/app/grid/diag/tnslsnr/dg2/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.1.24)(PORT=1521))) Services Summary... Service "dg2_phx2hx.oratst.org" has 1 instance(s). Instance "dg2", status UNKNOWN, has 1 handler(s) for this service... Service "dg2_phx2hx_DGMGRL.oratst.org" has 1 instance(s). Instance "dg2", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully
將網路服務名稱新增至 tnsnames.ora
身為 oracle 使用者,請將待命資料庫網路服務名稱新增至 $ORACLE_HOME/network/admin/tnsnames.ora。$ORACLE_HOME 是執行待命資料庫的資料庫本位目錄。
<Primary db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <primary_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <primary db_unique_name).<primary db_domain>)
)
)
<Standby db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <standby db_unique_name>.<db_domain>)
)
)
將 TDE 公事包複製到待命系統
使用 SCP 將 TDE 公事包檔案從主要資料庫系統複製到待命資料庫系統。下列範例命令假設 SCP 命令正由 oracle OS 使用者執行,且 oracle 的私密金鑰已經建立,且存在於執行 SCP 的主機上。
scp -i <private key> primary_server:/opt/oracle/dcs/commonstore/wallets/tde/<primary db_unique_name>/* standby_server:/opt/oracle/dcs/commonstore/wallets/tde/<standby db_unique_name>
設定待命系統組態
身為 oracle 使用者,請為資料庫版本 11.2.0.4 建立下列目錄。對於版本 12.2.0.1 和版本 12.1.0.2,此步驟是選擇性的。
mkdir -pv /u03/app/oracle/redo/<standby db_unique_name uppercase>/controlfile
建立稽核檔目的地
身為 oracle 使用者,請建立下列目錄以作為稽核檔案目的地。
mkdir -p /u01/app/oracle/admin/<db_name>/adump
否則,稍後使用的 RMAN 複製命令將會失敗。
建立暫時密碼檔
身為 oracle 使用者,建立暫時密碼檔。
orapwd file=$ORACLE_HOME/dbs/orapw<standby oracle_sid> password=<admin password for primary> entries=5
密碼必須與主要資料庫的管理員密碼相同。否則,下方的 RMAN 複製步驟將會失敗,包含:RMAN-05614: Passwords for target and auxiliary connections must be the same when using active duplicate.
驗證可用的待命資料庫
-
以 oracle 使用者身分設定環境變數。
. oraenv -
以下列內容取代
$ORACLE_HOME/dbs/init<standby sid_name>.ora:db_name=<Primary db_name> db_unique_name=<standby db_unique_name> db_domain=<standby db_domain> -
從待命資料庫移除 spfile。
/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile$ORACLE_SID.ora資料庫必須在未指定 spfile 的非掛載模式下啟動,但原始初始化檔案包含 spfile 參數,以防止
RMAN重複步驟運作。 -
設定
ORACLE_UNQNAME環境變數以指向您的DB_UNIQUE_NAME。export ORACLE_UNQNAME =db_unique_name注意:如果未執行此步驟,將不會開啟公事包,並在後續步驟中執行
RMAN DUPLICATE命令將會失敗。 -
先前使用的
dbcli create-database --instanceonly命令會以讀取 / 寫入模式將待命資料庫開啟為主要資料庫,因此必須先關閉資料庫,才能繼續進行下方的指定步驟。sqlplus / as sysdba shutdown immediate -
以 Nomount 模式啟動資料庫。
startup nomount
驗證資料庫連線
請檢查主要資料庫與待命資料庫之間的連線。
- 請確定監聽器連接埠 1521 已在用於主要和待命資料庫系統的安全清單中開啟。如需詳細資訊,請參閱更新資料庫系統的安全清單。
-
從主要資料庫連線至待命資料庫。
sqlplus sys/<password>@<standby net service name> as sysdba -
從待命資料庫連線至主要資料庫。
sqlplus sys/<password>@<primary net service name> as sysdba
執行 RMAN DUPLICATE 命令
以 oracle 使用者身分在待命資料庫系統上執行 RMAN DUPLICATE 命令。
如果主要資料庫很大,您可以配置額外的通道來提升效能。對於新安裝的資料庫,一個通道通常會在數分鐘內執行資料庫複製。
確定 RMAN DUPLICATE 命令未產生任何錯誤。如果發生錯誤,請使用 init.ora 檔案 (非 spfile) 重新啟動資料庫,以防在 $ORACLE_HOME/dbs 底下產生為 RMAN DUPLICATE 的一部分。
在下列範例中,除非另有指定,否則請使用小寫作為 <Standby db_unique_name> 。
若為 ACFS 儲存配置,請執行下列命令。
rman target sys/<password>@<primary alias> auxiliary sys/<password>@<standby alias> log=rman.out
run { allocate channel prim1 type disk;
allocate auxiliary channel sby type disk;
duplicate target database for standby from active database
dorecover
spfile
parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase >/'
set db_unique_name='<Standby db_unique_name>'
set db_create_file_dest='/u02/app/oracle/oradata/<Standby db_unique_name>'
set dg_broker_config_file1='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr1<Standby db_unique_name>.dat'
set dg_broker_config_file2='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr2<Standby db_unique_name>.dat'
set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
set instance_name='<Standby db_unique_name>'
;
}
若為 ASM 儲存體配置,請執行下列命令。
rman target sys/<password>@<primary alias> auxiliary sys/<password>@<standby alias> log=rman.out
run {
allocate channel prim1 type disk;
allocate auxiliary channel sby type disk;
duplicate target database for standby from active database
dorecover
spfile
parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase>/'
set db_unique_name='<Standby db_unique_name>'
set dg_broker_config_file1='+DATA/<Standby db_unique_name>/dr1<Standby db_unique_name>.dat'
set dg_broker_config_file2='+DATA/<Standby db_unique_name>/dr2<Standby db_unique_name>.dat'
set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
set instance_name='<Standby db_unique_name>'
;
}
啟用資料庫 FLASHBACK
-
作為 Data Guard 最佳做法,在主要資料庫和待命資料庫上啟用倒溯並將
db_flashback_retention_target至少設為 120 分鐘。alter database flashback on; alter system set db_flashback_retention_target=120; -
檢查待命資料庫是否正確建立。
select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE,SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
建立資料庫服務
Oracle 建議您使用 srvctl 來建立待命資料庫的資料庫服務。
適用於 ACFS 儲存配置。
-
建立共用目錄並將 spfile 檔案複製到該目錄中。
mkdir -pv /u02/app/oracle/oradata/<Standby db_unique_name>/dbs cp $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora /u02/app/oracle/oradata/<Standby db_unique_name>/dbs -
停止並移除現有的資料庫服務。
srvctl stop database -d <standby db_unique_name> srvctl remove database -d <standby db_unique_name> -
建立資料庫服務。
srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora' -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name> srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>" srvctl config database -d <standby db_unique_name> -
啟動資料庫服務。
srvctl start database -d <standby db_unique_name> -
從
$ORACLE_HOME/dbs清除檔案。rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora -
建立
$ORACLE_HOME/dbs/init<standby oracle_sid>.ora檔案以參照 spfile 檔案的新位置。SPFILE='/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora' -
停止待命資料庫,然後使用
srvctl啟動它。srvctl stop database -d <standby db_unique_name> srvctl start database -d <standby db_unique_name>
用於 ASM 儲存配置。
-
請考慮在 +DATA 下產生 spfile 檔案。
create pfile='init<standby oracle_sid>.ora' from spfile ; create spfile='+DATA' from pfile='init<standby oracle_sid>.ora' ; -
停止並移除現有的資料庫服務。
srvctl stop database -d <standby db_unique_name> srvctl remove database -d <standby db_unique_name> -
建立資料庫服務。
srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx' -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name> srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>" srvctl config database -d <standby db_unique_name> -
啟動資料庫服務。
srvctl start database -d <standby db_unique_name> -
從
$ORACLE_HOME/dbs清除檔案。rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora -
建立
$ORACLE_HOME/dbs/init<standby oracle_sid>.ora檔案以參照 spfile 檔案的新位置。SPFILE='+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx' -
停止資料庫並使用 srvctl 啟動待命資料庫。
srvctl start database -d <standby db_unique_name>
設定資料保全
請執行下列步驟來完成「資料保全」的組態,並且從主要資料庫啟用重做傳輸,然後在待命資料庫中套用重做。
-
從主要或待命資料庫系統執行
dgmgrl命令行公用程式,並使用 sys 證明資料連線至主要資料庫。connect sys/<sys password>@<primary tns alias> -
建立「資料保全」組態,並在
dgmgrl命令行公用程式中識別主要和待命資料庫。create configuration mystby as primary database is <primary db_unique_name> connect identifier is <primary tns alias>; add database <standby db_unique_name> as connect identifier is <standby tns alias> maintained as physical; -
啟用資料保全組態設定
dgmgrl命令行公用程式。enable configuration; -
請檢查資料保全設定是否正確。在 SQL 提示中同時執行下列 SQL:主要和待命資料庫。
select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database; -
確認已在待命資料庫中起始「資料保全」處理作業。
select PROCESS,PID,DELAY_MINS from V$MANAGED_STANDBY; -
驗證主要和待命資料庫的參數組態。
show parameter log_archive_dest_ show parameter log_archive_config show parameter fal_server show parameter log_archive_format -
確定「資料保全」組態在
dgmgrl命令行公用程式中運作。具體而言,請確保重做運送和重做套用正常運作,而且待命資料庫不會因為主要資料庫而延遲。show configuration verbose show database verbose <standby db_unique_name> show database verbose <primary db_unique_name>任何差異、錯誤或警告都應加以解決。您也可以在主要資料庫上執行交易,並確認待命資料庫中是否顯示該交易。
-
在兩個方向執行切換和容錯移轉,以確定資料保全組態如預期般運作。在每項作業之後執行
show configuration,並確定dgmgrl命令行公用程式中沒有錯誤或警告。注意:根據您的決定,此步驟是選擇性的。如果組態因任何原因無效,切換和 (或) 容錯移轉將會失敗,而且可能很難或無法啟動主要資料庫。可能需要復原主要資料庫,這會影響可用性。
switchover to <standby db_unique_name> switchover to <primary db_unique_name> #connect to standby before failover: connect sys/<sys password>@<standby db_unique_name> failover to <standby db_unique_name> reinstate database <primary db_unique_name> #connect to primary before failover: connect sys/<sys password>@<primary db_unique_name> failover to <primary db_unique_name> reinstate database <standby db_unique_name>
設定監測器 (選擇性)
高可用性和持久性的最佳做法是在不同的可用性網域中執行主要、待命和監測器。監測器決定是否容錯移轉至特定目標待命資料庫。用於監測器的伺服器需要 Oracle Client Administrator 軟體,其中包含 Oracle SQL NET 和 Broker。在 dgmgrl 命令行公用程式中執行下列命令。
- 如前所述,為主要和待命資料庫設定 TNS 別名名稱,並驗證與這兩個資料庫的連線。
-
將保護模式變更為 maxavailability 或 maxperformance (FSFO 不支援 maxprotection)。
若要啟用最大可用性,請執行下列動作:
edit database <standby db_unique_name> set property 'logXptMode'='SYNC'; edit database <primary db_unique_name> set property 'logXptMode'='SYNC'; edit configuration set protection mode as maxavailability;若要啟用最大效能,請執行下列動作:
edit configuration set protection mode as maxperformance; edit database <standby db_unique_name> set property 'logXptMode'='ASYNC'; edit database <primary db_unique_name> set property 'logXptMode'='ASYNC';為了達到最佳效能,
FastStartFailoverLaglimit特性預設會將允許的資料遺失量上限限制為 30 秒。 -
也應考量下列特性。執行
show configuration verbose以查看其目前的值。- 快速啟動容錯移轉 myShutdown
- 快速啟動容錯移轉臨界值
- 快速啟動容錯移轉目標
- 快速啟動容錯移轉自動復原
(執行
show configuration會導致下列錯誤,直到監測器啟動為止:Warning : ORA-16819: fast-start failover observer not started。) -
啟用 Broker 的快速啟動容錯移轉:
Enable fast_start failover -
請檢查快速啟動容錯移轉和關聯的設定值。
show fast_start failover -
從中介啟動監測器 (它會在前景執行,但也可以在背景執行)。
start observer -
請確定已啟用快速啟動容錯移轉,而且沒有錯誤或警告。
show configuration verbose -
一律以兩個方向測試容錯移轉,以確保所有項目都如預期般運作。執行主要資料庫的關閉中止,以驗證 FSFO 是否正確執行。
監測器應該啟動容錯移轉至待命資料庫。如果保護模式設為 maxprotection,則會根據 FastStartFailoverLaglimit 值發生部分資料遺失。