11g 兩個節點RAC 搭建單例項DG詳細步驟以及注意事項

賀子_DBA時代發表於2015-03-06
環境介紹:
OS: 都是 [root@java3 ~]# uname -a 
Linux java3 2.6.18-308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012 x86_64 x86_64 x86_64 GNU/Linux 
主庫:  資料庫版本:11.2.0.3.0   兩個節點的RAC  節點一:192.168.15.26   節點二:192.168.15.27
standby 資料庫版本:  11.2.0.3.0       IP 192.168.15.9          scan ip 192.168.15.99
備庫 只安裝了資料庫軟體  沒有建庫
具體步驟:
一:在192.168.15.9 這臺伺服器上安裝資料庫軟體,不多介紹。
二:修改主庫引數
引數 可以11g官方手冊 book list --DAT--Data Guard Concepts and Administration--3.1 Preparing the Primary Database for Standby Database Creation--3.1.4  中的例子中看到要在主庫引數檔案裡面應該有的的引數(如果沒有要新增),如下所示:

DB_NAME=chicago                        #主庫的資料庫名  
DB_UNIQUE_NAME=chicago                 #主庫的資料庫名備庫 也有屬於自己的唯一資料庫名
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'        #注意括號裡主備庫的位置  
CONTROL_FILES='/arch1/chicago/control1.ctl', '/arch2/chicago/control2.ctl'      #這個引數主庫不需要改,備庫要改成自己存在的路徑  LOG_ARCHIVE_DEST_1=              #這個引數是制定本地(主庫)歸檔日誌檔案的位置
 'LOCATION=/arch1/chicago/ 
  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  DB_UNIQUE_NAME=chicago'       # 這裡是備庫的資料庫唯一名 
LOG_ARCHIVE_DEST_2=             #這個引數是說是作為主庫的這一方要傳遞聯機線上日誌到資料庫唯一名為boston的備庫。
 'SERVICE=boston  LGWR SYNC          #同步傳輸redo
  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) 
  DB_UNIQUE_NAME=boston'        #此處填寫備庫資料庫名,
LOG_ARCHIVE_DEST_STATE_1=ENABLE    #開啟傳輸日誌的服務  
LOG_ARCHIVE_DEST_STATE_2=ENABLE    
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE   #遠端登入口令檔案用於驗證管理使用者或重做傳輸會話時,必須設定成exclusive或shared
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc       #設定歸檔日誌檔案的格式 ,設定歸檔日誌檔案的格式  如果是 arch 日誌傳輸模式,也就是傳歸檔,那要保證主備庫格式一樣,否則可以不改 



FAL_SERVER=boston                     #此處是填寫備庫的資料庫名,該引數只是作為standby資料庫時才有用,意思是說備庫把這裡指定的主庫的資料庫名作為伺服器端,並獲取請求。針對這個引數,如果不打算主備庫轉換,沒必要在主庫設該引數。
DB_FILE_NAME_CONVERT= '/backup/','+data/jlprojct/datafile/'    #該引數是個靜態引數,其作用是在主庫執行duplicate時的recovere過程根據主庫的資料檔案位置轉換成這裡指定的備庫合適的位置,經測試是根據備庫的這個引數轉變,和主庫沒有關係,也就是說在主庫執行duplicate會根據備庫的這個引數指定的位置在備庫產生資料檔案。如果你在主庫新增一個新的資料檔案,你必須在備庫相應位置建立相應的資料檔案。
LOG_FILE_NAME_CONVERT=   #類似於上一個引數,注意修改這個引數時,如果你的主庫的日誌檔案有若干個不同路徑,你都要寫進來,
 '/arch1/boston/','/arch1/chicago/','/arch2/boston/','/arch2/chicago/'  
STANDBY_FILE_MANAGEMENT=AUTO     #這個引數是說當你設定成auto後,你在主庫新增或刪除資料檔案,會自動在備庫做相應的操作,要注意不要覆寫已經存在的資料檔案。別起一樣的名。

如果要求主資料庫不能停機(也就是不能重啟的話),那麼你可以透過以下這些命令修改主庫的引數。
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='location=+arch/jlprojct/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=JLPROJCT';

System altered.

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=JLPROJCT3  ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=JLPROJCT3';

System altered.

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=spfile;

System altered.

SQL>  ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=spfile;

System altered.

SQL>  ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE scope=spfile;

System altered.

SQL> ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' scope=spfile;  
#設定歸檔日誌檔案的格式 ,設定歸檔日誌檔案的格式 如果是 arch 日誌傳輸模式,也就是傳歸檔,那要保證主備庫格式一樣,否則可以不改

System altered.

SQL> ALTER SYSTEM SET FAL_CLIENT = JLPROJCT SCOPE=SPFILE;             #  fal_client也是設定本身,fal_server是對方

System altered.

SQL> ALTER SYSTEM SET FAL_SERVER = JLPROJCT3 SCOPE=SPFILE;

System altered.

SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=SPFILE;       

System altered.


SQL> ALTER SYSTEM SET DB_FILE_NAME_CONVERT= '/backup/data/JLPROJCT/', '+data/ jlprojct/datafile/' scope =spfile;     #靜態引數,不重啟,不起作用 ,如果不打算主備庫換位置(failover),那麼就可以不設定,因為備庫的這個引數才起作用。


SQL> ALTER SYSTEM SET  LOG_FILE_NAME_CONVERT='/backup/arch/', '+arch/jlprojct/archivelog/'scope =spfile;                           #靜態引數,不重啟,不起作用 ,如果不打算主備庫換位置(failover),那麼就可以不設定,因為備庫的這個引數才起作用

System altered.
三 ;修改主庫的監聽和tnsname.ora 檔案
1,主庫監聽listener.ora檔案 新增 (如果有就不修改)
LISTENER1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER1))))       
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER1=ON 
2.主庫tnsname.ora 新增備庫的相關資訊。
JLPROJCT3 =       #備庫的相關資訊
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.9)(PORT = 1521))
    (CONNECT_DATA =  
      (SERVER = DEDICATED)
      (SERVICE_NAME = JLPROJCT3)
  (INSTANCE_NAME = JLPROJCT3)
    )
  )
 JLPROJCT=                   #主庫相關資訊   執行duplicate之前 要rman 同時連線主庫和備庫,連線主庫時,會用到這個連線字串。
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.99)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = JLPROJCT)


 
四:在主庫用scp 把listener.ora  ,tnsname.ora ,initJLPROJCT1.ora,pfile.ora  傳給備庫 然後進行相應的修改(引數檔案不需要修改內容,但是要改名 和備庫例項名相對應 :[oracle@java3 dbs]$ mv orapwJLPROJCT orapwJLPROJCT3  )
 [oracle@rac1 ~]$ scp listener.ora tnsnames.ora initJLPROJCT1.ora   oracle@192.168.15.:`pwd`;      #冒號後面的pwd 意思是說要把檔案傳到備庫的當前路徑下(也就是此時在主機上 pwd 顯示的路徑)
把監聽的資訊改成備庫的,tnaname.ora新增主庫的相關資訊。
1.備庫監聽listener.ora 內容如下:
SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=JLPROJCT3)
      (ORACLE_HOME=/opt/oracle/product/11.2.0/dbhome_1)
      (SID_NAME=JLPROJCT3)))
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.9)(PORT = 1521))              #主機IP
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
ADR_BASE_LISTENER = /opt/oracle
2.備庫tnsname.ora 內容:
JLPROJCT =                   #主庫相關資訊   這裡的連線字串和主庫tnsname.ora 裡面的不一樣,不影響,隨便起的名字 
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.99)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = JLPROJCT)
JLPROJCT3 =       #備庫的相關資訊      如果僅僅是做standby 資料庫,不填他自己這個也行。       
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.9)(PORT = 1521))
    (CONNECT_DATA =  
      (SERVER = DEDICATED)
      (SERVICE_NAME = JLPROJCT3)
  (INSTANCE_NAME = JLPROJCT3)
    )
  )
備庫引數檔案修改 :    
DB_NAME=JLPROJCT                     #因為就一個資料庫   所以此處不變
DB_UNIQUE_NAME=JLPROJCT3     #這裡要寫成了備庫資料庫唯一名,便於區分主備庫,即使轉換角色也不改名。
LOG_ARCHIVE_CONFIG='DG_CONFIG=(JLPROJCT3,JLPROJCT)'       #括號裡面和主庫括號裡面的前後位置改變。  
LOG_ARCHIVE_DEST_1=
 'location=/opt/oracle                          #填上備庫有的目錄,保證有空閒空間 ,以及有許可權讀寫,     
  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  DB_UNIQUE_NAME=JLPROJCT3'          #備庫名字
LOG_ARCHIVE_DEST_2=
 'SERVICE=JLPROJCT ASYNC                   #主庫的名字
  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
  DB_UNIQUE_NAME=JLPROJCT'            #主庫名字
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
FAL_SERVER=JLPROJCT                      #主庫名字
DB_FILE_NAME_CONVERT='+data/jlprojct/datafile/','/backup/','+DATA/jlprojct/tempfile/','/backup/'          #等號後的兩個路徑相對於主庫的換位置
LOG_FILE_NAME_CONVERT='+DATA/jlprojct/onlinelog/', '/backup/', '+ARCH/jlprojct/onlinelog/','/backup/','+ARCH/jlprojct/archivelog/','/backup/'               #等號後的兩個路徑換位置
STANDBY_FILE_MANAGEMENT=AUTO
五:在備庫上 把修改過後的pfile 建立成spfile,然後 改名 ,並把備庫例項啟動到nomount狀態
SYS@JLPROJCT3> create  pfile from spfile;        
File created.     
六:在主庫上新增standby 日誌組 新增的個數為:(主庫原來有的個數n+1)*執行緒數 ,這裡所說的執行緒數可以理解為例項的個數,這裡有10個日誌組,所以要新增(10+1)*2=22組。大小和路徑最好和原來的保持一致,
DG有兩種傳遞日誌的方式,一種是常見的archivr log,由ARCH的後臺程式控制傳遞到standby資料庫,還有一種是和redo log一樣的傳遞方式,由產生redo log的後臺程式LGWR控制,後者就需要standby log
在最大可用和最大保護模式,因為是採用LGWR SYNC進行redo的傳送,一定要用standby logfile,但是建議在最大效能模式也新增standby logfile,據說在失敗切換時可以恢復更多的資料
新增命令如下:
alter database add standby logfile group 15 ('+DATA/jlprojct/onlinelog/group_15') size 2000M;
六:在主庫進行測試  成功後繼續進行   ,開啟主備庫的監聽,關閉防火牆,
[oracle@rac1 ~]$ tnsping JLPROJCT3

TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 05-MAR-2015 17:45:23

Copyright (c) 1997, 2011, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.9)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = JLPROJCT3) (INSTANCE_NAME = JLPROJCT3)))
OK (0 msec)
[oracle@rac1 ~]$ tnsping JLPROJCT

TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 05-MAR-2015 17:46:43

Copyright (c) 1997, 2011, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.99)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = JLPROJCT)))
OK (10 msec)
七:在主庫用rman 同時連線主備庫。
[oracle@rac1 ~]$  rman target sys/xxxxx@JLPROJCT auxiliary sys/xxxxx@JLPROJCT3

Recovery Manager: Release 11.2.0.3.0 - Production on Thu Mar 5 17:51:23 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: JLPROJCT (DBID=2115662724)
connected to auxiliary database: JLPROJCT (not mounted )
八:在主庫執行duplicate命令,最關鍵的一步,備份主庫的控制檔案,資料檔案,日誌檔案,然後傳給備庫,並在備庫recover ,如果沒有報錯的話,備庫就會Open了。
RMAN> duplicate target database for standby from active database dorecover  nofilenamecheck;

九:read only  的方式,開啟備庫資料庫例項。
SYS@JLPROJCT3> alter database open read only;

Database altered.
十:在備庫開啟MRP程式 ,應用日誌,重演變化。注意:一定要保證備庫例項是在 read only 的方式下開啟的,否則不能同步。
SYS@JLPROJCT3> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Database altered.
十一:測試結果:在主庫隨便建立一個使用者,並在這個使用者下建立一個表,發現備庫也會有,證明DG搭建成功。 














 





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-1450093/,如需轉載,請註明出處,否則將追究法律責任。

相關文章