Oracle 11g 兩個節點RAC 搭建單一實例DG詳細步驟以及注意事項
環境介紹:
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
備庫 只安裝了資料庫軟體 沒有建庫
具體步驟:
一:在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 ASYNC #非同步傳輸
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 #設定歸檔記錄檔的格式
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後,你在主庫添加或刪除資料檔案,會自動在備庫做相應的操作,要注意不要覆寫已經存在的資料檔案。別起一樣的名。
如果要求主要資料庫不能停機(也就是不能重啟的話),那麼你可以通過以下這些命令修改主庫的參數。修改完之後create pfile.ora ='/backup/pfile.ora from spfile='/Oracle/product/11.2.3/dbs/initJLPROJCT1.ora';
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; #靜態參數,不重啟,不起作用 ,所以不讓重啟可以不改它。
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/datafile/' scope =spfile; #靜態參數,不重啟,不起作用 ,所以不讓重啟可以不改它。
System altered.
SQL> ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='+DATA/jlprojct/onlinelog/','/backup/','+ARCH/jlprojct/onlinelog/','/backup/'scope =spfile; #靜態參數,不重啟,不起作用 ,所以不讓重啟可以不改它。
System altered.
三 ;修改主庫的監聽和tnsname.ora 檔案
1,主庫監聽listener.ora檔案 添加 (如果有就不修改)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=JLPROJCT)
(ORACLE_HOME=/oracle/product/11.2.3)
(SID_NAME=JLPROJCT1)))
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.26)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
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)
)
)
db26 = #主庫相關資訊 執行duplicate之前 要rman 同時串連主庫和備庫,串連主庫時,會用到這個連接字串。
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.26)(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.26)(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/' #等號後的兩個路徑換位置
LOG_FILE_NAME_CONVERT=
'+DATA/jlprojct/onlinelog/','/backup/','+ARCH/jlprojct/onlinelog/','/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 db26
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.26)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = JLPROJCT)))
OK (10 msec)
七:在主庫用rman 同時串連主備庫。
[oracle@rac1 ~]$ rman target sys/xxxxx@db26 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 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搭建成功。