準備部署拓樸
為了讓 Data Guard 正常運作,不同區域中的兩個資料庫都必須通訊。因此,您必須透過個別的 DRG 在 OCI 中的兩個區域之間設定遠端對等互連連線。DRG 是由 OracleDB 建立的 Azure 設定,因此您只需要在現有的 DRG 之間建立遠端對等互連連線。
安裝網路
若要設定網路,請執行下列步驟
- 設定 Azure VM 的網路連線,以及 Azure 資料庫系統的 OracleDB。
- 確定您有 Azure VM 上 Oracle DB 系統的 ssh 私密金鑰。
- 測試 Azure VM 與 Azure 資料庫系統之 OracleDB 之間的連線。
- 設定 OCI 中資料庫系統的網路。
- 首先,瀏覽至區域 1 中資料庫系統的 VCN 詳細資訊,選取動態路由閘道連附項,然後選取 DRG 名稱,將 DRG 的詳細資訊載入區域 1。然後,選取遠端對等連線附件。在第二個瀏覽器視窗中,區域 2 的執行方式完全相同。
- 接著,在這兩個區域中,選取建立遠端對等互連連線以建立 RPC。
- 建立這兩個 RPC 時,請選取區域 1 中的 RPC 名稱,然後複製 OCID。
- 在區域 2 中,選取 RPC 名稱,然後選取建立連線。選取區域 1 (連線位置) 的正確區域名稱,並且提供區域 1 (您在上一個步驟複製) 中 RPC 的 OCID。建立連線之後的幾分鐘,「對等狀態」應為「對等」。
- 接下來,允許兩個區域中 VCN 之間的流量。瀏覽至 VCN 詳細資訊並選取預設安全清單。選取新增傳入規則即可允許來自相對 VCN 之 CIDR 範圍的流量。
- 最後,從 Azure 中的 VM 連線至個別的 OCI Base DB 系統。編輯兩個基礎資料庫系統的
tnsnames.ora
檔案,以連線至另一個資料庫。 - 確認
tnsping
可從兩個資料庫系統正常運作至相反的資料庫。
設定適用於 Azure DR 組態的 Oracle Database
若要設定 Azure DR 組態的 Oracle 資料庫,您需要準備主要和次要資料庫,如下所述。
附註:
按一下複製,將命令範例儲存至剪貼簿,以貼到命令行中。請務必將任何variables
取代為您實行的特定值。
準備主要資料庫
若要準備主要資料庫,您必須設定靜態監聽器、更新 tnsnames.ora 檔案,以及設定各種資料庫設定值和參數。
- 從
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
- 執行此命令,檢查自動待命檔案管理是否設為自動:
show parameter standby_file_management
執行結果看起來像這樣:NAME TYPE VALUE ------------------------------------ ----------- ---------- standby_file_management string AUTO
- 設定代理程式組態檔:
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
- 啟用資料保全中介:
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
- 從命令提示字元 (例如
[oracle@ldbuksdr ]$
) 中,記下清單伺服器狀態:lsnrctl status
- 注意資料庫組態詳細資訊:
srvctl config database -d db_unique_name
- 請注意
tns
項目:cat $ORACLE_HOME/network/admin/tnsnames.ora
- 請注意
sqlnet.ora
輸出:cat $ORACLE_HOME/network/admin/sqlnet.ora
- 輸入下列命令,將「密碼檔」複製到
/tmp
位置的待命資料庫系統:cd .ssh
scp -i private_key /tmp/orapw<sid> opc@ip_standby_vm:/tmp/orapwsid
- 尋找公事包檔案並將其複製到
/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.
- 設定靜態監聽器。起始待命資料庫時需要靜態監聽器。當資料庫關閉時,靜態監聽器會啟用與執行處理的遠端連線,讓您能夠使用 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_DBNAME
、ORACLE_HOME
和SID_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
- 設定
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)))
準備待命資料庫
接下來,請依靠待命資料庫。
- 手動刪除 Oracle Database for Azure 工具建立的資料庫。 刪除待命資料庫之前,請先儲存目前的 db_unique_name,並記下之後將使用的公事包位置。下列查詢提供公事包位置的詳細資訊。
- 從 sqlplus 命令提示字元輸入::
select * from V$ENCRYPTION_WALLET;
- 接著,準備
rm_dbfiles.sql
指令碼以移除資料庫相關檔案:srvctl config database -d db_unique_name
- 執行下列命令檔以關閉您建立為待命資料庫的資料庫並移除資料庫檔案:
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
- 然後,以系統 DBA 的身分移至 sqlplus 提示:
sqlplus "/ as sysdba"
然後執行這些命令:@rm_dbfiles.sql
exit
- 接下來,授予讀取、寫入及執行的權限 (其中
db_unique_name
是受影響資料庫的唯一名稱):chmod 777 files.lst
srvctl stop database -d db_unique_name
- 儲存並執行命令檔:
./files.lst
- 從 sqlplus 命令提示字元輸入::
- 將
/tmp
中從主要資料庫收到的密碼檔和公事包檔案複製到待命資料庫資料庫系統上的個別位置。- 將 /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
- 確認密碼檔的 md5sum 輸出與「主要」和「待命」(其中 orapwsid 是 SID 密碼):
主要資料庫的輸出應該和下列類似 (其中 orapwsid 為md5sum /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwsid
orapwdbuks
):
以及針對待命資料庫: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
- 移除現有的公事包檔案,並將公事包檔案從
/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
- 將 /tmp 中收到的資料庫密碼檔和公事包檔案從主要資料庫複製到待命資料庫資料庫系統上的個別位置 (其中 orapwsid 是 SID 密碼):
- 設定靜態監聽器:
- 在 OCI 的待命資料庫上,附加
SID_LIST_LISTENER
檔案以包含資料庫唯一名稱、OCI 的 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)))
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)))
- 重新載入監聽器與檢查狀態:
lsnrctl reload
lsnrctl status
- 在 OCI 的待命資料庫上,附加
- 設定
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)))