搭配使用 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 尋找所需的資料庫資訊。

  1. SSH 至資料庫系統。
    ssh -i <private_key_path> opc@<db_system_ip_address>
  2. opc 身分登入,然後以 sudo 身分登入 root 使用者。搭配使用 sudo su - 和連字號來呼叫 root 使用者的設定檔,該設定檔會將 PATH 設定為 dbcli 目錄 (/opt/oracle/dcs/bin)。
    sudo su -
  3. 若要尋找 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,
       .
       .
       .  
  4. 若要尋找 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 使用者身分執行。

  1. 建立資料庫系統簡介中所述建立待命資料庫系統,並等待資料庫系統完成佈建並可供使用。

    您可以根據可用性和災害復原目的,在與主要資料庫系統不同的可用性網域中建立待命資料庫系統 (強烈建議這麼做)。您可以在主要資料庫系統的雲端網路中建立待命資料庫系統,讓這兩個系統都位於單一的可路由網路中。

  2. SSH 至資料庫系統。
    ssh -i <private_key_path> opc@<db_system_ip_address>
  3. opc 身分登入,然後以 sudo 身分登入 root 使用者。搭配使用 sudo su - 和連字號來呼叫 root 使用者的設定檔,該設定檔會將 PATH 設定為 dbcli 目錄 (/opt/oracle/dcs/bin)。
    sudo su -
  4. 此資料庫系統將包括初始資料庫,但您需要使用 dbcli create-database 命令搭配 --instanceonly 參數來建立待命資料庫。此參數只會建立資料庫儲存體結構,並以指定模式啟動資料庫 (不會建立其他資料庫檔案)。

    使用 --instanceonly 時,必須要有 --dbname--adminpassword 參數,而且這些參數必須與主要資料庫的資料庫名稱和管理員密碼相符,以避免混淆。

    下列範例命令會提示輸入管理員密碼,然後為名稱為 dbname 的資料庫建立儲存體結構。

    dbcli create-database --dbname <same as primary dbname>;--databaseUniqueName <different from primary uniquename>;--instanceonly --adminpassword

    如果您使用可插拔資料庫,請一併指定 --cdb 參數。

    如需完整的命令語法,請參閱資料庫命令

  5. 請稍候幾分鐘,讓 dbcli create-database 命令建立待命資料庫。

    您可以使用 dbcli list-jobs 命令來驗證建立工作是否順利執行,然後使用 dbcli list-databases 命令來驗證是否已設定資料庫。

準備主要資料庫系統

若要準備主要資料庫系統,您需要設定靜態監聽器、更新 tnsnames.ora,以及設定部分資料庫設定值和參數。

設定靜態監聽器

建立要由 RMAN 和「資料保全中介」使用的靜態監聽器。

  1. SSH 至主要資料庫系統、以 opcroot 使用者身分登入,以及以 sudo 身分登入 Grid OS 使用者。
    sudo su - grid
  2. 編輯 /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")
        )
      )
  3. 儲存您的變更,然後重新啟動監聽器。
    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 文件,瞭解如何為具有不同目錄結構的主機建立待命資料庫的詳細資訊。

  1. 以 oracle 使用者身分啟用自動待命檔案管理。
    alter system set standby_file_management=AUTO;
  2. 識別代理程式組態檔名稱和位置。用於此作業的命令取決於資料庫儲存的類型。如果您不確定資料庫儲存類型,請使用資料庫系統上的資料庫命令

    對於 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';
  3. 啟用資料庫的代理程式 DMON 處理作業。
    alter system set dg_broker_start=true;
  4. 強制記錄所有資料庫交易的資料庫。
    alter database force logging ;
  5. 根據「線上重做日誌 (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 分鐘一次。這需要瞭解應用程式,且可能需要在部署後進行調整。如需詳細資訊,請參閱使用待命重做日誌並適當地設定大小

  6. 確認您建立的 SRL 數目正確。
    select group#, bytes from v$standby_log;
  7. 確定資料庫處於 ARCHIVELOG 模式。
    archive log list
  8. 啟用資料庫 FLASHBACK。db_flashback_retention_target 的最小建議值為 120 分鐘。
    alter database flashback on ;
    alter system set db_flashback_retention_target=120;  
  9. 如果資料庫是新建立的,請執行單一交換器重做日誌來啟用存檔。(至少必須先存檔一個日誌,才能執行 RMAN 複製)。
    alter system switch logfile;

準備待命資料庫

在您準備待命資料庫之前,請確定待命資料庫上的資料庫本位目錄與主要資料庫的版本相同。(如果主要和待命資料庫都是以相同的資料庫版本新建立的,則資料庫本位目錄將會相同)。如果不是,請建立相同版本的資料庫本位目錄。您可以使用 Dbhome 命令來驗證版本,並視需要建立新的資料庫本位目錄。

若要準備待命資料庫系統,您需要設定靜態監聽器、更新 tnsnames.ora、設定 TDE 公事包、建立暫時密碼檔、驗證連線、執行 RMAN DUPLICATE、啟用 FLASHBACK,然後建立資料庫服務。

設定靜態監聽器

建立要由 RMAN 和「資料保全中介」使用的靜態監聽器。

  1. SSH 至待命資料庫系統、以 opcroot 使用者身分登入,以及以 sudo 身分登入 Grid OS 使用者。
    sudo su - grid
  2. 將下列內容附加至 /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") 
        )
      )
  3. 重新啟動監聽器。
    srvctl stop listener
    srvctl start listener
  4. 確認靜態監聽器可以使用。下面的範例輸出適用於資料庫版本 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 公事包檔案從主要資料庫系統複製到待命資料庫系統。下列範例命令假設 oracle OS 使用者正在執行 SCP 命令,且 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.

正在驗證待命資料庫是否可用

  1. 以 oracle 使用者身分設定環境變數。
    . oraenv
  2. $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>
  3. 從待命資料庫移除 spfile。
    /u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile$ORACLE_SID.ora 

    資料庫必須以指定模式啟動,但未指定 spfile,但是原始初始化檔案包含 spfile 參數,這樣會使 RMAN 重複步驟無法運作。

  4. ORACLE_UNQNAME 環境變數設為指向您的 DB_UNIQUE_NAME
    export ORACLE_UNQNAME =db_unique_name

    附註:

    如果您未執行此步驟,將不會開啟公事包,在後續步驟中執行 RMAN DUPLICATE 命令將會失敗。
  5. 先前使用的 dbcli create-database --instanceonly 命令會以讀取 / 寫入模式開啟待命資料庫作為主要資料庫,因此必須先將資料庫關閉,才能繼續進行下方的指定步驟。
    sqlplus / as sysdba
    
    shutdown immediate
  6. 請以非掛載模式啟動資料庫。
    startup nomount

驗證資料庫連線

請檢查主要資料庫與待命資料庫之間的連線。

  1. 請確定監聽器連接埠 1521 已在用於主要和待命資料庫系統的安全清單中開啟。如需詳細資訊,請參閱更新資料庫系統的安全清單
  2. 從主要資料庫,連線至待命資料庫。
    sqlplus sys/<password>@<standby net service name> as sysdba
  3. 從待命資料庫連線至主要資料庫。
    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

  1. 作為 Data Guard 最佳做法,啟用倒溯,並將主要和待命資料庫的 db_flashback_retention_target 設定為至少 120 分鐘。
    alter database flashback on;
    alter system set db_flashback_retention_target=120;
  2. 檢查是否已正確建立待命資料庫。
    select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE,SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;

建立資料庫服務

Oracle 建議您使用 srvctl 為待命資料庫建立資料庫服務。

適用於 ACFS 儲存版面配置。

  1. 建立共用目錄並將 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
  2. 停止並移除現有的資料庫服務。
    srvctl stop database 
        -d <standby db_unique_name>
    
    srvctl remove database 
        -d <standby db_unique_name>
  3. 建立資料庫服務。
    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>
  4. 啟動資料庫服務。
    srvctl start database 
        -d <standby db_unique_name>
  5. $ORACLE_HOME/dbs 清除檔案。
    rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
    rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
  6. 建立 $ORACLE_HOME/dbs/init<standby oracle_sid>.ora 檔案以參照 spfile 檔案的新位置。
    SPFILE='/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora'
  7. 停止待命資料庫,然後使用 srvctl 啟動它。
    srvctl stop database 
        -d <standby db_unique_name>
    
    srvctl start database 
        -d <standby db_unique_name>

ASM 儲存體配置。

  1. 請考慮在 +DATA 下產生 spfile 檔案。
    create pfile='init<standby oracle_sid>.ora' from spfile ;
    create spfile='+DATA' from pfile='init<standby oracle_sid>.ora' ;
  2. 停止並移除現有的資料庫服務。
    srvctl stop database 
        -d <standby db_unique_name>
    
    srvctl remove database 
        -d <standby db_unique_name>
  3. 建立資料庫服務。
    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>
  4. 啟動資料庫服務。
    srvctl start database 
        -d <standby db_unique_name>
  5. $ORACLE_HOME/dbs 清除檔案。
    rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
    rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
  6. 建立 $ORACLE_HOME/dbs/init<standby oracle_sid>.ora 檔案以參照 spfile 檔案的新位置。
    SPFILE='+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx'
  7. 停止資料庫,並使用 srvctl 啟動待命資料庫。
    srvctl start database -d <standby db_unique_name>

設定資料保全

請執行下列步驟來完成「資料保全」組態,以及啟用從主要資料庫進行的重做傳輸,以及在待命資料庫中套用重做。

  1. 從主要或待命資料庫系統執行 dgmgrl 命令行公用程式,並使用 sys 證明資料連線至主要資料庫。
    connect sys/<sys password>@<primary tns alias>
  2. 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;
  3. 啟用「資料保全」組態 dgmgrl 命令行公用程式。
    enable configuration;
  4. 請確認資料保全設定正確完成。在 SQL 提示中同時主要和待命資料庫執行下列 SQL。
    select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database;
  5. 確定在待命資料庫中起始「資料保全」處理作業。
    select PROCESS,PID,DELAY_MINS from V$MANAGED_STANDBY;
  6. 檢查主要和待命資料庫上的參數組態。
    show parameter log_archive_dest_
    show parameter log_archive_config
    show parameter fal_server
    show parameter log_archive_format
  7. 確認「資料保全」組態在 dgmgrl 命令行公用程式中運作。具體而言,請確定重做出貨和重做套用運作正常,而且待命資料庫不會無理地落後主要資料庫。
    show configuration verbose
    show database verbose <standby db_unique_name>
    show database verbose <primary db_unique_name>

    任何差異、錯誤或警告都應加以解決。您也可以在主要資料庫上執行交易,並確認待命資料庫中可見到該交易。

  8. 在兩個方向執行切換和容錯移轉,以驗證「資料保全」組態是否如預期般運作。在每個作業之後執行 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 命令行公用程式中執行下列命令。

  1. 如前所述,為主要和待命資料庫設定 TNS 別名,並驗證兩個資料庫的連線。
  2. 將保護模式變更為最大可用性或最大效能 (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 秒。

  3. 下列特性也應納入考量。執行 show configuration verbose 以查看其目前的值。
    • FastStartFailoverPmyShutdown
    • FastStartFailoverThreshold
    • FastStartFailoverTarget
    • FastStartFailoverAutoReinstate

    (執行 show configuration 會導致下列錯誤,直到啟動監測器為止:Warning : ORA-16819: fast-start failover observer not started。)

  4. 從代理程式啟用快速啟動容錯移轉:
    Enable fast_start failover
  5. 驗證快速啟動容錯移轉和關聯的設定值。
    show fast_start failover
  6. 從代理程式啟動監測器 (它將在前景執行,但也可以在背景執行)。
    start observer
  7. 確認已啟用快速啟動容錯移轉,而且沒有錯誤或警告。
    show configuration verbose
  8. 一律以這兩個方向測試容錯移轉,以確保一切如預期般運作。執行主要資料庫的關閉中止,以驗證 FSFO 是否正確執行。

    監測器應啟動容錯移轉至待命資料庫。如果保護模式設為 maxprotection,則可能會根據 FastStartFailoverLaglimit 值發生部分資料遺失。