儘管網上有很多Oracle Dataguard的配置教程,但不難發現,很多採用的是rman duplicate這種方法,儘管此種方法較為簡便。但在某種程度上,卻也誤導了初學者,雖說也能配置成功,但只知其然不知其所以然,Dataguard的本質沒有吃透,也不利於其維護和調優。
本配置文檔基於Oracle官方文檔,目的在於加深大家對於Dataguard的瞭解。
本配置的結果是最大效能模式下的非同步傳輸 ,因此在參數檔案中,只涉及基本的主備參數,沒有考慮switchover和最大效能模式下的real time apply。在監聽的配置中,也沒有考慮Data Guard Broker的應用情況
配置環境:
主庫: 備庫:
作業系統版本: Oracle Linux 6.3 Oracle Linux 6.3
資料庫版本: Oracle 11.2.0.1.0 Oracle 11.2.0.1.0
主機名稱: node1.being.com node2.being.com
IP: 192.168.1.11 192.168.1.12
db_name orcl victor
db_unique_name orcl orcl
instance_name orcl victor
service_names orcl victor
注意:1. Dataguard中只需要db_unique_name保持一致即可
2. 主庫中除了安裝Oracle軟體以外,還需要dbca建庫。而備庫中,只需要安裝Oracle軟體即可,即在./runInstaller安裝過程中,第三步選擇install software only
即可
3. 主備庫的ORACLE_BASE=/u01/app/oracle,ORACLE_HOME=$ORACLE_BASE/product/11.2.0.1/db_1
一、配置監聽
1> 主庫上
[oracle@node1 ~]$ cd $ORACLE_HOME/network/admin/
[oracle@node1 admin]$ cat tnsnames.ora
TO_VICTOR = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.12)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = victor) ) )
其中to_victor為網路服務名,在後面配置log_archive_dest_2和fal_server中會用到
2> 備庫上
[oracle@node2 ~]$ cd $ORACLE_HOME/network/admin/
[oracle@node2 admin]$ cat tnsnames.ora
TO_ORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.11)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
注意:該配置只是基於基本的Dataguard配置,沒有考慮Dataguard broker的配置
二、主庫環境準備 -->> 在node1上操作
1> 將資料庫設定為歸檔模式
SQL> archive log list -->>若Database log mode為No Archive Mode,則表示該資料庫運行在非歸檔模式下。進行以下操作
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;
2> 將資料庫設定為Force Logging模式
SQL> select force_logging from v$database; -->>若為NO,則進行以下操作
SQL> alter database force logging;
3> 修改主庫參數檔案
SQL> alter system set log_archive_config='dg_config=(orcl,victor)';
-->> 代表該Dataguard是兩個節點,一主一從,若要配置多個節點,則需要在此處添加。
SQL> alter system set log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(online_logfiles,primary_role) db_unique_name=orcl';
-->> location代表本地歸檔。在這裡我們使用閃回區作為線上記錄檔的歸檔目錄,在實際生產環境中,如果歸檔日誌是歸檔在本地檔案系統上,不建議使用閃回區,因為閃回區和資料庫軟體是在同一個目錄下,如果歸檔日誌過多,閃回區空間增長過快,容易造成磁碟空間不足,這樣容易使資料庫掛掉。valid_for代表該歸檔目錄只有在該庫為主庫,歸檔線上記錄檔時才有效。
SQL> alter system set log_archive_dest_2='service=to_victor async valid_for=(online_logfiles,primary_role) db_unique_name=victor';
-->> service後面接的是網路服務名
SQL> alter system set log_archive_dest_state_1='enable';
SQL> alter system set log_archive_dest_state_2='enable';
SQL> alter system set remote_login_passwordfile=exclusive scope=spfile; -->> 設定密碼檔案的許可權,該設定需重啟資料庫才會生效
SQL> alter system set log_archive_format='%t_%s_%r.arc' scope=spfile; -->> 設定歸檔日誌的格式,該設定需重啟資料庫才會生效
-->> 最後兩項可不用顯性設定