- 部署內部部署 Oracle Exadata 的混合 DR 拓樸
- 建立待命執行處理
建立待命執行處理
從主要資料庫建立待命雲端執行處理。
建立存檔日誌
查看內部部署 Oracle Exadata Database Machine 的日誌模式。如果處於 NOARCHIVELOG
模式,請將它變更為 ARCHIVELOG
模式以建立存檔日誌。
- 檢視內部部署伺服器的日誌模式。
SQL> select log_mode from v$database;
當日誌模式處於NOARCHIVELOG
模式時,輸出看起來會類似下列內容:LOG_MODE ------------ NOARCHIVELOG
- 關閉內部部署執行處理。
SQL> shutdown immediate;
輸出看起來會像下面這樣:Database closed. Database dismounted. ORACLE instance shut down.
- 掛載內部部署資料庫。
SQL> startup mount;
輸出看起來會像下面這樣:ORACLE instance started. Total System Global Area 4966054520 bytes Fixed Size 9144952 bytes Variable Size 922746880 bytes Database Buffers 4026531840 bytes Redo Buffers 7630848 bytes Database mounted.
- 更改資料庫存檔日誌,然後開啟資料庫。
SQL> alter database archivelog;
SQL> alter database open;
- 將日誌模式變更為
ARCHIVELOG
。SQL> select log_mode from v$database;
LOG_MODE ------------ ARCHIVELOG
- 顯示存檔日誌清單。
SQL> archive log list;
輸出看起來會像下面這樣:Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 4 Next log sequence to archive 7 Current log sequence 7
- 存檔所有日誌。
SQL> archive log all;
ORA-00271:there are no logs that need archiving
在 OCI 上建立待命資料庫
建立待命 Oracle Database Exadata Cloud Service 資料庫。
- 使用
srvctl
公用程式停止或關閉 Oracle Database Exadata Cloud Service 資料庫。-
$ srvctl stop database -d standby DB_UNIQUE_NAME -o immediate
-
$ srvctl stop database -d DB1_phx3g7 -o immediate
-
- 連線至資料庫。
SQL> startup nomount;
- 在主要內部部署 Oracle Exadata Database Machine 上,執行下列一系列命令以強制記錄和定義日誌檔。
SQL> alter database force logging;
SQL> set linesize 500 pages 0 SQL> col value for a90 SQL> col name for a50 SQL> select name, value from v$parameter where name in ('db_name','db_unique_name','log_archive_config', 'log_archive_dest_1','log_archive_dest_2','log_archive_dest_state_1','log_archive_de st_state_2', 'remote_login_passwordfile', 'log_archive_format','log_archive_max_processes','fal_server','db_file_name_convert' ,'log_file_name_convert', 'standby_file_management');
輸出看起來會像下面這樣:db_file_name_convert log_file_name_convert log_archive_dest_1 location=USE_DB_RECOVERY_FILE_DEST valid_for=(ALL_LOGFILES,ALL_ROLES) MAX_FAILURE=1 REOPEN =5 DB_UNIQUE_NAME=db1 ALTERNATE=LOG_ARCHIVE_DEST_2 log_archive_dest_2 location=+DATAC1 valid_for=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=db1 ALTERNATE=LOG_ARCHI VE_DEST_1 log_archive_dest_state_1 ENABLE log_archive_dest_state_2 ALTERNATE fal_server log_archive_config log_archive_format %t_%s_%r.dbf log_archive_max_processes 4 standby_file_management MANUAL remote_login_passwordfile EXCLUSIVE db_name db1 db_unique_name db1 14 rows selected.
- 設定待命檔案管理。
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SID='*';
- 在主要內部部署 Oracle Exadata Database Machine 上,為日誌存檔和待命管理定義下列參數。
LOG_ARCHIVE_CONFIG='DG_CONFIG=(PROD1,STAND1)' LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PROD1' LOG_ARCHIVE_DEST_2='SERVICE=STAND1 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STAND1' LOG_ARCHIVE_DEST_STATE_1=ENABLE LOG_ARCHIVE_DEST_STATE_2=ENABLE REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE LOG_ARCHIVE_FORMAT=%t_%s_%r.arc LOG_ARCHIVE_MAX_PROCESSES=8 FAL_SERVER=STAND1 DB_FILE_NAME_CONVERT='STAND1',' PROD1' LOG_FILE_NAME_CONVERT= 'STAND1',' PROD1' STANDBY_FILE_MANAGEMENT=AUTO
下列範例包含參數值:ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB1, DB1_phx3g7)'; ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DB1'; ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=DB1_phx3g7 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB1_phx3g7’; ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE; ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER; ALTER SYSTEM SET FAL_SERVER=DB1_phx3g7; ALTER SYSTEM SET FAL_CLIENT=DB1; ALTER SYSTEM SET DB_FILE_NAME_CONVERT='DB1_phx3g7','DB1' scope=spfile; ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='DB1_phx3g7','DB1' scope=spfile; ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
- 在主要內部部署 Oracle Exadata Database Machine 上,以
sysdba
身分登入,然後執行下列一系列命令以強制記錄日誌。$ sqlplus / as sysdba
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB1, DB1_phx3g7)'; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DB1'; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=DB1_phx3g7 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB1_phx3g7'; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER; System altered. SQL> ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE;
ERROR at line 1: ORA-02095: specified initialization parameter cannot be modified SQL> ALTER SYSTEM SET FAL_SERVER=DB1_phx3g7; System altered. SQL> ALTER SYSTEM SET FAL_CLIENT=DB1; System altered. SQL> ALTER SYSTEM SET DB_FILE_NAME_CONVERT='DB1_phx3g7','DB1' scope=spfile; System altered. SQL> ALTER SYSTEM SET LOG_FILE_NAME_CONVERT= 'DB1_phx3g7','DB1' scope=spfile; System altered. SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO; System altered.
請勿在主要內部部署 Oracle Exadata Database Machine 上建立pfile
。請改用 Oracle Database Exadata Cloud Service 建立的預設Pfile
。 - 在待命 Oracle Database Exadata Cloud Service 上,以
sysdba
身分登入,然後啟動執行處理而不掛載資料庫。$ sqlplus / as sysdba
SQL> startup nomount;
- 在待命 Oracle Database Exadata Cloud Service 上,執行下列一系列的命令來定義伺服器、記錄日誌和檔案管理。
alter system set fal_server='DB1' scope =spfile; alter system set fal_client='DB1_PHX3G7' scope =spfile; alter system set log_archive_config='DG_CONFIG=(DB1, DB1_phx3g7)' scope =spfile; alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DB1_PHX3G7' scope =spfile; alter system set log_archive_dest_2='SERVICE=DB1 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB1' scope =spfile; alter system set log_archive_dest_state_1='ENABLE' scope =spfile; alter system set log_archive_dest_state_2='ENABLE' scope =spfile; alter system set log_archive_format='%t_%s_%r.dbf' scope =spfile; alter system set log_file_name_convert='DB1','DB1_phx3g7' scope =spfile; alter system set db_file_name_convert='DB1','DB1_phx3g7' scope =spfile; alter system set remote_login_passwordfile='exclusive' scope =spfile; alter system set standby_file_management='AUTO' scope =spfile;
- 在待命 Oracle Database Exadata Cloud Service 上,使用 Oracle Recovery Manager (RMAN ) 在雲端定義測試目標和待命資料庫,然後執行 RMAN 來建立待命資料庫。
rman target sys/Test_Dr_123@DB1 auxiliary sys/Test_Dr_123@DB1_Phx3g7
輸出與下列類似:connected to target database: DB1 (DBID=1657313530) connected to auxiliary database: DB1 (not mounted)
RMAN> run
- 在待命 Oracle Database Exadata Cloud Service 上,以
sysdba
身分登入,然後中斷與階段作業的連線。$ sqlplus / as sysdba
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
- 在待命 Oracle Database Exadata Cloud Service 上,檢視日誌以驗證媒體復原是否正在傳輸中。
[oracle@exacs82-vm3sv1 DB11]$ pwd /u02/app/oracle/diag/rdbms/db1_phx3g7/DB11
[oracle@exacs82-vm3sv1 trace]$ tail -f alert_DB11.log
輸出將包含類似以下的行:PR00 (PID:253670): Media Recovery Waiting for T-1.S-125 (in transit)
- 在主要內部部署 Oracle Exadata Database Machine 上,以
sysdba
身分登入 sqlplus,然後執行下列一系列的 SQL 命令以切換日誌檔。$ sqlplus / as sysdba
SQL> alter system switch logfile; SQL> / SQL> / SQL> /
- 在待命 Oracle Database Exadata Cloud Service 上,以
sysdba
身分登入,然後執行下列一系列的命令。SQL> SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received", APPL.SEQUENCE# "Last Sequence Applied", (ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference" FROM (SELECT THREAD#,SEQUENCE# FROM V$ARCHIVED_LOG WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)) ARCH,(SELECT THREAD# ,SEQUENCE# FROM V$LOG_HISTORY WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$LOG_HISTORY GROUP BY THREAD#)) APPL WHERE ARCH.THREAD# = APPL.THREAD# ORDER BY 1;
Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 124 124 0 2 26 26 0
SQL> /
Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 124 124 0 2 26 26 0
SQL> /
Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 130 128 2 2 27 27 0
SQL> /
Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 130 128 2 2 27 27 0
SQL> /
Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 130 130 0 2 28 28 0
- 在待命 Oracle Database Exadata Cloud Service 上,以
sysdba
身分登入,然後執行下列一系列的命令。SQL> alter database recover managed standby database cancel;
SQL> show parameter cluster
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ cdb_cluster boolean FALSE cdb_cluster_name string cluster_database boolean FALSE cluster_database_instances integer 1 cluster_interconnects string 192.0.2.22:192.0.2.23 SQL> alter system set cluster_database=TRUE scope=spfile; System altered.
SQL> alter system set cluster_database=TRUE scope=spfile;
SQL> show parameter cluster;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ cdb_cluster boolean FALSE cdb_cluster_name string cluster_database boolean FALSE cluster_database_instances integer 1 cluster_interconnects string 192.0.2.22:192.0.2.23 SQL> / System altered.
SQL> show parameter pluggable;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ enable_pluggable_database boolean FALSE SQL> shutdown; ORA-01109: database not open Database dismounted. ORACLE instance shut down.
- 在待命 Oracle Database Exadata Cloud Service 上,顯示資源的狀態並確認它們都是線上狀態。
[grid@exacs82-vm3sv1 ~]$ crsctl stat res
輸出將包括每個資源的類型、目標狀態和狀態。例如:NAME=ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup) TYPE=ora.asm_listener.type TARGET=ONLINE , ONLINE STATE=ONLINE on exacs82-vm3sv1, ONLINE on exacs82-vm3sv2 NAME=ora.DATAC1.ACFSVOL01.advm TYPE=ora.volume.type TARGET=ONLINE , ONLINE STATE=ONLINE on exacs82-vm3sv1, ONLINE on exacs82-vm3sv2 NAME=ora.DATAC1.dg(ora.asmgroup) TYPE=ora.diskgroup.type TARGET=ONLINE , ONLINE STATE=ONLINE on exacs82-vm3sv1, ONLINE on exacs82-vm3sv2 NAME=ora.LISTENER.lsnr TYPE=ora.listener.type TARGET=ONLINE , ONLINE STATE=ONLINE on exacs82-vm3sv1, ONLINE on exacs82-vm3sv2 . . .
- 在待命 Oracle Database Exadata Cloud Service 上,啟動並掛載資料庫。
[oracle@exacs82-vm3sv1 ~]$ source DB1.env [oracle@exacs82-vm3sv1 ~]$ srvctl start database -db db1_phx3g7 -startoption mount
- 在待命 Oracle Database Exadata Cloud Service 的節點 1 上,以
sysdba
身分登入,將資料庫掛載至open_mode
,然後結束。oracle@exacs82-vm3sv1
SQL> select open_mode from v$database;
輸出與下列類似:OPEN_MODE -------------------- MOUNTED
SQL> exit
- 在待命 Oracle Database Exadata Cloud Service 的節點 2 上,以
sysdba
身分登入,將資料庫掛載至open_mode
,然後結束。oracle@exacs82-vm3sv2
SQL> select open_mode from v$database;
輸出與下列類似:OPEN_MODE -------------------- MOUNTED
SQL> exit
- 中斷階段作業連線。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
輸出與下列類似: - 在主要內部部署 Oracle Exadata Database Machine 上,對日誌檔執行下列 SQL 命令序列。
SQL> alter database force logging;
SQL> /
SQL> /
- 在待命 Oracle Database Exadata Cloud Service 上,以
sysdba
身分登入,然後執行下列一系列的命令。SQL> SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received", APPL.SEQUENCE# "Last Sequence Applied", (ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference" FROM (SELECT THREAD#,SEQUENCE# FROM V$ARCHIVED_LOG WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)) ARCH,(SELECT THREAD# ,SEQUENCE# FROM V$LOG_HISTORY WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$LOG_HISTORY GROUP BY THREAD#)) APPL WHERE ARCH.THREAD# = APPL.THREAD# ORDER BY 1;
Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 161 161 0 2 41 41 0
SQL> /
Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 161 161 0 2 41 41 0
SQL> /
Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 161 161 0 2 41 41 0
SQL> /
Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 163 161 2 2 41 41 0
SQL> /
Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 163 161 2 2 41 41 0
SQL> /
Thread Last Sequence Received Last Sequence Applied Difference ---------- ---------------------- --------------------- ---------- 1 163 163 0 2 42 42 0
- 在主要內部部署 Oracle Exadata Database Machine 上,確認
tnsnames.ora
檔案已正確設定下列項目:
驗證內部部署資料庫 (db1) 的DB1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = exa11-scan1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = db1.us.osc.oracle.com) (INSTANCE_NAME = db12) ) ) DB1_phx3g7 = (DESCRIPTION = (SDU = 65536) (RECV_BUF_SIZE = 134217728) (SEND_BUF_SIZE = 134217728) (ADDRESS_LIST = (CONNECT_TIMEOUT = 3) (RETRY_COUNT = 3) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.255.195.136)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DB1_phx3g7.datasubnetactiv.oscphevcn.oraclevcn.com) (UR = A) ) )
tnsnames
:[oracle@exa11db01 admin]$ tnsping db1
驗證 Oracle Database Exadata Cloud Service 例項 ( DB1_phx3g7 ) 的Used parameter files: /u01/app/oracle/product/19.0.0.0/dbhome_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = exa11-scan1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = db1.us.osc.oracle.com) (INSTANCE_NAME = db11))) OK (0 msec)
tnsnames
:[oracle@exa11db01 admin]$ tnsping DB1_phx3g7
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 05-FEB-2021 16:19:15 Copyright (c) 1997, 2020, Oracle. All rights reserved. Used parameter files: /u01/app/oracle/product/19.0.0.0/dbhome_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (SDU = 65536) (RECV_BUF_SIZE = 134217728) (SEND_BUF_SIZE = 134217728) (ADDRESS_LIST = (CONNECT_TIMEOUT = 3) (RETRY_COUNT = 3) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.255.195.136)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DB1_phx3g7.datasubnetactiv.oscphevcn.oraclevcn.com) (UR = A))) OK (40 msec)
- 在待命 Oracle Database Exadata Cloud Service 上,確認
tnsnames.ora
檔案已正確設定下列項目:
驗證內部部署資料庫 (db1) 的db1 = (DESCRIPTION = (SDU=65536) (RECV_BUF_SIZE=134217728) (SEND_BUF_SIZE=134217728) (ADDRESS_LIST = (CONNECT_TIMEOUT=3)(RETRY_COUNT=3) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.136.74.18)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = db1.us.osc.oracle.com) (UR=A) ) ) DB1_phx3g7 = (DESCRIPTION = (SDU = 65536) (RECV_BUF_SIZE = 134217728) (SEND_BUF_SIZE = 134217728) (ADDRESS_LIST = (CONNECT_TIMEOUT = 3) (RETRY_COUNT = 3) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.255.195.136)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DB1_phx3g7.datasubnetactiv.oscphevcn.oraclevcn.com) (INSTANCE_NAME = DB12) (UR = A) ) )
tnsnames
:[oracle@exacs82-vm3sv2 DB1]$ tnsping db1
驗證 Oracle Database Exadata Cloud Service 例項 ( DB1_phx3g7 ) 的TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 05-FEB-2021 16:34:59 Copyright (c) 1997, 2020, Oracle. All rights reserved. Used parameter files: /u02/app/oracle/product/19.0.0.0/dbhome_5/network/admin/DB1/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (SDU=65536) (RECV_BUF_SIZE=134217728) (SEND_BUF_SIZE=134217728) (ADDRESS_LIST = (CONNECT_TIMEOUT=3)(RETRY_COUNT=3) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.136.74.18)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = db1.us.osc.oracle.com) (UR=A))) OK (40 msec)
tnsnames
:[oracle@exacs82-vm3sv2 DB1]$ tnsping DB1_phx3g7
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 05-FEB-2021 16:35:15 Copyright (c) 1997, 2020, Oracle. All rights reserved. Used parameter files: /u02/app/oracle/product/19.0.0.0/dbhome_5/network/admin/DB1/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (SDU = 65536) (RECV_BUF_SIZE = 134217728) (SEND_BUF_SIZE = 134217728) (ADDRESS_LIST = (CONNECT_TIMEOUT = 3) (RETRY_COUNT = 3) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.255.195.136)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DB1_phx3g7.datasubnetactiv.oscphevcn.oraclevcn.com) (INSTANCE_NAME = DB12) (UR = A))) OK (0 msec)