建立 oracle data gurd 以及三種保護模式

賀子_DBA時代發表於2014-09-02
 資料庫版本:11.2.0.3.0       作業系統  Linux 5.5      備庫有資料庫軟體  沒有建庫  
一:在主庫開歸檔,將主庫設定為  force  logging  
SYS@ENMOEDU> alter database force logging; 

Database altered. 
二:對主庫新增standby 日誌組   新增的組數=原來日誌組數*執行緒數+1  (一個例項就是一個執行緒  一對一的關係)  
所以先檢視主庫的日誌組數   
YS@ENMOEDU> select * from v$log;                     #共有三組  所以要新增四組 

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC 
---------- ---------- ---------- ---------- ---------- ---------- --- 
STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME 
---------------- ------------- --------- ------------ --------- 
1 1 91 52428800 512 1 NO 
CURRENT 1310685 02-SEP-14 2.8147E+14 

2 1 89 52428800 512 1 YES 
INACTIVE 1310028 02-SEP-14 1310034 02-SEP-14 

3 1 90 52428800 512 1 YES 
INACTIVE 1310034 02-SEP-14 1310685 02-SEP-14 
用下面的方法新增  免得一條一條執行  提高效率,
DEFINE _EDITOR=vi
ed1   然後再編輯以下內容,注意成員要和原來的成員路徑最好一致。
 alter database add standby logfile group4('/u01/app/oracle/oradata/ENMOEDU/redo05.log') size 50M;
alter database add standby logfile group 5('/u01/app/oracle/oradata/ENMOEDU/redo06.log') size 50M;
alter database add standby logfile group6('/u01/app/oracle/oradata/ENMOEDU/redo07.log') size 50M;
alter database add standby logfile group7('/u01/app/oracle/oradata/ENMOEDU/redo08.log') size 50M;
三:在主庫配置引數檔案  編輯  initENMOEDU.ora   新增內容內容(11g官方手冊 book list --DAT--Data Guard Concepts and Administration--3.1 Preparing the Primary Database for Standby Database Creation--3.1.4  中的例子)
example 3-1和3-2   再修改:把Chicago 是主庫的資料庫名ENMOEDU  改成你自己的 主庫 名,Boston改成你的standby資料庫名ENMOEDU1,  (可以用全域性替換:%s#old_name#new_name#g)   再把該修改的路徑修改掉,
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=
 '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
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc


FAL_SERVER=boston
DB_FILE_NAME_CONVERT='boston','chicago'
LOG_FILE_NAME_CONVERT=
 '/arch1/boston/','/arch1/chicago/','/arch2/boston/','/arch2/chicago/'  #改成LOG_FILE_NAME_CONVERT='ENMOEDU1','ENMOEDU'  
STANDBY_FILE_MANAGEMENT=AUTO
四:  在主庫SYS@ENMOEDU> create spfile from pfile; 
五;主庫配置監聽  用netca 配置    在客戶端配置tnsname.ora  ,它內容中的host=主機名或它的IP       這個ip是你想連線誰  就寫誰,
在伺服器端配置listener.ora   內容中的host=它自己的IP。當客戶端要連線伺服器時,首先解析客戶端的tnsname.ora檔案的內容,然後找到要連線的伺服器,伺服器上的監聽正在那等著呢,監聽透過listener.ora 檔案的內容與之對應上了(埠,協議,服務名,IP)就能連線上  
[oracle@ENMOEDU admin]$ pwd          監聽檔案路徑
/u01/app/oracle/product/11.2.0/dbhome_1/network/admin 
listener.ora檔案具體內容:
SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=ENMOEDU)
      (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME=ENMOEDU)))


LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.80.10)(PORT = 1521))              #主機IP
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
ADR_BASE_LISTENER1 = /u01/app/oracle
tnsname.ora 檔案具體內容:
ENMOEDU1 =          #這個是連線備庫的時候 解析的tnsname.ora 內容           
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.80.11)(PORT = 1521))        #因為要連線備庫  所以填寫備庫的IP
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ENMOEDU1)
    )
  )

ENMOEDU =                #這個連線主庫自己的時候  要解析的檔案內容     因為一個虛擬機器既可以做客戶端  也可以做服務端
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.80.10)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ENMOEDU)
    )
  )
六:用scp命令給備庫傳 引數檔案,口令檔案, tnsnames.ora listener.ora 檔案,
[oracle@ENMOEDU admin]$ scp listener.ora tnsnames.ora oracle@192.168.80.11:`pwd`;      #冒號後面的pwd 意思是說要把檔案傳到備庫的當前路徑下(也就是此時在主機上 pwd 顯示的路徑)
Address 192.168.80.11 maps to enmoedu, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT! 
oracle@192.168.80.11's password: 
listener.ora 100% 544 0.5KB/s 00:00 
tnsnames.ora 100% 526 0.5KB/s 00:00
七:在備庫上操作:修改剛傳過來的引數檔案、口令檔案、 的名字 (因為備庫的例項名為ENMOEDU1) 
[oracle@ENMOEDU1 admin]$ mv    initENMOEDU.ora     initENMOEDU1.ora    
然後  修改 剛傳過來的  listener.ora  把IP換成備庫的ip,服務名也改過來。  最後 還要修改傳過來的引數檔案內容,
主庫的引數檔案內容
DB_NAME=ENMOEDU           #因為就一個庫  所以這裡主備庫一樣,
DB_UNIQUE_NAME=ENMOEDU    #改成備庫的資料庫名
LOG_ARCHIVE_CONFIG='DG_CONFIG=(ENMOEDU,ENMOEDU1)'         #括號裡面的兩個名字換位置
LOG_ARCHIVE_DEST_1=                                      
 'LOCATION=/u01/app/oracle/oradata/ENMOEDU                                #改成ENMOEDU1
  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  DB_UNIQUE_NAME=ENMOEDU'
LOG_ARCHIVE_DEST_2=
 'SERVICE=ENMOEDU1 ASYNC
  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
  DB_UNIQUE_NAME=ENMOEDU1'
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=ENMOEDU1
DB_FILE_NAME_CONVERT='ENMOEDU1','ENMOEDU'                        #換位置
LOG_FILE_NAME_CONVERT='ENMOEDU1','ENMOEDU'                               #換位置
STANDBY_FILE_MANAGEMENT=AUTO
八:把主備庫的監聽開啟    關閉防火牆   把主庫啟動到mount狀態,再啟動備庫例項(nomount)
lsnrctl  start   
service iptables stop 
然後 在主庫  輸入命令  
[oracle@ENMOEDU dbs]$ rman target sys/oracle@ENMOEDU auxiliary sys/oracle@ENMOEDU1 

Recovery Manager: Release 11.2.0.3.0 - Production on Tue Sep 2 22:07:39 2014 

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

connected to target database: ENMOEDU (DBID=87396644) 
connected to auxiliary database: ENMOEDU (DBID=87396644) 

RMAN>  
九;在主庫執行duplicate命令  這條命令所做的事情:( RMAN automatically copies the server parameter file to the standby host, starts the auxiliary instance with the server parameter file, restores a backup control file, and copies all necessary database files and archived redo logs over the network to the standby host. RMAN recovers the standby database, but does not place it in manual or managed recovery mode )
RMAN>  DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK; 
十:在備庫上操作,
開啟MRP 程式  (應用歸檔  重演變化)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
以只讀方式開啟資料庫(但是要先關掉之前開啟的 MRP程式:alter database recover managed standby database cancel)
alter database open read only;
注意 :11g    standby 資料庫只能是read only 的方式開啟,而且開啟之前  要先取消MRP程式,開啟之後  還可以開啟MRP程式  應用日誌,重演變化,
10g standby資料庫只能在mount模式下  應用日誌,11g可以在開啟的模式下應用   這就導致11g資料庫可以用standby 資料庫來分擔主庫的查詢負擔,而不僅僅是做備份,這是一大進步。


中途的一些報錯,
(1)口令檔案沒有 改名導致  沒有許可權
connected to target database: ENMOEDU (DBID=87396644)
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04006: error from auxiliary database: ORA-01031: insufficient privileges
(2)監聽沒配好  無法連線rman 
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04006: error from auxiliary database: ORA-12541: TNS:no listener

.最大保護模式
1)這種模式提供了最高階別的資料保護能力;
2)要求至少一個物理備庫收到重做日誌後,主庫的事務才能夠提交;
3)主庫找不到合適的備庫寫入時,主庫會自動關閉,防止未受保護的資料出現;
4)優點:該模式可以保證備庫沒有資料丟失;
5)缺點:主庫的自動關閉會影響到主庫的可用性,同時需要備庫恢復後才能提交,對網路等客觀條件要求非常的高,主庫的效能會因此受到非常大的衝擊。


2.最大可用性模式
1)該模式提供了僅次於“最大保護模式”的資料保護能力;
2)要求至少一個物理備庫收到重做日誌後,主庫的事務才能夠提交;
3)主庫找不到合適的備庫寫入時,主庫不會關閉,而是臨時降低到“最大效能模式”模式,直到問題得到處理;
4)優點:該模式可以在沒有問題出現的情況下,保證備庫沒有資料丟失,是一種折中的方法;
5)缺點:在正常執行的過程中缺點是主庫的效能受到諸多因素的影響。


3.最大效能模式
1)該模式是預設模式,可以保證主資料庫的最高可用性;
2)保證主庫執行過程中不受備庫的影響,主庫事務正常提交,不因備庫的任何問題影響到主庫的執行;
4)優點:避免了備庫對主資料庫的效能和可用性影響;
5)缺點:如果與主庫提交的事務相關的恢復資料沒有傳送到備庫,這些事務資料將被丟失,不能保證資料無損失;









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

相關文章