搭配使用 Oracle Data Guard 搭配 Database CLI
本文將說明如何使用資料庫 CLI 在 Oracle Cloud Infrastructure 中設定 Data Guard with Fast-Start Failover (FSFO)。本文中的主題說明如何準備主要和待命資料庫,然後設定 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_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 的資料庫建立儲存體結構。
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
使用者身分登入,以及以sudo
身分登入 Grid OS 使用者。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;
- 識別代理程式組態檔名稱和位置。用於此作業的命令取決於資料庫儲存的類型。如果您不確定資料庫儲存類型,請使用資料庫系統上的資料庫命令。
對於 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。因此,請指定目前的重做日誌加 1,並使用與重做日誌相同的大小。
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;
準備待命資料庫
在您準備待命資料庫之前,請確定待命資料庫上的資料庫本位目錄與主要資料庫的版本相同。(如果主要和待命資料庫都是以相同的資料庫版本新建立的,則資料庫本位目錄將會相同)。如果不是,請建立相同版本的資料庫本位目錄。您可以使用 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 -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
- 請以非掛載模式啟動資料庫。
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) 重新啟動資料庫,以避免在 RMAN DUPLICATE 的 $ORACLE_HOME/dbs
底下產生資料庫。
除非另有指定,否則在下列範例中使用小寫的 <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 別名,並驗證兩個資料庫的連線。
- 將保護模式變更為最大可用性或最大效能 (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;
啟用 maxperformance:
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
以查看其目前的值。- FastStartFailoverPmyShutdown
- FastStartFailoverThreshold
- FastStartFailoverTarget
- FastStartFailoverAutoReinstate
(執行
show configuration
會導致下列錯誤,直到啟動監測器為止:Warning : ORA-16819: fast-start failover observer not started
。) - 從代理程式啟用快速啟動容錯移轉:
Enable fast_start failover
- 驗證快速啟動容錯移轉和關聯的設定值。
show fast_start failover
- 從代理程式啟動監測器 (它將在前景執行,但也可以在背景執行)。
start observer
- 確認已啟用快速啟動容錯移轉,而且沒有錯誤或警告。
show configuration verbose
- 一律以這兩個方向測試容錯移轉,以確保一切如預期般運作。執行主要資料庫的關閉中止,以驗證 FSFO 是否正確執行。
監測器應啟動容錯移轉至待命資料庫。如果保護模式設為 maxprotection,則可能會根據 FastStartFailoverLaglimit 值發生部分資料遺失。