寫在前面:
最終實現環境:11.2.0.4版本 2節點RAC + 1節點DG
本文旨在弄清楚整個搭建過程中涉及到的基礎概念;
本文安裝maximum performance mode(最大性能模式)也是DG默認的數據保護模式;
前提環境:
1).主庫已安裝11.2.0.4版本 RAC數據庫
#public ip
192.168.56.150 jyrac1
192.168.56.152 jyrac2
#private ip
10.10.10.11 jyrac1-priv
10.10.10.12 jyrac2-priv
#virtual ip
192.168.56.151 jyrac1-vip
192.168.56.153 jyrac2-vip
#scan ip
192.168.56.160 jyrac-scan
2).備庫已安裝同版本軟件、監聽程序
192.168.56.158 jydg
1.主庫准備工作
數據庫設置為force logging模式SQL> alter database force logging;
數據庫設置為歸檔模式(RAC數據庫更改歸檔模式參見文檔:How To Enable/Disable Archive Logging In RAC Environment for 10.2 and higher version (文檔 ID 1186764.1))
SQL> alter database archivelog;
檢查
SQL> select inst_id, name, open_mode, log_mode, force_logging from gv$database;
2.物理備庫准備工作
確保已成功安裝同版本數據庫軟件、監聽程序; 配置靜態監聽,這里的ORACLE_HOME是 /u01/app/oracle/product/11.2.0/dbhome_1SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = jyzhao_s)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = jyzhao_s)
)
)
3.創建物理備庫
**3.1 配置tnsnames.ora** 主庫上配置【@all rac nodes 】:JYZHAO_S =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.158)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jyzhao_s)
)
)
JYZHAO1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.151)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jyzhao)
)
)
JYZHAO2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.153)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jyzhao)
)
)
備庫上配置:
JYZHAO_S =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.158)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jyzhao_s)
)
)
JYZHAO =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.160)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jyzhao)
)
)
JYZHAO1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.151)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jyzhao)
)
)
JYZHAO2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.153)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jyzhao)
)
)
3.2 修改主庫參數
FAL_CLIENT(確定11g dg官方安裝文檔中這個參數沒有再提,因此只需要設定fal_server)
FAL_CLIENT specifies the FAL (fetch archive log) client name that is used by the FAL service, configured through the FAL_SERVER initialization parameter, to refer to the FAL client. The value is an Oracle Net service name, which is assumed to be configured properly on the FAL server system to point to the FAL client (standby database).
FAL_SERVER specifies the FAL (fetch archive log) server for a standby database. The value is an Oracle Net service name, which is assumed to be configured properly on the standby database system to point to the desired FAL server.
log_archive_config
LOG_ARCHIVE_CONFIG enables or disables the sending of redo logs to remote destinations and the receipt of remote redo logs, and specifies the unique database names (DB_UNIQUE_NAME) for each database in the Data Guard configuration.
log_archive_dest_3(這里的日志傳輸鏈路選擇log_archive_dest_3,根據需求規范可改選其他的)
查看相關日志傳輸鏈路是否存在錯誤信息:
select dest_id, dest_name, error from v$archive_dest where dest_id=3;
select inst_id, error from gv$archive_dest where dest_id=3;
例如:
在主庫上對部分參數做適當的修改調整。
alter system set FAL_SERVER='jyzhao_s';
alter system set log_archive_config= 'DG_CONFIG=(jyzhao,jyzhao_s)';
alter system set log_archive_dest_3='SERVICE=jyzhao_s LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=jyzhao_s';
在11.2官檔中,提到其中LGWR參數已過時,Specify SYNC or ASYNC. ASYNC is the default if neither attribute is specified.
--設置db_unique_name, log_archive_config(這里主庫的db_unique_name,出於對現有的生產環境最小影響考慮沒有改)
alter system set db_unique_name='jyzhao' scope=spfile;
alter system set log_archive_config= 'DG_CONFIG=(jyzhao,jyzhao_s)';
--歸檔日志目錄
alter system set log_archive_dest_3='SERVICE=jyzhao_s LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=jyzhao_s';
select dest_id, dest_name, error from v$archive_dest where dest_id=3;
--歸檔日志文件命名規則
--DG的fal_server和fal_client
alter system set fal_server='jyzhao_s';
--設置standby_file_management為自動
alter system set standby_file_management=AUTO;
--設置備庫日志文件組,數量一般為目標庫日志文件組+1(當原環境是RAC環境時,如何修改?)
alter database add standby logfile thread 1 group 11 size 50M;
alter database add standby logfile thread 1 group 12 size 50M;
alter database add standby logfile thread 1 group 13 size 50M;
alter database add standby logfile thread 2 group 21 size 50M;
alter database add standby logfile thread 2 group 22 size 50M;
alter database add standby logfile thread 2 group 23 size 50M;
3.3 創建備庫密碼文件
主庫密碼文件拷貝到備庫相應的目錄下
scp $ORACLE_HOME/dbs/orapw* xxx.xxx.xxx.xxx:/.../dbs/
[oracle@jyrac2 dbs]$ scp $ORACLE_HOME/dbs/orapwjyzhao2 192.168.56.158:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwjyzhao_s
--確認 orapwjyzhao_s 確認standby database的db_name為jyzhao; 然后db_unique_name, service_names, instance_name都是jyzhao_s
3.4 創建pfile文件
從主庫的spfile中導出pfile文件,傳輸到備庫並做適當的修改調整。
create pfile='/tmp/pfile.ora' from spfile;
在備庫修改如下:
--原版(去掉RAC實例1,2的相關設置參數):
[oracle@jydg tmp]$ more pfile.ora
*.audit_file_dest='/opt/app/oracle/admin/jyzhao/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='11.2.0.4.0'
*.control_files='+DATA1/jyzhao/controlfile/current.260.919999027','+FRA1/jyzhao/controlfile/current.256.919999029'
*.db_block_size=8192
*.db_create_file_dest='+DATA1'
*.db_domain=''
*.db_name='jyzhao'
*.db_recovery_file_dest='+FRA1'
*.db_recovery_file_dest_size=4621074432
*.diagnostic_dest='/opt/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=jyzhaoXDB)'
*.fal_server='jyzhao_s'
*.log_archive_config='DG_CONFIG=(jyzhao,jyzhao_s)'
*.log_archive_dest_3='SERVICE=jyzhao_s LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=jyzhao_s'
*.log_archive_dest_state_3='enable'
*.memory_max_target=314572800
*.memory_target=314572800
*.open_cursors=300
*.processes=150
*.remote_listener='jyrac-scan:1521'
*.remote_login_passwordfile='exclusive'
*.standby_file_management='AUTO'
--修正后(主要確認路徑是否都存在):
[oracle@jydg tmp]$ more pfile.ora
*.audit_file_dest='/u01/app/oracle/admin/jyzhao/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/oradata/control01.ctl','/u01/app/oracle/fra/control02.ctl'
db_unique_name='jyzhao_s'
DB_FILE_NAME_CONVERT='+DATA1/jyzhao/datafile','/u01/app/oracle/oradata','+DATA1/jyzhao/tempfile/','/u01/app/oracle/oradata/'
LOG_FILE_NAME_CONVERT='+DATA1/jyzhao/onlinelog','/u01/app/oracle/oradata','+FRA1/jyzhao/onlinelog','/u01/app/oracle/oradata'
*.db_block_size=8192
*.db_create_file_dest='/u01/app/oracle/fra'
*.db_name='jyzhao'
*.db_recovery_file_dest='/u01/app/oracle/fra'
*.db_recovery_file_dest_size=4621074432
*.diagnostic_dest='/u01/app/oracle'
*.fal_server='jyzhao'
*.log_archive_config='DG_CONFIG=(jyzhao_s,jyzhao)'
*.log_archive_dest_3='SERVICE=jyzhao LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=jyzhao'
*.log_archive_dest_state_3='enable'
*.memory_max_target=314572800
*.memory_target=314572800
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='exclusive'
*.standby_file_management='AUTO'
3.5 啟動備庫到nomount
su - oracle
mkdir -p /u01/app/oracle/admin/jyzhao/adump
mkdir -p /u01/app/oracle/oradata
mkdir -p /u01/app/oracle/fra
startup nomount pfile='/tmp/pfile.ora'
create spfile from pfile='/tmp/pfile.ora';
這里參數文件也可以只指定db_name='jyzhao_s' 但是這樣的話就在duplicate時指定參數了。
3.6 使用duplicate搭建備庫
例如:
--duplication script, running at jyzhao_s
--這里是在備庫執行腳本;連接的是原環境RAC的節點2;
su - oracle
mkdir -p /home/oracle/mirgration_scripts
cd /home/oracle/mirgration_scripts
vi /home/oracle/mirgration_scripts/duplicate.sql
run {
allocate channel p1 type disk;
allocate channel p2 type disk;
allocate auxiliary channel s1 type disk;
allocate auxiliary channel s2 type disk;
duplicate target database for standby from active database dorecover nofilenamecheck;
}
nohup rman target sys/oracle@jyzhao2 auxiliary sys/oracle@jyzhao_s @/home/oracle/mirgration_scripts/duplicate.sql log=/home/oracle/mirgration_scripts/d1.log &
--實驗發現,duplicate主庫時,如果日志傳送鏈路沒有打開,那么是恢復不成功滴!
3.7 在OPEN狀態下進行日志應用
例如:
sqlplus / as sysdba
--alter database recover managed standby database cancel;
alter database open;
alter database recover managed standby database using current logfile disconnect from session;
--alter database recover managed standby database disconnect from session; --這種不需要standby logfile
3.8 確認ADG狀態正常
主庫日志類似如下信息:
******************************************************************
LGWR: Setting 'active' archival for destination LOG_ARCHIVE_DEST_3
******************************************************************
Wed Nov 30 04:48:42 2016
Archived Log entry 268 added for thread 2 sequence 115 ID 0x9603a618 dest 1:
LNS: Standby redo logfile selected for thread 2 sequence 116 for destination LOG_ARCHIVE_DEST_3
備庫日志類似如下信息:
Media Recovery Waiting for thread 2 sequence 116 (in transit)
也可以查看主備庫的當前SCN,或者查詢備庫的v$dataguard_stats視圖。
--主備庫都可查詢當前SCN:
SQL> select current_scn||'' from v$database;
--備庫查詢v$dataguard_stats視圖:
SQL> set lines 1000
SQL> select * from v$dataguard_stats;
以上檢查確認沒有問題,則說明ADG搭建成功完成。