- 為內部部署資料庫部署混合 DR 拓樸
- 使用 RMAN 建立待命執行處理
使用 RMAN 建立待命執行處理
您可以使用 Oracle Recovery Manager (RMAN),從主要資料庫建立待命雲端執行處理。
建立存檔日誌
查看內部部署 Oracle 伺服器的日誌模式。如果處於 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 /opt/oracle/product/19c/dbhome_1/dbs/arch Oldest online log sequence 10 Next log sequence to archive 12 Current log sequence 12
- 將所有日誌存檔。
SQL> archive log all;
ORA-00271:there are no logs that need archiving
在 OCI 上建立待命資料庫
您可以使用 Oracle Recovery Manager (RMAN) 來複製 Oracle Cloud Infrastructure (OCI) 上的作用中主要資料庫。或者,您可以從主要資料庫的備份複製。
- 使用
srvctl
公用程式停止資料庫,或使用 SQL*Plus 關閉資料庫。-
$ srvctl stop database -d standby DB_UNIQUE_NAME -o immediate
-
Shutdown immediate;
-
- 連線資料庫。
$ rman target / RMAN> startup nomount;
- 從主要服務回復待命控制檔。在此範例中,ORCLCDB 是主要的內部部署資料庫。
RMAN> restore standby controlfile from service 'ORCLCDB';
- 如果出現下列錯誤訊息,請重新連線至資料庫。
RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of restore command at 09/24/2020 21:10:13 RMAN-06496: must use the TO clause when the database is mounted or open
- 關閉資料庫
RMAN> shutdown;
- 連線資料庫
RMAN> startup nomount;
- 關閉資料庫
- 使用資料庫控制檔 (而非復原目錄) 來回復。
RMAN> restore standby controlfile from service 'ORCLCDB';
輸出將與下列類似:Starting restore at DD-MM-YY using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=182 device type=DISK channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service ORCLCDB channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:02 output file name=/u02/app/oracle/oradata/ORCLCDB_iad1s3/control01.ctl output file name=/u03/app/oracle/fast_recovery_area/ORCLCDB_IAD1S3/control02.ctl Finished restore at DD-MM-YY
- 掛載資料庫。
RMAN> alter database mount;
- 如果出現類似下列的錯誤訊息,請重新連線至資料庫。如果沒有收到錯誤訊息,請移至步驟 8。
Released channel: ORA_DISK_1 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of sql statement command at 09/24/2020 21:13:41 RMAN-06189: current DBID 2822997440 does not match target mounted database (2823031995)
- 關閉資料庫
RMAN> shutdown immediate;
輸出將與下列類似:database dismounted Oracle instance shutdown
- 連線資料庫
RMAN> startup nomount;
輸出將與下列類似:connected to target database (not started) Oracle instance startedTotal System Global Area 14495511760 bytesFixed Size 9151696 bytes Variable Size 1912602624 bytes Database Buffers 12549357568 bytes Redo Buffers 24399872 bytes
- 設定資料庫 ID。
RMAN> set DBID=2823031995;
輸出將與下列類似:executing command: SET DBID
- 關閉資料庫
- 以 OCI 執行處理的 root 身分,將 Oracle 目錄的權限變更為開啟 (
chmod 777
)。[root@drdb opc]# sudo su [root@drdb opc]# cd /opt/ [root@drdb opt]# ls -lrt total 8 drwx------ 7 root root 4096 Sep 12 00:39 zookeeper drwxr-xr-x 6 root root 4096 Sep 12 00:51 oracle [root@drdb opt]# chmod 777 oracle/ [root@drdb opt]# ls -lrt total 8 drwx------ 7 root root 4096 Sep 12 00:39 zookeeper drwxrwxrwx 6 root root 4096 Sep 12 00:51 oracle
- 從主要資料庫 (ORCLCDB) 回復資料庫。
RMAN> restore database from service 'ORCLCDB' section size 5G;
完成交叉檢查備份和交叉檢查複製之後,輸出中就會顯示目錄檔案的清單,類似以下所示:Starting restore at 01-SEP-20 Starting implicit crosscheck backup at 01-SEP-20 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=184 device type=DISK Finished implicit crosscheck backup at 01-SEP-20 Starting implicit crosscheck copy at 01-SEP-20 using channel ORA_DISK_1 Finished implicit crosscheck copy at 01-SEP-20 searching for all files in the recovery area cataloging files... cataloging done List of Cataloged Files ======================= File Name: /u03/app/oracle/fast_recovery_area/ORCLCDB_IAD1S3/archivelog/2020_08_27/o1_mf_1_3_hngo1gl6_.arc File Name: /u03/app/oracle/fast_recovery_area/ORCLCDB_IAD1S3/archivelog/2020_08_27/o1_mf_1_1_hngnvtgb_.arc File Name: /u03/app/oracle/fast_recovery_area/ORCLCDB_IAD1S3/archivelog/2020_08_27/o1_mf_1_2_hngnwdfd_.arc using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service ORCLCDB channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00001 to /opt/oracle/oradata/ORCLCDB/system01.dbf channel ORA_DISK_1: restoring section 1 of 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:26 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service ORCLCDB channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00003 to /opt/oracle/oradata/ORCLCDB/sysaux01.dbf channel ORA_DISK_1: restoring section 1 of 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:15 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service ORCLCDB channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00004 to /opt/oracle/oradata/ORCLCDB/undotbs01.dbf channel ORA_DISK_1: restoring section 1 of 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:08 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service ORCLCDB channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00005 to /opt/oracle/oradata/ORCLCDB/pdbseed/system01.dbf channel ORA_DISK_1: restoring section 1 of 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:07 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service ORCLCDB channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00006 to /opt/oracle/oradata/ORCLCDB/pdbseed/sysaux01.dbf channel ORA_DISK_1: restoring section 1 of 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:08 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service ORCLCDB channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00007 to /opt/oracle/oradata/ORCLCDB/users01.dbf channel ORA_DISK_1: restoring section 1 of 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service ORCLCDB channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00008 to /opt/oracle/oradata/ORCLCDB/pdbseed/undotbs01.dbf channel ORA_DISK_1: restoring section 1 of 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:04 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service ORCLCDB channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00009 to /opt/oracle/oradata/ORCLCDB/ORCLPDB1/system01.dbf channel ORA_DISK_1: restoring section 1 of 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:07 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service ORCLCDB channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00010 to /opt/oracle/oradata/ORCLCDB/ORCLPDB1/sysaux01.dbf channel ORA_DISK_1: restoring section 1 of 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:08 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service ORCLCDB channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00011 to /opt/oracle/oradata/ORCLCDB/ORCLPDB1/undotbs01.dbf channel ORA_DISK_1: restoring section 1 of 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service ORCLCDB channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00012 to /opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf channel ORA_DISK_1: restoring section 1 of 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 Finished restore at 01-SEP-20
- 關閉資料庫。
RMAN> Shutdown immediate;
- 使用「伺服器控制」(
srvctl
) 公用程式或 SQL*Plus 來重新啟動待命資料庫。- 使用
srvctl
公用程式啟動資料庫:srvctl start instance -d standby DB_UNIQUE_NAME -i standby instance name -o mount
- 使用 SQL*Plus 啟動資料庫:
$ ./sqlplus / as sysdba
- 使用
- 掛載資料庫。
SQL> startup mount
輸出將與下列類似:ORACLE instance started. Total System Global Area 1.4496E+10 bytes Fixed Size 9151696 bytes Variable Size 1912602624 bytes Database Buffers 1.2549E+10 bytes Redo Buffers 24399872 bytes Database mounted.
- 更改資料庫。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Database altered.
- 檢視資料庫的角色、繫線編號、序號和動作。
SQL> SELECT ROLE, THREAD#, SEQUENCE#, ACTION FROM V$DATAGUARD_PROCESS;
輸出將與下列類似:ROLE THREAD# SEQUENCE# ACTION ------------------------ ---------- ---------- ------------ post role transition 0 0 IDLE recovery apply slave 0 0 IDLE recovery apply slave 0 0 IDLE recovery apply slave 0 0 IDLE recovery apply slave 0 0 IDLE recovery logmerger 1 7 WAIT_FOR_LOG managed recovery 0 0 IDLE archive redo 0 0 IDLE archive local 0 0 IDLE redo transport timer 0 0 IDLE gap manager 0 0 IDLE archive redo 0 0 IDLE archive redo 0 0 IDLE redo transport monitor 0 0 IDLE log writer 0 0 IDLE 15 rows selected.
- (選擇性) 檢視資料庫名稱和角色。
SQL> select name, database_role from v$database;
輸出將與下列類似:NAME DATABASE_ROLE --------- ---------------- ORCLCDB PHYSICAL STANDBY
- 以
sysdba
身分清除所有線上待命redo
日誌$ sqlplus “/ as sysdba” SQL> alter system set db_create_online_log_dest_1=<DATA Disk group>; SQL> set pagesize 0 feedback off linesize 120 trimspool on SQL> spool /tmp/clearlogs.sql SQL> select distinct 'alter database clear logfile group '||group#||';' from v$logfile; SQL> spool off SQL> @/tmp/clearlogs.sql SQL> select member from v$logfile;
新增 RAC 執行處理至 tnsnames.ora
檔案
對於 Oracle Real Application Clusters (Oracle RAC),請將 Oracle RAC 執行處理新增至 tnsnames.ora
,然後重新啟動監聽器。無法以混合組態中的任一方向解析掃描名稱,因此必須設定位址清單以提供高可用性。
- 編輯內部部署資料庫主機上的
TNSNAMES.ORA
檔案。Primary db_unique_name = (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 = PrimaryDB Node 1IP address)(PORT = {1521|port#})) (ADDRESS = (PROTOCOL = TCP)(HOST = StandbyDB Node 2IP address)(PORT = {1521|port#})) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = Primary_db_SID) (UR=A) )) Standby db_unique_name = (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 = StandbyDB Node 1IP address)(PORT = {1521|port#})) (ADDRESS = (PROTOCOL = TCP)(HOST = StandbyDB Node 2IP address)(PORT = {1521|port#})) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = Primary_db_SID) (UR=A) ))
- 編輯 Oracle Cloud Infrastructure (OCI) 中待命資料庫主機上的
TNSNAMES.ORA
檔案。Standby db_unique_name = (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 = StandbyDB Node 1IP address)(PORT = {1521|port#})) (ADDRESS = (PROTOCOL = TCP)(HOST = StandbyDB Node 2IP address)(PORT = {1521|port#})) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = Primary_db_SID) (UR=A) )) <Primary db_unique_name> = (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 = PrimaryDB Node 1IP address)(PORT = {1521|port#})) (ADDRESS = (PROTOCOL = TCP)(HOST = StandbyDB Node 2IP address)(PORT = {1521|port#})) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = Primary_db_SID) (UR=A) ))