準備部署拓樸

為了讓 Data Guard 正常運作,不同區域中的兩個資料庫都必須通訊。因此,您必須透過個別的 DRG 在 OCI 中的兩個區域之間設定遠端對等互連連線。DRG 是由 OracleDB 建立的 Azure 設定,因此您只需要在現有的 DRG 之間建立遠端對等互連連線。

安裝網路

若要設定網路,請執行下列步驟

  1. 設定 Azure VM 的網路連線,以及 Azure 資料庫系統的 OracleDB。
    • 確定您有 Azure VM 上 Oracle DB 系統的 ssh 私密金鑰。
    • 測試 Azure VM 與 Azure 資料庫系統之 OracleDB 之間的連線。
  2. 設定 OCI 中資料庫系統的網路。
    1. 首先,瀏覽至區域 1 中資料庫系統的 VCN 詳細資訊,選取動態路由閘道連附項,然後選取 DRG 名稱,將 DRG 的詳細資訊載入區域 1。然後,選取遠端對等連線附件。在第二個瀏覽器視窗中,區域 2 的執行方式完全相同。
    2. 接著,在這兩個區域中,選取建立遠端對等互連連線以建立 RPC。
    3. 建立這兩個 RPC 時,請選取區域 1 中的 RPC 名稱,然後複製 OCID。
    4. 在區域 2 中,選取 RPC 名稱,然後選取建立連線。選取區域 1 (連線位置) 的正確區域名稱,並且提供區域 1 (您在上一個步驟複製) 中 RPC 的 OCID。建立連線之後的幾分鐘,「對等狀態」應為「對等」。
    5. 接下來,允許兩個區域中 VCN 之間的流量。瀏覽至 VCN 詳細資訊並選取預設安全清單。選取新增傳入規則即可允許來自相對 VCN 之 CIDR 範圍的流量。
    6. 最後,從 Azure 中的 VM 連線至個別的 OCI Base DB 系統。編輯兩個基礎資料庫系統的 tnsnames.ora 檔案,以連線至另一個資料庫。
    7. 確認 tnsping 可從兩個資料庫系統正常運作至相反的資料庫。

設定適用於 Azure DR 組態的 Oracle Database

若要設定 Azure DR 組態的 Oracle 資料庫,您需要準備主要和次要資料庫,如下所述。

附註:

按一下複製,將命令範例儲存至剪貼簿,以貼到命令行中。請務必將任何 variables 取代為您實行的特定值。

準備主要資料庫

若要準備主要資料庫,您必須設定靜態監聽器、更新 tnsnames.ora 檔案,以及設定各種資料庫設定值和參數。

  1. SQL> 提示中,驗證下列資訊:
    • 已啟用檢查資料庫倒溯
    • 檢查是否已啟用強制資料庫記錄日誌
    • 檢查資料庫是否為存檔日誌模式
    • 檢查資料庫是否處於開啟模式
    • 檢查資料庫是否為主要資料庫角色
    執行此命令:
    select log_mode, FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE from v$database ;
    執行結果看起來像這樣:
    LOG_MODE              FORCE_LOGGING               FLASHBACK_ON               OPEN_MODE                 DATABASE_ROLE
    ----------------      ------------------------   ----------------------     --------------------        -----------------------
    ARCHIVELOG            YES                         YES                        READ WRITE                  PRIMARY
  2. 執行此命令,檢查自動待命檔案管理是否設為自動:
    show parameter standby_file_management
    執行結果看起來像這樣:
    NAME                                          TYPE          VALUE
    ------------------------------------          -----------  ----------
    standby_file_management                       string       AUTO
  3. 設定代理程式組態檔:
    show parameter dg_broker_config_file1;
    執行結果看起來像這樣:
    NAME                                          TYPE          VALUE
    ------------------------------------         ----------- ------------------------------
    dg_broker_config_file1                        string        /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/dr1dbuks_898_lhr.dat
    

    然後輸入此命令:

    show parameter dg_broker_config_file2;
    執行結果看起來像這樣:
    
    NAME                                                     TYPE          VALUE
    ------------------------------------         ----------- ------------------------------
    dg_broker_config_file2                             string          /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/dr2dbuks_898_lhr.dat
  4. 啟用資料保全中介:
    show parameter dg_broker_start
    執行結果看起來像這樣:
    NAME                                             TYPE         VALUE
    ------------------------------------            ----------- --------------
    dg_broker_start                                  boolean      FALSE
    然後輸入下列指令:
    alter system set dg_broker_start=true scope=both;
    
    show parameter dg_broker_start
    執行結果看起來像這樣:
    NAME                                             TYPE        VALUE
    ------------------------------------            ----------- --------------
    dg_broker_start                                  boolean     TRUE
  5. 從命令提示字元 (例如 [oracle@ldbuksdr ]$) 中,記下清單伺服器狀態:
    lsnrctl status
  6. 注意資料庫組態詳細資訊:
    srvctl config database -d db_unique_name
  7. 請注意 tns 項目:
    cat $ORACLE_HOME/network/admin/tnsnames.ora
  8. 請注意 sqlnet.ora 輸出:
    cat $ORACLE_HOME/network/admin/sqlnet.ora
  9. 輸入下列命令,將「密碼檔」複製到 /tmp 位置的待命資料庫系統:
    cd .ssh
    scp -i private_key /tmp/orapw<sid> opc@ip_standby_vm:/tmp/orapwsid   
  10. 尋找公事包檔案並將其複製到 /tmp 位置的待命資料庫系統:
    select CON_ID, WRL_PARAMETER, WRL_TYPE, STATUS, WALLET_TYPE from V$ENCRYPTION_WALLET;
    執行結果看起來像這樣:
    CON_ID         WRL_PARAMETER                                                                      STATUS       WALLET_TYPE
    ----------    ------------------------------------------------------------------------------     ------------  ------------ ----------------------------
    1              /opt/oracle/dcs/commonstore/wallets/dbuks_898_lhr/tde/                             OPEN          AUTOLOGIN
    2                                                                                                 OPEN          AUTOLOGIN
    3                                                                                                 OPEN          AUTOLOGIN
    
    接著輸入:
    cd /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde
    ls -ltra
    
    您應該會看到像這樣的內容:
    -rw------- 1 oracle asmadmin  5467 Jun 19 18:59 ewallet.p12
    -rw------- 1 oracle asmadmin  5512 Jun 19 18:59 cwallet.sso
    
    然後輸入這些命令 (其中 db_unique_name 是公事包資料庫的唯一名稱):
    
    [oracle@ ~]$ cp /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12/tmp/cwallet.p12
    cp /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.sso/tmp/cwallet.sso
    chmod 777 /tmp/ewallet.p12
    chmod 777 /tmp/cwallet.sso
    scp -i private_key /tmp/ewallet.p12 opc@ip_standby_vm:/tmp/ewallet.p12
    scp -i private_key /tmp/cwallet.sso opc@ip_standby_vm:/tmp/cwallet.sso.
  11. 設定靜態監聽器。
    起始待命資料庫時需要靜態監聽器。當資料庫關閉時,靜態監聽器會啟用與執行處理的遠端連線,讓您能夠使用 Oracle Data Guard 來啟動執行處理。請確定 listener.ora 檔案中沒有分行符號或空格。

    在主要資料庫上,附加 listener.ora 檔案中的 SID_LIST_LISTENER 檔案,以包含主要資料庫的資料庫唯一名稱、Oracle 本位目錄和 Oracle 系統 ID (SID)。

    lsnrctl status 
    vi listener.ora 
    將下列項目新增至 listener.ora,其中:
    • DB_UNIQUE_NAME 是主要資料庫的唯一名稱。
    • ORACLE_HOME 是主要資料庫的本機 Oracle 本位目錄。
    • ORACLE SID 是主要資料庫的 SID。
    SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=DB_UNIQUE_NAME)(ORACLE_HOME=ORACLE_HOME) 
    (SID_NAME = ORACLE SID)))
    項目的外觀應該如下 (您的 GLOBAL_DBNAMEORACLE_HOMESID_NAME 項目會有所不同):
    SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com)
    (ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1)(SID_NAME=dbuks)))
    重新載入監聽器並檢查其狀態。
    lsnrctl reload
    lsnrctl status
  12. 設定 tns 項目。
    您需要主要和待命 tnsnames.ora 檔案中每個資料庫的項目,以確保正確的重做傳輸。由於資料庫之間沒有 DNS 可將伺服器名稱解析為 IP 位址,因此會使用 IP 位址。使用以下範例取代與配置相關的值。Oracle Real Application Clusters (Oracle RAC) 組態無法解析掃描監聽器名稱;因此,您必須使用位址清單來定義所有節點。之後將會新增這些項目,起始執行處理只能在 tns 項目中列出一個 IP 位址,確保「Oracle 復原管理程式 (RMAN)」一律連線至相同的節點。
    [oracle@~]$ cd $ORACLE_HOME/network/admin 
    [oracle@~]$ vi tnsnames.ora
    tnsnames.ora 檔案中的項目應該如下所示:
    DBUKS_R2J_AMS=(DESCRIPTION=(SDU=65536)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3)
    (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.91.0.177)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)
    (SERVICE_NAME=dbuks_r2j_ams.odsp083156.cvcn.oraclevcn.com)(UR=A))) 
    
    DBUKS_898_LHR=(DESCRIPTION=(SDU=65535)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3)
    (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.90.0.246)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)
    (SERVICE_NAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com)(UR=A)))

準備待命資料庫

接下來,請依靠待命資料庫。

  1. 手動刪除 Oracle Database for Azure 工具建立的資料庫。
    刪除待命資料庫之前,請先儲存目前的 db_unique_name,並記下之後將使用的公事包位置。下列查詢提供公事包位置的詳細資訊。
    1. 從 sqlplus 命令提示字元輸入::
      select * from V$ENCRYPTION_WALLET; 
    2. 接著,準備 rm_dbfiles.sql 指令碼以移除資料庫相關檔案:
      srvctl config database -d db_unique_name
    3. 執行下列命令檔以關閉您建立為待命資料庫的資料庫並移除資料庫檔案:
      vi rm_dbfiles.sql 
      set heading off linesize 999 pagesize 0 feedback off trimspool on 
      spool /home/oracle/demo/files.lst 
      select 'asmcmd rm '||name from v$datafile union all select 'asmcmd rm '||name from v$tempfile union all select 'asmcmd rm '||member from v$logfile; 
      spool off 
      create pfile='/home/oracle/demo/ORACLE_UNQNAME.pfile' from spfile; 
      exit
      
    4. 然後,以系統 DBA 的身分移至 sqlplus 提示:
      sqlplus "/ as sysdba"
      然後執行這些命令:
      @rm_dbfiles.sql
      exit
    5. 接下來,授予讀取、寫入及執行的權限 (其中 db_unique_name 是受影響資料庫的唯一名稱):
      chmod 777 files.lst
      srvctl stop database -d db_unique_name
    6. 儲存並執行命令檔:
      ./files.lst 
    入門資料庫的所有檔案現在都已移除。
  2. /tmp 中從主要資料庫收到的密碼檔和公事包檔案複製到待命資料庫資料庫系統上的個別位置。
    1. 將 /tmp 中收到的資料庫密碼檔和公事包檔案從主要資料庫複製到待命資料庫資料庫系統上的個別位置 (其中 orapwsid 是 SID 密碼):
      sudo cp /tmp/orapwsid $ORACLE_HOME/dbs/orapwsid 
      舉例而言:
      sudo ls -ltra /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks 
      執行結果應該和下列類似:
      
      -rw-r-----1 oracle oinstall 2048 Jul3 13:42 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
    2. 確認密碼檔的 md5sum 輸出與「主要」和「待命」(其中 orapwsid 是 SID 密碼):
      md5sum /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwsid 
      主要資料庫的輸出應該和下列類似 (其中 orapwsidorapwdbuks):
      
      b3895fa6357471f80c6e0f4ac16fdc23 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks 
      
      以及針對待命資料庫:
      
      b3895fa6357471f80c6e0f4ac16fdc23 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
    3. 移除現有的公事包檔案,並將公事包檔案從 /tmp 複製到 TDE 位置 (其中 db_unique_name 是受影響資料庫的唯一名稱):
      [oracle@ ~]$ cd /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/
      rm ewallet.p12 cwallet.sso
      sudo cp /tmp/ewallet.p12 /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12
      sudo cp /tmp/cwallet.sso /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.ss
      chown oracle:asmadmin /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12
      sudo chown oracle:asmadmin /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.sso
  3. 設定靜態監聽器:
    1. 在 OCI 的待命資料庫上,附加 SID_LIST_LISTENER 檔案以包含資料庫唯一名稱、OCI 的 Oracle 本位目錄,以及主要資料庫的 Oracle 系統 ID (SID)。
      lsnrctl status
      vi listener.ora
    2. 將下列項目新增至 listener.ora 檔案,其中:
      • DB_UNIQUE_NAME 是主要資料庫的名稱。
      • ORACLE_HOME 是主要資料庫的本機 Oracle 本位目錄。
      • ORACLE SID 是主要資料庫的 SID。
       SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=DB_UNIQUE_NAME)(ORACLE_HOME=ORACLE_HOME) 
      (SID_NAME = ORACLE_SID)))
      例如,該項目看起來應該類似下面:
      SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME= dbuks_r2j_ams. odsp083156.cvcn.oraclevcn.com)
      (ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1)(SID_NAME=dbuks))) 
    3. 重新載入監聽器與檢查狀態:
      lsnrctl reload 
      lsnrctl status
  4. 設定 tns 項目:
    cd $ORACLE_HOME/network/admin
    vi tnsnames.ora
    tnsnames.ora 檔案中的項目應該如下所示:
     DBUKS_R2J_AMS=(DESCRIPTION=(SDU=65536)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3)
    (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.91.0.177)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)
    (SERVICE_NAME=dbuks_r2j_ams.odsp083156.cvcn.oraclevcn.com)(UR=A))) 
    
    DBUKS_898_LHR=(DESCRIPTION=(SDU=65535)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3)
    (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.90.0.246)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)
    (SERVICE_NAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com)(UR=A)))