Deploy 11.2.0.3 RAC+DG on Windows 2008 R2 Step by Step

環境規劃:css


節點1: tc1 192.168.56.101 內存:2Gjava

節點2: tc2 192.168.56.102 內存:2Gsql

物理備庫:tcdg192.168.56.108內存:1.5G數據庫

操做系統:Windows 2008 R2 Enterprisewindows


************
 RAC部分
************


1、準備工做



1.改動提高權限提示方式爲「不提示,直接提高」(默以爲「非Windows二進制文件的容許提示」)
cmd> secpol.msc->本地策略->安全選項->用戶帳戶控制->管理員批准模式中管理員的提高權限提示的行爲


2.禁用防火牆
cmd> firewall.cpl->打開或關閉防火牆->關閉Window防火牆


3.改動註冊表關閉DHCP媒體感知(改動後從新啓動生效)
cmd> regedit->\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters如下加入一項,名字是DisableDHCPMediaSense,類型爲DWORD,值爲1


4.檢查是否生效
cmd> netsh interface ipv4 show global
DHCP 媒體感知 :enabled


5.關閉可伸縮網絡包(SNP)特性(改動後立刻生效)
cmd> netsh int tcp set global rss=disabled
cmd> netsh int tcp set global chimney=disabled


c:\grid>netsh int tcp show global
查詢活動狀態...


TCP 全局參數
----------------------------------------------
接收方縮放狀態                    : disabled
煙囪卸載狀態                      : disabled

NetDMA 狀態                       : enabled
直接緩存訪問(DCA)                 : disabled
接收窗體本身主動調諧級別              : normal
附加擁塞控制提供程序              : ctcp
ECN 功能                          : disabled
RFC 1323 時間戳                   : disabled


6.調整網絡綁定順序
cmd> ncpa.cpl->高級->高級設置->調整public在前,private在後,並且確保IPV4協議在IPV6協議以前


7.中止Distributed Transaction Coordinator,並設置成手動啓動
cmd> services.mcs->點屬性改動


8.同步各節點時間(可選)
一般節點之間的時間是由CTSSD(Cluster Time Synchronization Services Daemon)或 Windows Time Service來保證的,假設開啓了Windows Time Service(默認關閉),那麼必須保證不會被反向改動,需要作下面調整
cmd> regedit->\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
MaxNegPhaseCorrection的值改成0
cmd> w32tm /config /update  --使改動生效


9.環境變量設置(可選)
裝完系統默認應該已經有TMP和TEMP這兩個環境變量了,路徑都爲%USERPROFILE%\AppData\Local\Temp
由於在安裝OUI的時候,會用到這2個環境變量。因此假設沒有的話需要加入上。並且確保路徑是一致的


10.改動C:\windows\system32\etc\hosts
#public ip
192.168.56.101 tc1
192.168.56.102 tc2
#virtual ip
192.168.56.103 tc1-vip
192.168.56.104 tc2-vip
#private ip
10.0.0.1 tc1-priv
10.0.0.2 tc2-priv
192.168.56.105 tc-cluster-scan --格式爲"cluster名-scan"


11.full clone節點1至節點2
啓動並改動節點2的網卡ip地址主機名後再次從新啓動


12.測試連通性
節點1運行
cmd> ping tc2
cmd> ping tc2-vip
cmd> ping tc2-priv
cmd> net use \\tc2\c$
節點2運行(略)


13.測試遠程註冊表
節點1運行
cmd> regedit->文件->鏈接網絡註冊表->輸入tc2->檢查名稱-肯定
節點2運行(略)


2、配置共享磁盤


1.共享磁盤劃分規劃
DISK1 TC_OCR_VOTE1 1G
DISK2 TC_OCR_VOTE2 1G
DISK3 TC_OCR_VOTE3 1G
DISK1 TC_DATA12G
DISK5 TC_DATA22G
DISK6 TC_FRA1 2G
DISK7 TC_FRA2 2G


從11g開始。Oracle推薦把OCR和VOTEDISK放到ASM中進行管理。因此這裏共劃分了7塊磁盤,3塊用於磁盤組OCRVOTE,採用NORMAL冗餘。2塊用於DATA,2塊用於FRA。都是外部冗餘。注意。這裏分配的用於建立ASM磁盤組的磁盤必須是不帶盤符的裸磁盤,在Windows 2003中。可以用diskmgmt.msc來取代diskpart來建立磁盤分區,但是在Windowns 2008中僅僅能用diskpart來分區


2.設置本身主動掛載(所有節點)
cmd> diskpart
diskpart> automount enable


3.清除磁盤(節點1)
cmd> list disk
cmd> select disk 1
cmd> clean all
...
cmd> select disk 7
cmd> clean all


4.建立擴展分區和邏輯磁盤(節點1)
cmd> select disk 1
cmd> create part ext
cmd> create part log
...
cmd> select disk 7
cmd> create part ext
cmd> create part log


5.刪除邏輯磁盤盤符(節點2)
本地節點上用diskpart建立完擴展分區和邏輯盤後不會顯示邏輯盤符,但其它節點上可能會有,需要全部去除。注意,剛在節點2需從新啓動才幹發現節點1上對磁盤的分區
cmd> select disk 3 --注意相應的邏輯驅動器卷標。並不是從1開始的
cmd> remov
...
cmd> select disk 9
cmd> remov


6.用asmtool或asmtoolg來劃分asm磁盤組分區
進入grid安裝介質中,如:C:\grid\asmtools。執行amstoolg
選中要加入到同一個磁盤組的盤。輸入磁盤組名稱。點擊下一步


3、安裝Grid Infrastructure軟件


1.預檢安裝條件是否知足
C:\grid> runcluvfy stage -pre crsinst -n tc1,tc2 -verbose
C:\grid> runcluvfy stage -post hwos -n tc1,tc2 -verbose

會提示集羣服務配置失敗,因爲此時並無配置過vip,忽略。緩存

另外一個警告是沒法將用戶 "Administrator" 做爲域用戶進行驗證,這個可以忽略。最後一個警告是提示防火牆沒有關閉。但檢查了一下,確實是關閉的,依據後面OUI裏面的提示。經過改動註冊表可以關閉防火牆。安全

但是後來發現是因爲域配置文件裏的防火牆沒有關形成的網絡


2.安裝(略)
session


                                    


4、安裝Database軟件


1.預檢安裝條件是否知足
C:\grid> runcluvfy stage -pre dbinst -n tc1,tc2 -verbose


2.安裝(略)
安裝數據庫軟件卡在100%,卡了大約1個小時,多數是因爲系統資源不夠。測試環境內存過小。分配了2G也勉強能用,覺得卡死掉了,只是耐心等待後最終全然裝好。好費勁啊
結束以後要在遠程節點運行ORACLE_HOME/bin/selecthome.bat,以激活下面5個產品:
Oracle Data Provider for .NET
Oracle Provider for OLE DB
Oracle Objects for OLE
Oracle Counters for Windows Performance Monitor
Oracle Administration Assistant


5、建立磁盤組(ASMCA)


1.建立+DATA和+FRA磁盤組
C:\Users\Administrator>set oracle_home=c:\app\11.2.0\grid
C:\Users\Administrator>set oracle_sid=+asm1
C:\Users\Administrator>asmcmd
ASMCMD> ls
DATA/
FRA/
OCRVOTE/


2.建立OCR鏡像備份
儘管以前已經單獨爲OCR和VOTEDISK建立了一個磁盤組。但Oracle建議至少在其它磁盤組中存放OCR的鏡像,注意,每個磁盤組僅僅能存放一個OCR鏡像
C:\Users\Administrator>asmcmd lsof
DB_Name  Instance_Name  Path
+ASM     +asm1          +ocrvote.255.4294967295
由於此時並未建立數據庫實例。因此眼下僅僅有在+OCRDATE磁盤組中有惟一的一個文件。就是OCR文件


C:\Users\Administrator>asmcmd
ASMCMD> cd ocrvote/tc-cluster/ocrfile
ASMCMD> ls
REGISTRY.255.854982335
ASMCMD> pwd
+ocrvote/tc-cluster/ocrfile
注意。OCR實際的文件名稱是REGISTRY.255.854982335,而並不是+ocrvote.255.4294967295。這僅僅是一個路徑


OCR文件的備份方式


--本身主動備份
C:\Users\Administrator>ocrconfig -showbackup
PROT-24: Oracle 集羣註冊表的本身主動備份不可用
PROT-25: Oracle 集羣註冊表的手動備份不可用


默認Oracle會提供5份本身主動備份,按月、星期、天、以及保留最後3次修改。也可以手動運行備份,由於是新部署的環境,因此本身主動備份還未生成,也沒有運行過手動備份


--手工備份
C:\Users\Administrator>ocrconfig -manualbackup


tc2     2014/08/08 11:05:30     C:\app\11.2.0\grid\cdata\tc-cluster\backup_20140808_110530.ocr
默認存放在「%ORACLE_CRS_HOME%\cdata\集羣名\」如下,文件名稱格式爲「backup_xxxxxxxx_xxxxxx.orc」
這個默認位置可以經過-backuploc參數來改
C:\Users\Administrator>ocrconfig -backuploc c:\app


C:\Users\Administrator>ocrconfig -manualbackup


tc2     2014/08/08 11:20:38     c:\app\backup_20140808_112038.ocr


tc2     2014/08/08 11:05:30     C:\app\11.2.0\grid\cdata\tc-cluster\backup_20140808_110530.ocr


注意,以上命令我是在tc1節點上運行的,但是默認卻放到了tc2節點的本地路徑,我又嘗試在節點2上再次運行手工備份。依舊是在tc2節點本地指定的路徑生成OCR備份,難道是Oracle專門這樣設計的嗎?


--導出/導入到本地磁盤的方式
ocrconfig -export C:\ocr_bak.ocr
ocrconfig -import C:\ocr_bak.ocr

注意:利用本身主動或手動備份進行恢復是用restore而不是import


--在磁盤組中加入OCR冗餘
C:\Users\Administrator>ocrconfig -add +DATA
C:\Users\Administrator>ocrconfig -add +FRA
C:\Users\Administrator>ocrcheck
Oracle 集羣註冊表的狀態例如如下:
         版本號                  :          3
         總空間 (KB)     :     262120--總共才250M左右
         已用空間 (KB)      :       2808
         可用空間 (KB):     259312
         ID                       :  513928542
         設備/文件名稱         :   +OCRVOTE
                                    設備/文件完整性檢查成功
         設備/文件名稱         :      +DATA
                                    設備/文件完整性檢查成功
         設備/文件名稱         :       +FRA
                                    設備/文件完整性檢查成功


                                    設備/文件還沒有配置


                                    設備/文件還沒有配置


         集羣註冊表完整性檢查成功


         邏輯損壞檢查成功


這裏在+DATA和+FRA磁盤組都配置了OCR的備份,可以看到。Oracle提供最多5個位置用來備份OCR


可以看到。Oracle提供了多種備份ORC的方法,在10g中,用得比較多的就是存放在多個RAW設備上,而後用export/import到RAW磁盤的方式進行備份恢復,到了11g,Oracle把OCR放入了磁盤組。默認就是放VOTEDISK的那個磁盤組。並且建議在其它磁盤組中建立冗餘


3.查看錶決磁盤
C:\Users\Administrator>crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   7a6a6919ffe84fcfbf1e242c18f0b93e (\\.\ORCLDISKOCRVOTE2) [OCRVOTE]
 2. ONLINE   5857035b4da74fb3bf2f9c7d79a8aa2e (\\.\ORCLDISKOCRVOTE1) [OCRVOTE]
 3. ONLINE   7dd5966551d84fcbbffd88b32c038537 (\\.\ORCLDISKOCRVOTE0) [OCRVOTE]
找到了 3 個表決磁盤。




6、建立數據庫實例(DBCA)


1.預檢以前安裝的RAC數據庫軟件是否正常
c:\grid> runcluvfy stage -pre dbcfg -n all -d C:\app\11.2.0\grid -verbose


2.建立數據庫實例
oracle

c:\grid> dbca


***********
  DG部分
***********


*****主庫配置*****



1.開啓歸檔和force logging
SQL> select database_role,log_mode,force_logging from v$database;


DATABASE_ROLE    LOG_MODE     FOR
---------------- ------------ ---
PRIMARY          ARCHIVELOG   NO


SQL> alter database force logging;


2.改動主庫DG配置需要的參數
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(tc,tcdg)';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=tc';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=tcdgLGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=tcdg';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
SQL> ALTER SYSTEM SET FAL_SERVER=tcdg;
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT='AUTO';


默認狀況下,假設不指定scope,默認是both,這裏咱們需要讓設置的參數在內存和spfile同一時候生效,因此可以不加scope=both。

此外,數據庫默認的db_unique_name=db_name,所以也不做改動


SQL> show parameter db_unique_name


NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------------
db_unique_name                       string      tc


下面兩個參數改動後,需從新啓動生效,必須加上scope=spfile
SQL> ALTER SYSTEM SET DB_FILE_NAME_CONVERT='C:\app\oracle\oradata\tc','+data/tc/datafile' scope=spfile;
SQL> ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='C:\app\oracle\oradata\tc','+data/tc/onlinelog' scope=spfile;


生產環境停庫需要先停應用,再停監聽,運行檢查點,把在線日誌歸檔
C:\Users\Administrator>srvctl stop listener -n tc1
C:\Users\Administrator>srvctl stop lisetner -n tc2
SQL> alter system checkpoint;
SQL> alter system archive log current;
C:\Users\Administrator>srvctl stop database -d tc


再啓動數據庫(注意,啓動數據庫時,會本身主動開啓監聽)
C:\Users\Administrator>srvctl start database -d tc


SQL> show parameter file_name_convert


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert                 string      C:\app\oracle\oradata\tc, +data/tc/datafile
log_file_name_convert                string      C:\app\oracle\oradata\tc, +data/tc/onlinelog


可以看到,2個轉換文件名稱的參數已經生效了


3.建立tnsnames.ora和listener.ora
C:\Users\Administrator>netca。加入備庫的NET SERVICE NAME:tcdg
也可以在原有的tnsnames.ora中進行改動。那麼就不用netca了


改動完的內容例如如下:
# tnsnames.ora Network Configuration File: C:\app\oracle\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.


TC =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = tc-cluster-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = tc)
    )
  )


TCDG =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.108)(PORT = 1521))  --這裏HOST究竟用主機名仍是IP可以依據需求
    )
    (CONNECT_DATA =
      (SERVICE_NAME = tc)--注意這裏是tc而不是tcdg,因爲實例名和主庫保持一致
    )
  )


注意,由於GI的監聽是在%ORACLE_CRS_HOME%/network/admin中的,即C:\app\11.2.0\grid\NETWORK\ADMIN,而不是單實例的%ORACLE_HOME%/network/admin。即C:\app\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN


默認RAC數據庫是用grid下的netca來建立監聽的,可以經過下面命令查看
C:\Users\Administrator>call C:\app\11.2.0\grid\BIN\netca


Oracle Net Services 配置:
Oracle Net Configuration Assistant 是從網格基礎結構主文件夾啓動的。網絡配置將是集
羣範圍的。




在打開的配置界面中。可以看到已經有一個LISTENER的監聽了,打開C:\app\11.2.0\grid\NETWORK\ADMIN下的listener.ora,發現內容例如如下。和咱們熟悉的listener.ora並不一樣:


LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))# line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON # line added by Agent


已經有2個監聽了,而咱們需要的是能用於單實例的監聽,又不和原有動態監聽衝突,因此考慮給主庫建立一個靜態監聽。用net manager應用程序來建立,完畢後會在%ORACLE_HOME%/network/admin文件夾下生成一個listener.ora的文件,內容例如如下:


# listener.ora Network Configuration File: C:\app\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.


SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = tc)
      (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1)
      (SID_NAME = tc1)--注意是節點1的實例,因此是tc1,不能寫成tc
    )
  )


LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = TC1)(PORT = 1521))
  )


ADR_BASE_LISTENER = C:\app\oracle\product\11.2.0\dbhome_1\log


假設配置正確。那麼會顯演示樣例如如下的監聽狀態:
C:\Users\Administrator>lsnrctl status
...
服務摘要..
服務 "+ASM" 包括 1 個實例。
  實例 "+asm1", 狀態 READY, 包括此服務的 1 個處理程序...
服務 "tc" 包括 2 個實例。
  實例 "tc1", 狀態 UNKNOWN, 包括此服務的 1 個處理程序...
  實例 "tc1", 狀態 READY, 包括此服務的 1 個處理程序...
服務 "tcXDB" 包括 1 個實例。
  實例 "tc1", 狀態 READY, 包括此服務的 1 個處理程序...
命令運行成功

1個動態監聽,1個靜態監聽。都爲實例tc1建立了服務tc

4.建立password文件(可省略)
C:\Users\Administrator>orapwd file=pwdtc1.ora password=oracle entries=5 


5.建立備庫初始化參數文件
SQL> create pfile='c:\inittc1.ora' from spfile;


6.複製tnsnames.ora,listener.ora。password文件。初始化參數文件到備庫對應位置


*****備庫配置*****


1.依據pfile建立對應的文件夾
mkdir C:\app\oracle\admin\tc\adump
mkdir C:\app\oracle\admin\tc\dpdump
mkdir C:\app\oracle\admin\tc\hdump
mkdir C:\app\oracle\admin\tc\pfile
mkdir C:\app\oracle\oradata\tc
mkdir C:\app\oracle\flash_recovery_area

可以僅僅建立紅色部分

2.把從主庫複製過來的文件作對應改動,在這些文件裏,除了tnsnames.ora可以原封不動,其它都需要進行對應改動,包含改動文件名稱,改動完的pfile內容例如如下:
*.__db_cache_size=0
*.__java_pool_size=0
*.__large_pool_size=0

*.__oracle_base='C:\app\oracle'#ORACLE_BASE set from environment
*.__pga_aggregate_target=0
*.__sga_target=0
*.__shared_io_pool_size=0
*.__shared_pool_size=0
*.__streams_pool_size=0

*.audit_file_dest='C:\app\oracle\admin\tc\adump'
*.audit_trail='db'
*.cluster_database=false --這個參數必須設置爲false,說明是單實例數據庫。不然啓動會報錯
*.compatible='11.2.0.0.0'
*.control_files='C:\app\oracle\oradata\tc\control01.ctl','C:\app\oracle\oradata\tc\control02.ctl'
*.db_block_size=8192
*.db_create_file_dest='C:\app\oracle\oradata'
*.db_domain=''
*.db_name='tc'
*.db_recovery_file_dest='C:\app\oracle\flash_recovery_area'
*.db_recovery_file_dest_size=3908042752
*.diagnostic_dest='C:\app\oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=tcXDB)'
*.fal_server='TC'
*.instance_number=1
*.log_archive_config='DG_CONFIG=(tc,tcdg)'
*.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=tcdg'
*.log_archive_dest_2='SERVICE=tc LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=tc'

*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='ARC%S_%R.%T'
*.memory_target=857735168
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.processes=150
#*.remote_listener='tc-cluster-scan:1521' --原來的遠程監聽,這行要凝視掉,單實例上沒有這個參數
*.remote_login_passwordfile='exclusive'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.db_file_name_convert='+data/tc/datafile','C:\app\oracle\oradata\tc\'
*.log_file_name_convert='+data/tc/onlinelog','C:\app\oracle\oradata\tc\'
*.db_unique_name=tcdg --複製過來的pfile假設不設置這個參數,默認的值是tc。因此必須要改動掉


注意,紅色部分是需要改動的內容,由於主庫是RAC數據庫,很是多用於RAC的參數已經去掉,沒有全部列出

3.建立服務
oradim -new -sid tc -startmode manual -spfile


4.啓動監聽
C:\Users\Administrator>lsnrctl start


5.用pfile啓動
假設啓動時遇到ORA-12560: TNS: 協議適配器錯誤,那麼請檢查下面2點:


1.是否啓動了OracleServervicetcdg服務
由於以前建立實例時用了-startmode manual,那麼主機從新啓動後需手動啓動這個服務,Oracle建議這些服務都是手動的
C:\Users\Administrator>net start oracleservicetcdg
OracleServicetcdg 服務正在啓動 ..
OracleServicetcdg 服務已經啓動成功。


2.是否設置了正確的ORACLE_SID
C:\Users\Administrator>set oracle_sid=tc


C:\Users\Administrator>sqlplus / as sysdba
SQL> startup nomount
ORACLE 例程已經啓動。


Total System Global Area  855982080 bytes--由memory_target參數肯定
Fixed Size                  2260000 bytes
Variable Size             507511776 bytes
Database Buffers          343932928 bytes
Redo Buffers                2277376 bytes
SQL> 


注意,這裏系統又一次分配了各內存組件的內存,事實上剛纔改動pfile的時候,把這些參數的值全部設置爲0了:


*.__db_cache_size=0
*.__java_pool_size=0
*.__large_pool_size=0
*.__pga_aggregate_target=0
*.__sga_target=0
*.__shared_io_pool_size=0
*.__shared_pool_size=0
*.__streams_pool_size=0



這樣就表示由數據庫本身主動管理這些內存組件,包含SGA和PGA。詳細是由下面這個參數來分配的:
*.memory_target=857735168

注意,生產環境務必要改大這個參數值。起碼是真實物理內存的40%-60%


主庫或備庫運行:


C:\Users\Administrator>rman target sys/oracle@tc auxiliary sys/oracle@tcdg


恢復管理器: Release 11.2.0.3.0 - Production on 星期六 8月 9 12:26:33 2014


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


已鏈接到目標數據庫: TC (DBID=3163057399)
已鏈接到輔助數據庫: TC (未裝載)


假設在備庫上運行出現下面錯誤:


RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: 內部恢復管理器程序包初始化失敗
RMAN-04005: 目標數據庫中存在錯誤:
ORA-12545: 因目標主機或對象不存在, 鏈接失敗


那麼需要在備庫主機的hosts中增長一行:
192.168.56.105 tc-cluster-scan--注意。這裏加入的是scan-ip,而不是詳細的節點1或節點2的主機名


RMAN> duplicate target database for standby from active database;
出現例如如下錯誤:


RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: Duplicate Db 命令 (在 08/09/2014 17:19:04 上) 失敗
RMAN-05501: 終止複製目標數據庫
RMAN-05517: 暫時文件 +DATA/tc/tempfile/temp.263.855057647 與目標數據庫使用的文件
衝突


那麼就需要用SET NEWNAME FOR TEMPFILE 1 TO 'PATH'來指定一下文件名稱,例如如下(注意換了一種寫法):


RMAN> run{
allocate channel c1 device type disk;
allocate auxiliary channel c2 device type disk;
set newname for tempfile 1 to 'c:\app\oracle\oradata\tc\temp01.dbf';
duplicate target database for standby from active database;

release channel c1;
release channel c2;
}


事實上還可以加上不少其它的參數來進行duplicate:


RMAN> run{
allocate channel c1 device type disk;
allocate auxiliary channel c2 device type disk;
set newname for tempfile 1 to 'c:\app\oracle\oradata\tc\temp01.dbf';
duplicate target database for standby from active database 
spfile --可以使用spfile參數來加入備庫所需參數 
set control_files='c:\app\oracle\oradata\tc\control01.ctl','\app\oracle\oradata\tc\control02.ct' 
set log_archive_config='DG_CONFIG=(tc,tcdg)' 
set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=tcdg' 
set log_archive_dest_2='SERVICE=tc LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=tc' 
set log_archive_dest_state_1='ENABLE' 
set log_archive_dest_state_2='ENABLE' 
set remote_login_passwordfile='exclusive' 
set standby_file_management='AUTO'; 
set db_file_name_convert='+data/tc/datafile','C:\app\oracle\oradata\tc' 
set log_file_name_convert='+data/tc/onlinelog','C:\app\oracle\oradata\tc' 
set db_name=tc 
set db_unique_name=tcdg;
release channel c1;
release auxiliary channel c2;
}



注意。假設使用了spfile參數。那麼就再也不使用備庫上的pfile,會直接在備庫上生成一個改動好參數的spifle並使用,因此建議把備庫上需要的DG參數全部加上


--備庫查看文件:

SQL> set lin 80 pages 80
SQL> col name for a50
SQL> select file#,name from v$datafile;


     FILE# NAME
---------- --------------------------------------------------
         1 C:\APP\ORACLE\ORADATA\TC\SYSTEM.256.855057451
         2 C:\APP\ORACLE\ORADATA\TC\SYSAUX.257.855057453
         3 C:\APP\ORACLE\ORADATA\TC\UNDOTBS1.258.855057453
         4 C:\APP\ORACLE\ORADATA\TC\USERS.259.855057453
         5 C:\APP\ORACLE\ORADATA\TC\EXAMPLE.264.855057687
         6 C:\APP\ORACLE\ORADATA\TC\UNDOTBS2.265.855058289


SQL> select file#,name from v$tempfile;


     FILE# NAME
---------- --------------------------------------------------
         1 C:\APP\ORACLE\ORADATA\TC\TEMP01.DBF


SQL> select group#,member from v$logfile;


    GROUP#
----------
MEMBER
-----------------------------------------------------------------------


         2
C:\APP\ORACLE\ORADATA\TC\GROUP_2.262.855057605


         2
C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_2_9YCZCO9R_.LOG


         1
C:\APP\ORACLE\ORADATA\TC\GROUP_1.261.855057597


         1
C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_1_9YCZBZ3X_.LOG


         3
C:\APP\ORACLE\ORADATA\TC\GROUP_3.266.855058587


         3
C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_3_9YCZDHFO_.LOG


         4
C:\APP\ORACLE\ORADATA\TC\GROUP_4.267.855058593


         4
C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_4_9YCZF9L2_.LOG


         1
C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_1_9YCZC41Y_.LOG


         2
C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_2_9YCZCXOH_.LOG


         3
C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_3_9YCZDOGN_.LOG


         4
C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_4_9YCZFJTV_.LOG




已選擇12行。


SQL> select group#,thread#,members from v$log;


    GROUP#    THREAD#    MEMBERS
---------- ---------- ----------
         1          1          3
         2          1          3
         3          2          3
         4          2          3


備庫共同擁有4組online redo logfile。每組3個日誌文件。Oracle建議適當添加日誌組。每組最多2個成員。而現在每組3個成員顯然太多了,對性能會有影響,刪除一組FRA如下的


SQL> alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_1_9YCZC41Y_.LOG';


數據庫已更改。


SQL> alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\
ONLINELOG\O1_MF_2_9YCZCXOH_.LOG';
alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLIN
ELOG\O1_MF_2_9YCZCXOH_.LOG'
*
第 1 行出現錯誤:
ORA-01609: 日誌 2 是線程 1 的當前日誌 - 沒法刪除成員
ORA-00312: 聯機日誌 2 線程 1: 'C:\APP\ORACLE\ORADATA\TC\GROUP_2.262.855057605'
ORA-00312: 聯機日誌 2 線程 1:
'C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_2_9YCZCO9R_.LOG'
ORA-00312: 聯機日誌 2 線程 1:
'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_2_9YCZCXOH_.LOG'


SQL> alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_3_9YCZDOGN_.LOG';


數據庫已更改。


SQL> alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_4_9YCZFJTV_.LOG';


數據庫已更改。


SQL> select group#,members,status from v$log;


    GROUP#    MEMBERS STATUS
---------- ---------- ----------------
         1          2 CLEARING
         2          3 CURRENT
         3          2 UNUSED
         4          2 UNUSED


第2組的日誌由於正在使用。因此沒法刪除,先不管。等有機會切換日誌後再進行刪除


--再來看一下主庫的online redo logfile的狀況:

SQL> col member for a45
SQL> select group#,member from v$logfile;


    GROUP# MEMBER
---------- ---------------------------------------------
         2 +DATA/tc/onlinelog/group_2.262.855057605
         2 +FRA/tc/onlinelog/group_2.258.855057607
         1 +DATA/tc/onlinelog/group_1.261.855057597
         1 +FRA/tc/onlinelog/group_1.257.855057601
         3 +DATA/tc/onlinelog/group_3.266.855058587
         3 +FRA/tc/onlinelog/group_3.259.855058591
         4 +DATA/tc/onlinelog/group_4.267.855058593
         4 +FRA/tc/onlinelog/group_4.260.855058595


也是一共4組,但每組是2個成員,可以看到,用duplicate過來的備庫。每組多建立了個1個成員


--在備庫加入standby redo logfile

SQL> alter database add standby logfile 'C:\app\oracle\oradata\tc\std_05.log'size 50m;
SQL> alter database add standby logfile 'C:\app\oracle\oradata\tc\std_06.log'size 50m;
SQL> alter database add standby logfile 'C:\app\oracle\oradata\tc\std_07.log'size 50m;
SQL> alter database add standby logfile 'C:\app\oracle\oradata\tc\std_08.log'size 50m;
SQL> alter database add standby logfile 'C:\app\oracle\oradata\tc\std_09.log'size 50m;


注意。假設不指定組號,默認會在online redo logfile組的基礎上遞增,如,原來有4組online redo logfile,那麼可以看到加入後的備庫日誌:
SQL> select group#,thread# from v$standby_log;


    GROUP#    THREAD#
---------- ----------
         5          0 --備庫日誌文件從5開始編號
         6          0
         7          0
         8          0
         9          0


剛纔默認建立了5組standby redo logfile。thread#爲0是因爲尚未被應用。應用之後應該是1


--主庫查看歸檔路徑狀態

SQL> col destination for a30
SQL> col error for a20
SQL> select dest_id,destination,status,error fromv$archive_dest_state where dest_id<3;


   DEST_ID DESTINATION                    STATUS    ERROR
---------- ------------------------------ --------- --------------------
         1 USE_DB_RECOVERY_FILE_DEST      VALID
         2 tcdg                           VALID


--備庫查看歸檔路徑狀態

SQL> col destination for a30
SQL> col error for a20
SQL> select dest_id,destination,status,error fromv$archive_dest_state where dest_id<3
;


   DEST_ID DESTINATION                    STATUS    ERROR
---------- ------------------------------ --------- --------------------
         1 USE_DB_RECOVERY_FILE_DEST      VALID
         2 tc                             VALID


--開始應用日誌

SQL> alter database recover managed standby databaseusing current logfile disconnect from session;


--主庫切換1第二天志

SQL> alter system switch logfile;


系統已更改。


--備庫查看日誌應用狀況

SQL> select sequence#,applied fromv$archived_log;


 SEQUENCE# APPLIED
---------- ---------
        30 YES
        29 YES
        31 YES
        32 YES
        33 YES
        34 IN-MEMORY --說明正在應用


已選擇6行。


SQL> select group#,status from v$log;


    GROUP# STATUS
---------- ----------------
         1 CURRENT
         2 CLEARING --CLEARING狀態了。而非CURRENT了
         3 UNUSED
         4 UNUSED


--刪除剛纔沒有成功的那個group2的日誌組成員
SQL> alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_2_9YCZCXOH_.LOG';
alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\
*
第 1 行出現錯誤:
ORA-01156: 進行中的恢復或閃回可能需要訪問文件


--需要先中止REDO APPLY後再刪除

SQL> recover managed standby database cancel;
完畢介質恢復。


SQL> alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\
ONLINELOG\O1_MF_2_9YCZCXOH_.LOG';


數據庫已更改。


SQL> select group#,members from v$log;


    GROUP#    MEMBERS
---------- ----------
         1          2
         2          2
         3          2
         4          2


--刪完日誌文件後,要記得把standby_file_management參數的值改回爲AUTO

SQL> show parameter standby_file_management;


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------
standby_file_management              string      MANUAL
SQL> alter system set standby_file_management=auto;


系統已更改。




SQL> show parameter standby_file_management


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------
standby_file_management              string      AUTO


--又一次啓用REDO APPLY

SQL> recover managed standby database using current logfile disconnect from session;
完畢介質恢復。


至此,RAC-DG順利搭建完畢。


總結:
由於本機的內存並不大,僅僅有8G。在兩個節點共分配2G,DG節點分配1.5G之後。經常會出現卡頓現象,而且是在已經關閉節點2,僅僅在節點1上操做的狀況下,節點1會經常由於內存不足而崩潰從新啓動,預計對於Window 2008而言,2G物理內存實在是太少了,只是這個狀況在生產環境應該要好一點。起碼都是幾十G到幾百G的物理內存環境。




今天用的是duplicate方式來建立的物理備庫。事實上這是11g新特性,在10g中,咱們僅僅能以rman全庫備份的方式進行異機恢復,duplicate的優勢是可以直接在備庫建立online redo logfile,並且能用spifle指定備庫所需參數,無需建立全庫備份,主庫所有文件可以本身主動化地由rman恢復到備庫,包含password文件,暫時文件等,還可以用dorecover還原online redo logfile中的內容,使恢復出來的備庫得到最新的數據文件,可以加快DG同步的時間


Tips:
1.使用遠程桌面鏈接方式安裝,可以不裝VBox的輔助工具。也無需加入共享目錄。就能方便的在主機和虛擬機之間方便地複製安裝介質或命令。




2.在11g中數據庫警告日誌文件的位置與10g不一樣,要注意。不要混淆了,分析日誌同步故障要先看警告日誌
通用路徑:%ORACLE_HOME%\diag\rdbms\DB_UNIQUE_NAME\SID_NAME\trace\alertSID.log
節點1:C:\app\Administrator\diag\rdbms\tc\tc1\trace\alert_tc1.log
備庫:C:\app\oracle\diag\rdbms\tcdg\tc\trace\alert_tc.log

相關文章
相關標籤/搜索