將 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 。

先決條件

若要執行本主題中的程序,您需要主要和待命資料庫的下列資訊。

尋找資料庫資訊

啟動主要和待命資料庫系統並建立資料庫之後 (如本主題稍後所述),您可以使用這些系統上的 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_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 和管理員密碼相符,以避免混淆。

    下列範例命令會提示您輸入管理員密碼,然後建立名為 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 至主要資料庫系統,以 opc 或 root 使用者身分登入,並以 Grid OS 使用者身分登入 sudo。

    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. 識別 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';
  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。因此,請指定目前的重做日誌再加上一個日誌,並使用與重做日誌相同的大小。

    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;

準備待命 Database

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

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

設定靜態監聽器

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

  1. SSH 至待命資料庫系統、以 opc 或 root 使用者身分登入,以及以 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 公事包檔案從主要資料庫系統複製到待命資料庫系統。下列範例命令假設 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.

驗證可用的待命資料庫

  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. 以 Nomount 模式啟動資料庫。

    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) 重新啟動資料庫,以防在 $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

  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. 將保護模式變更為 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 秒。

  3. 也應考量下列特性。執行 show configuration verbose 以查看其目前的值。

    • 快速啟動容錯移轉 myShutdown
    • 快速啟動容錯移轉臨界值
    • 快速啟動容錯移轉目標
    • 快速啟動容錯移轉自動復原

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

  4. 啟用 Broker 的快速啟動容錯移轉:

    Enable fast_start failover
  5. 請檢查快速啟動容錯移轉和關聯的設定值。

    show fast_start failover
  6. 從中介啟動監測器 (它會在前景執行,但也可以在背景執行)。

    start observer
  7. 請確定已啟用快速啟動容錯移轉,而且沒有錯誤或警告。

    show configuration verbose
  8. 一律以兩個方向測試容錯移轉,以確保所有項目都如預期般運作。執行主要資料庫的關閉中止,以驗證 FSFO 是否正確執行。

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