物理備庫的搭建過程

wmsok發表於2014-03-09

物理備庫的搭建過程:
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

一、簡單DG搭建:預設為最大效能,可以不用建立standby redo log
   主庫:
      1、確認資料庫在歸檔模式(配置好歸檔路徑)、FORCE LOGGING模式。
      2、啟動到NOMOUNT下,生成initDGDH.ora,修改初始化引數檔案,生成兩份initDGDH.ora和initDGDHSTB.ora,主要引數如下:
.......
.......
.......
*.db_name='DGDH'
.......
.......
*.DB_UNIQUE_NAME=DGDH
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(DGDH,DGDHSTB)'
*.LOG_ARCHIVE_DEST_1= 'LOCATION=d:\dir\DGDH VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DGDH'
*.LOG_ARCHIVE_DEST_2= 'SERVICE=DGDHSTB SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DGDHSTB'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.fal_server='DGDHSTB'
*.fal_client='DGDH'
*.log_file_name_convert=("D:\oracle\product\10.2.0\oradata\DGDHSTB","D:\oracle\product\10.2.0\oradata\DGDH")
*.db_file_name_convert=("D:\oracle\product\10.2.0\oradata\DGDHSTB","D:\oracle\product\10.2.0\oradata\DGDH") --用於RMAN複製時重建redo檔案
*.standby_file_management=auto   #裸裝置,必須將該引數設定為manual。

----該引數檔案裡面除了db_name引數值相同,必須取主庫的名字,其它引數都要把DGDH和DGDHSTB互換
  
3、在MOUNT下,生成備庫控制檔案:以上面配置好的引數檔案為基礎,啟動到MOUNT下,這樣資料庫才能知道備庫的SID
   alter database create standby controlfile as 'c:\control01.ctl'
4、配置好主庫和備庫的靜態監聽和網路服務

   備庫:
     1、在備庫伺服器上,建立例項 oradim -NEW -SID DGDHSTB -STARTMODE manual
     2、配置好主庫和備庫的靜態監聽和網路服務。        
     3、建立目錄:admin、oradata下建立對應的目錄
     4、複製(initDGDHSTB.ora、standby控制檔案、資料檔案、日誌檔案、密碼檔案)到備份伺服器相應目錄,備庫上的控制檔案要和主庫數量一致
     5、啟動備庫到MOUNT下
        後臺自動應用日誌 alter database recover managed standby database disconnect from session;
        取消後臺自動應用日誌 alter database recover managed standby database cancel;
        開啟資料庫:alter database open [read only]
    驗證:
     1、select name,switchover_status,open_mode,protection_mode,database_role  from v$database;
name      switchover_status    open_mode  protection_mode      database_role
--------- -------------------- ---------- -------------------- ----------------
dgdh        to standby         read write  maximum performance  primary
2、SELECT STATUS,DESTINATION, ERROR FROM V$ARCHIVE_DEST;   ----如果有錯誤,要排查原因。
3、alter system switch logfile;
    select max(sequence#) from v$archived_log;  -----主備查詢結果一致,Data Guard 搭建結束。
     4、驗證archive log是否接收和 applied.
        alter session set nls_datE_format='YYYY-MM-DD HH24:MI:SS';
    select SEQUENCE#,DEST_ID,ARCHIVED,APPLIED,DELETED,STATUS,FIRST_TIME from v$archived_log order by SEQUENCE#;
5、select process,status,thread#,sequence#,client_pid from v$managed_standby;   ----檢視當前備庫裡面的程式有哪些
    這裡需要明確的是,當沒有開啟recover managed standby database,則備庫會關掉MRPn程式的。但是RFS程式還是開啟的,還在能不停的接受日誌寫日誌。
     重:SQL>select process,client_process from v$managed_standby;

PROCESS   CLIENT_PROCESS
--------- --------------
ARCH      ARCH   
ARCH      ARCH
RFS       LGWR
RFS       ARCH
MRP0      N/A

從上面的對應關係可以看出LGWR--&gtRFS和ARCH--&gtRFS

  注意:如果在主庫執行 alter database clear unarchived logfile或alter database open resetlogs , 則dataguard要重建。
相關檢視:
v$archive_dest
v$archive_dest_status
v$log_history
v$archvied_log
v$managed_standby
v$archive_gap

       
二、最大效能、最大可用、最大保護
    前提:必須建立standby redo log,數量=(maximum number of logfiles for each thread + 1) * maximum number of threads
命令:ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;     ----最大效能,預設,無法同步日誌時不影響主庫
          ALTER DATABASE SET STANDBY DATABASE TO MAXISIZE AVAILABILITY;    ----最大可用,無法同步日誌時自動切換到最大效能,待可同步時再切換到最大保護
          ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;      ----最大保護,無法同步日誌時主庫會shutdown
         
           ***11G裡面怎麼是MAXISIZE,而非MAXIMIZE

  alter database add standby logfile group 5 ('d:\oracle\product\oradata\dgdhicu\stbredo01.log') size 50M; 
  alter database add standby logfile group 4 ('/oracle/dbs/log1c.rdo') size 500m;      ---一主一備的話就應該要建立4個standby redo log
另:*.LOG_ARCHIVE_DEST_2= 'SERVICE=DGDH LGWR SYNC AFFIRM REOPEN=10 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DGDH'
  以上紅色引數也要加上,以後再研究,現在要考試了
  
   
   
三、日誌傳送方式
    可分為三種:ARCH程式傳送日誌、LGWR程式的SYNC傳送日誌、LGWR程式的ASYNC傳送日誌
     引數檔案中在此處指定:*.LOG_ARCHIVE_DEST_2= 'SERVICE=DGDHSTB SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DGDHSTB'
     ARCH 程式:
Primary DB àRedo log àOnline redo log àArch redo log àRFS à>Arch redo log àMRP/LSPàStandby DB
| 注:ARCH程式傳送日誌,傳送的都是歸檔日誌,所以很容易丟失redo log,不建議使用

LGWR程式的SYNC:
                                  
  
注:1、LGWR 必須等待寫入本地日誌檔案操作和通過LNSn程式的網路傳送都成功,Primary DB上的事務才能提交,這也是SYNC的含義所在;
        2、Primary DB的日誌切換也會觸發Standby DB上的日誌切換,即Standby DB對Standby Redo Log的歸檔,然後觸發Standby DB的MRP或者LSP程式恢復歸檔日誌;
3、實時應用(Real-Time Apply):只要RFS把日誌寫入Standby Redo Log 就會立即進行恢復;歸檔應用:在完成對Standby Redo Log 歸檔才觸發恢復,預設的恢復方式。
   alter database recover managed standby database using current logfile disconnect from session; 把歸檔恢復轉換為實時應用
4、實時恢復,時可以新增time_out引數,alter system set log_archive_dest_2 = 'SERVICE=ST  LGWR  SYNC  NET_TIMEOUT=30' scope=both;

LGWR程式的ASYNC: 同LGWR(SYNC),主要區別是在於redo log傳輸為非同步

   ☆☆☆上面講的三種日誌傳送方式的具體解釋見Data Guard 理論知識
   *****這時有同學要問AFFIRM是什麼意思了,其實它決定歸檔日誌寫磁碟的方式,AFFIRM同步方式,noAFFIRM非同步方式

1)利用LGWR SYNC和時實應用,實現redo(不是日誌檔案)時實傳輸與應用
   按照上面的理論,只要主庫上配置為LGWR SYNC,那麼完成事務後,也即commit後,LGWR會把redo寫到online redo log裡面,同時會把redo傳送到standby,standby的
   RFS程式接收到這個日誌後寫入standby online redo log,再由MRPn程式立即應用到Standby DB中,這樣就OK,不過在主庫commit後,要等10s多的樣子才能在備庫看到
2)前人支招:
1、ARCH方式傳送日誌時,如果主備庫密碼檔案不一致,在重新設定密碼檔案後,必須重啟主庫才能使日誌傳送恢復正常。
2、LGWR方式傳送日誌時,如果主備庫密碼檔案不一致,在重新設定密碼檔案後,只需可以重啟主庫或重啟備庫就可使日誌傳送恢復正常。

 
注意事項:
    Arch:傳統的日誌傳送方式。現在只有在最大效能模式時才能採用。歸檔日誌通過primary上的arch程式傳送給standby的RFS程式。
    LGWr:oracle9i開始可以使用LGWR即時將日誌傳送到standby,而不再需要等到歸檔操作時才傳送,已減少可能的資料丟失。在三種保護模式下都可使用該方式傳送日誌。
          使用LGWR方式傳送,在standby必須先建立standby redo logfile
    

Maximum Availability Maximum Performance Maximum Protection   
AFFIRM NOAFFIRM AFFIRM   
SYNC ASYNC SYNC   
DB_UNIQUE_NAME DB_UNIQUE_NAME DB_UNIQUE_NAME

注意Data Guard 啟動順序:
啟動順序:先standby ,後primary;
閉順序:先primary 後standby;


四、利用RMAN搭建DG
    區別於COPY,不需求建立STANDBY控制檔案,RMAN複製會自動建立。
    然後,再執行duplicate複製
    1)在主庫上先進行來個全備
   RMAN> backup full database include current controlfile for standby plus archivelog FORMAT '/u02/backup/orcl_%U_%T'
          skip inaccessible filesperset 5 ;
   備庫在NOMOUNT下,執行duplicate
   SQL> rman target system/medical@DGDH auxiliary system/medical@DGDHSTB;
2)不用duplicate的RMAN
   主庫:
   rman>backup database format='/data/backup/rman_backup/%d_%s.bak';
   備庫:
   rman>restore database;
   sys>alter database recover managed standby database disconnect from session;

五、常見的主庫備庫上的操作
    備庫:
SQL>startup nomount;
SQL>alter database mount standby database ;
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL>alter database recover managed standby database disconnect from session;



七、主備切換switchover
    主備切換的檢查 
        SQL> select switchover_status from v$database;
主庫需要注意事項
A 如果switchover_status為TO_STANDBY說明可以轉換   直接轉換:alter database commit to switchover to physical standby;
B 如果switchover_status為SESSIONS ACTIVE 則關閉會話   alter database commit to switchover to physical standby with session shutdown;

備庫需要注意事項
A 如果switchover_status為TO_PRIMARY 說明標記恢復可以直接轉換為primary庫   alter database commit to switchover to primary
B 如果switchover_status為SESSION ACTIVE 就應該斷開活動會話  alter database commit to switchover to primary with session shutdown;
C 如果switchover_status為NOT ALLOWED 說明切換標記還沒收到,此時不能執行轉換。

切換時如果不滿足條件,請檢查:   
確認主庫和從庫間網路連線通暢;
確認沒有活動的會話連線在資料庫中;
PRIMARY資料庫處於開啟的狀態,STANDBY資料庫處於MOUNT狀態;
確保STANDBY資料庫處於ARCHIVELOG模式;
如果設定了REDO應用的延遲,那麼將這個設定去掉;
確保配置了主庫和從庫的初始化引數,使得切換完成後,DATA GUARD機制可以順利的執行;
如果是最大保護模式,先變成最大效能模式。

切換的順序:先從主庫到備用,再從備庫到主庫

****注:10.2.0.1備庫老是在not allowed狀態,可能是BUG吧

八、failover

         
 


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

相關文章