1. 程式人生 > >Oracle DataGuard介紹

Oracle DataGuard介紹

 DataGuard 概述
DataGuard工作流程
這裡寫圖片描述
主庫把日誌傳輸到備庫,主庫記錄所有的操作資訊,通過兩種方式傳輸:
1:通過LNS(監聽網路服務)傳輸到遠端,通過service定義遠端資料庫,傳輸無延遲,延遲1~2秒。
2:把記憶體中得日誌通過lgwr程序寫到線上重做日誌中,一段時間,通過arco程序寫到歸檔日誌中,這裡是傳輸歸檔日誌到遠端伺服器,這樣的方式會造成延遲,延遲時間取決於日誌歸檔的時間。我們要確保主庫的redolog的完整性,如果不完整 備庫的資料就會缺失,造成資料的不完整。當備庫沒有接受到主庫的redolog的時候,會自己去主庫去(gap resolution)索取缺失的那塊日誌。一般都是主庫主動傳輸日誌,只有在特殊情況下才會使用被動模式讓備庫來主庫索取日誌。若果主庫在傳輸過程中日誌斷檔了,備庫也會去主庫把斷檔的日誌取回,如取回的日誌失敗了,這個時候備庫就不會在取了,這就需要手工同步日誌,把備庫斷檔的日誌傳輸到備庫,手動註冊進去就好了。
在備庫,有個程序rfs(remote file service)專門負責主庫傳輸過來的日誌,他有兩個作用:
1.把接收過來的日誌交給備庫的日誌應用程序來使用(redolog apply),
2.把接收來的日誌放在備庫歸檔的地方(stabdby redolog),
備庫的MRP(恢復管理程序)應用傳輸過來的日誌進行恢復,還有一種方式是備庫把接收過來的日誌進行日誌挖掘,得到對應的sql,把sql交給LSP(邏輯程序)應用。所以在備庫存在兩種檔案,聯機日誌(standby online redolog)和歸檔日誌(arch redolog)。備庫接收的日誌都是直接放到記憶體當中,為了增加可靠性最好在備庫設定standby online redolog用於儲存接收過來的日誌,所以備庫必須要設定線上歸檔日誌。
主庫備庫之前的日誌傳輸以日誌流的形式傳輸,按照事務的方式提交傳輸。
HA&DG
Dataguard 是HA(hight available)組成的一部分。
SwitchOver&FailOver
1、 不會被自動呼叫,一般情況下通過呼叫SQL語句執行
2、 Switchover
計劃中角色轉換
主要用於作業系統和硬體的維護
備庫切換成主庫,而主庫切換成備庫,在切換完成後,這個過程沒有任何的資料丟失和損失。
3、 failover
非計劃中的角色轉換
在緊急情況下使用
根據資料的保護模式的不同,只有少量的或者是很少的資料損失
備用資料庫型別
1、 物理備用資料庫
基於資料塊級別和主資料庫一致。
通過應用日誌(redo apply)與主庫保持同步
在mount standby階段進行應用日誌恢復,而同時也可以open read only提供報表查詢。
2、 邏輯備用資料庫
與主庫共享同樣的模式定義
通過應用SQL(sql apply)與主庫保持一致
接收到主庫傳輸過來的日誌後,邏輯備用資料庫是通過logmnr將日誌轉換成sql,在邏輯備庫的表中,表可以同時用於恢復apply,報表查詢功能 open read only。
REDO APPLY
物理備用資料庫的redo apply主要構架如下:
一個主資料庫,最多有九個同樣的備用資料庫,他們都是對主資料庫一個同樣的拷貝。備用資料庫的個數受log_archive_dest_n限制,其中一個是用於本庫歸檔日誌目錄,另外幾個可用於接收備用資料庫的日誌目錄。主節點資料庫是開啟並且可讀寫的,而備用資料庫要麼處於恢復模式或者只讀開啟模式。
備用資料庫自動的獲取和應用從主庫傳送過來的歸檔日誌,日誌傳輸的時機為:日誌在主庫產生的時候,日誌在主庫歸檔的時候,手動強制歸檔 (alter system archive log current),手動強制切換日誌組(alter system switch logfile)。當日志在主庫產生的時候傳輸那麼就需要在備庫建立備用資料庫日誌檔案。
在備庫中使用標準的oracle恢復技術應用日誌。
在計劃停機中,可以切換主庫到備用資料庫。
當主節點down機時,可以失敗切換到其他備用節點。
物理備用資料庫可以用來作為對主資料庫的備份。
SQL APPLY
當日志傳輸到備用資料庫時,它並不是立即應用日誌,而是通過logmnr將日誌檔案轉化成SQL語句,然後再在備庫應用。邏輯備用資料庫可以以read write形式開啟。
SQL Apply 引擎構架
物理備用資料庫和邏輯備用資料庫的最大的區別在於應用引擎,也就是所說log apply service。在邏輯備用資料庫環境下,如下程序參與了應用引擎工作。
LSP0:該程序是一個協調程序,用於協調並行執行的mining process和apply process。
PX:由lsp0程序同時產生兩組px程序,一組用於挖掘從主節點傳送過來的歸檔日誌,將其轉化為sql,另外一組PX程序用於應用這些日誌到邏輯備用資料庫。需要主要的是挖掘和應用的兩組程序是同時執行,並且由lsp0程序進行同步以維持資料庫比較高的效能。
DG service
DataGuard提供了三種類型的服務:
Log transport service:
控制從主庫到多個備庫節點的日誌檔案的自動傳輸。
Log apply service
控制何時、如何應用日誌到備用資料庫
Role management services
一個數據庫只能工作在兩個互斥的任一角色下:primary/standby。Role management service、log transport service,log apply service一起工作可以動態的改變資料庫的執行角色。改變角色時通常為switch over/failover。
資料保護模式
Oracle提供了三種資料庫保護模式,我們可以根據成本,可用性,效能,事務保護等去配置何種模式。
1) 最大保護
Maximum protection:
最大保護模式是最高級別的資料保護模式,它在災難恢復時可以零資料損失。
當工作在最大保護模式時,重做日誌被同步傳輸到備用資料庫。而對事務而言,至少該事務在其中一個備用資料庫節點被確認完成,該事務才能提交。該種模式下一般至少需要兩個備用資料庫。該種方式只對物理備用資料庫有效。
2) 最大可用性
Max availability
最大可用是指如果STANDBY不可用,主資料庫仍然可以處理事務,只是在問題被糾正後,STANDBY和主資料庫進行再同步。這樣的一個問題是:當再同步之前有FAILOVER時,有些資料可能會丟失。
3) 最大效能
Maximum performance
該種保護模式是資料庫預設的保護模式,它提供最少的資料保護,但是提供最大的效能模式。該種模式下的事務以及日誌資料都是被非同步的傳輸到備庫。可以通過lgwr或者arch程序進行傳輸。事務並不會等待備庫的確認就可以在主庫直接完成。如果備庫某個節點不可用,對主庫沒有任何的影響,提供了主庫的最大的可用性與最大效能。
當主節點down機後,可能會有部分事務在主節點已經完成,但是日誌還沒有傳輸到備庫節點。如果直接切換會有資料丟失的。

資料庫再啟動的時候,保證先啟動備庫再啟動主庫;
資料庫在關閉的餓時候,保證先關閉主庫在關閉備庫。
RAC&DG
相互補充,可以同時使用。
 理解DataGuard構架
DG整體構架
Oracle dataguard為了災難恢復和高可用性通過使用多個程序達到自動控制的目的。對於物理備用資料庫而言,備用聯機日誌是可選的。除非備庫執行在最大效能模式,該模式需要資料庫執行在物理備用資料庫模式,並且含有備用聯機重做日誌。邏輯備用資料庫並不使用備用聯機重做日誌。
Log Transport Service
主節點上,日誌傳輸服務主要使用如下幾個程序:
1、 LGWR
LGWR蒐集事務日誌,並且更新聯機日誌。在同步模式下,LGWR直接將redo資訊直接傳送到備庫中的RFS程序,主庫在繼續進行處理前需要等待備庫的確認。在非同步情況下,也是直接將日誌資訊傳遞到備庫的RFS程序,但是不等待備庫的確認資訊主庫程序可以繼續執行處理。
2、 ARCH
ARCHn或者是一個SQL session執行了一個歸檔操作,為了恢復的需要,建立了一個聯機日誌的拷貝。Archn程序可以在歸檔的同時,傳遞日誌流到備庫的RFS程序。該程序還用於前瞻性檢測和解決備庫的日誌不連續問題(GAP)。
3、 FAL
Fetch archive log 只有物理備庫才有該程序。
FAL程序提供了一個client/server的機制,用來解決檢測在主庫產生的連續的歸檔日誌,而在備庫接受的歸檔日誌不連續的問題。
該程序只有在需要的時候才會啟動,而當工作完成後就關閉了,因此在正常情況下,該程序是無法看見的。
我們可以設定通過LGWR,ARCH程序去傳遞日誌到備庫,但是不能兩個程序同時傳送。
該程序是如何互動的呢?fal_client,fal_server引數的。
Log Apply Service
備庫節點上,日誌應用程序主要使用如下的程序。
1、 RFS
Rfs程序主要用來接受從主庫傳送過來的日誌資訊。對於物理備用資料庫而言,RFS程序可以直接將日誌寫進備用重做日誌,也可以直接將日誌資訊寫到歸檔日誌中。為了使用備庫重做日誌,我們必須建立他們,一般和主庫的聯機日誌大小以及組一樣。
2、 arch
只對物理備庫,arch程序歸檔備庫重做日誌,這些日誌以後將被MPR程序應用到備庫。
3、 MRP
Managed recovery process。
該程序只針對物理備庫。該程序應用歸檔日誌到備庫。如果我們使用SQL語句啟用該程序ALTER DATABASE RECOVER MANAGED STANDBY DATABASE,那麼前臺程序將會做恢復。如果加上disconnect語句,那麼恢復過程將在後臺程序,發出該語句的程序可以繼續做其他的事情。
4、 LSP
Logical standby process。
只有邏輯備庫才會有該程序。LSP程序控制著應用歸檔日誌到邏輯備用資料庫。
DataGuard環境要求
1、 主庫必須執行在歸檔模式
2、 cpu架構可以不一樣,但是指令集必須一樣。
3、 作業系統可以不一樣
4、 作業系統位數可以不一樣
5、 資料庫位數可以不一樣,11g除外
6、 主備庫一般上保持一致,原則上主庫保持低版本,備庫版本號高。
7、 主備庫檔案路徑、檔案系統原則上保持一致。
備庫狀態
我們可以維護備庫為如下的資料庫狀態
1、 物理備庫

Managed recovery state
該模式下log transport service歸檔日誌到備庫,log apply service 自動應用這些日誌。資料庫不處於mount狀態,任何讀都不允許。

Read only state
如果我們想做備庫為報表功能,那麼在備庫環境中,我們以read only形式開啟資料庫。在備庫log apply service將不能夠應用歸檔日誌到備庫,但是主庫的log transport service可以繼續傳遞迴檔日誌到備庫。

我們可以非產輕鬆的在上述兩種執行下程序切換,一般情況下我們會在如下的場景下程序切換:
1) 物理備庫用於報表模式
2) 為了災難的保護,檢查資料是否正常的傳遞到了備庫
2、 邏輯備庫
Open read write mode
該種模式,備庫仍然可以不斷的應用歸檔日誌,但是該備庫同時可以提供報 表查詢功能。
當log apply service正在更新一張表時,該表仍然可以查詢,但是在該表上無法做任何的DML操作。如果其他模式下的物件沒有被log apply service所維護,那麼我們可以更新該模式下的那些物件。
 用SQL建立物理備庫
學習完本章節,我們可以使用SQL建立物理備庫。
總體
1、啟用force logging
2、備份主庫
3、copy檔案到備庫
4、設定備庫的引數檔案
5、啟動備庫到nomount
6、配置oracle net
7、配置主庫的引數檔案
8、啟動日誌傳輸
啟用force logging
1、建議啟用該屬性,以保證資料的一致性
2、啟用該屬性後,即使執行了nologging操作,也會產生相應日誌。
3、臨時表空間和臨時段的資訊不會被記錄
4、建議在物理和邏輯備庫上啟用這些資訊
5、alter database force logging
Alter database no force logging

    設定該特性後,覆蓋了所有的基於表空間以及某個物件設定的log屬性。該特性必須在所有的unlogging的程序完成後才能啟用。
   Noforce logging則禁用了該功能。對應的資料庫的欄位為v$database.force_logging,該操作可以在資料庫開啟或者mount階段執行,但是建議在mount階段做。

備份主庫
1、 主庫必須在歸檔模式
alter database mount;
alter database archivelog;
同時必須保證log_archive_start=true
2、做一個主庫的備份
可以做一個冷備份,也可以做一個聯機備份
3、建立備庫的控制檔案
ALTER DATABASE CREATE STANDBY CONTROLFILE
AS ‘file_name’ [REUSE];
拷貝檔案到備庫
1、拷貝如下檔案到備庫
資料檔案,備庫控制檔案,引數檔案
3、 如果主節點與備用節點的目錄結構一致,則不需要如下引數,如果目錄結構不一致的話,則需要如下引數,並且需要在備庫控制檔案中修改相關檔案的路徑。

DB_FILE_NAME_CONVERT:主庫到備庫相關目錄的路徑對映
LOG_FILE_NAME_CONVERT:主庫到備庫日誌檔案路徑對映
STANDBY_FILE_MANAGEMENT:當該引數設定為auto時,在主節點增減或者刪除檔案,在備份節點也會同樣的執行。
這些引數都是在物理備用資料庫中的引數檔案設定的,但是最好在主庫的引數檔案中也需要設定。
設定備庫引數檔案
當引數檔案從主庫拷貝到備庫後,需要在物理備庫下修改如下引數檔案
1、DB_FILE_NAME_CONVERT
當主備庫目錄結構不一致的時候需要在物理備庫設定該引數。
允許多個檔案對。
當在物理備庫下,該引數應用於資料庫。
db_file_name_convert =
(‘/oracle1/dba/’,’/ora1/stby_dba/’,’/oracle2/dba/’,’/ora2/stby_dba/’)
字串成對出現,第一個為主庫檔案路徑,接下來的是備庫中對應的檔案路徑。
2、LOG_FILE_NAME_CONVERT
與DB_FILE_NAME_CONVERT引數類似
只有當備庫變為主庫的時候才需要聯機日誌
log_file_name_convert = (‘/oracle1/logs/, ‘/ora1/stby_logs/’)
3、LOG_ARCHIVE_FORMAT
指出日誌檔案的格式名字
%t:執行緒號
%T:以0補充的執行緒號
%s/S:日誌序號
%d/D:資料庫ID
%a/A:資料庫啟用號(資料庫第一次開啟時產生)
預設的日誌格式為:log_archive_format = %d_%t_%s.arc,補0一般預設是8位。

  在如下路徑下生成日誌LOG_ARCHIVE_DEST_n,STANDBY_ARCHIVE_DEST。

4、STANDBY_FILE_MANAGEMENT
當在主庫上增加或者是刪除資料檔案的時候可以維持主備庫的一致性。
預設值為:manual必須在備庫上手工增加或者是刪除檔案。
Auto:在備庫的資料檔案的增加或者刪除是自動執行的
該引數在主備庫都起作用。
引數的設定方法:standby_file_management = auto,主備庫都設定。

 當引數設定為auto時,在備庫的如下操作是不允許的:
 1)ALTER DATABASE RENAME
 2)ALTER DATABASE ADD/DROP LOGFILE [MEMBER]
 3)ALTER DATABASE CREATE DATAFILE AS ...
 但是ALTER DATABASE ADD/DROP STANDBY LOGFILE操作仍然是允許的。

 當我們在主庫節點增加一個日誌檔案的時候,而我們想在備庫中也增加一個日誌檔案,那麼我們需要做如下的操作:需要手工去操作。

5、STANDBY_ARCHIVE_DEST
定義在備用資料庫上生成歸檔日誌的地址。
在物理備庫上被RFS程序所使用。
standby_archive_dest = ‘/standby/arc_dest/’
standby_archive_dest = ‘LOCATION=/standby/arc_dest/’
上述引數與該引數一起使用log_archive_dest_n=’service=standby’。
6、LOG_ARCHIVE_START
自動歸檔已經填滿的日誌。
當該引數設定為false時,可能需要管理員手工去歸檔需要歸檔的日誌。
該引數只有在歸檔模式下才能生效,如果在非歸檔模式設定該引數無效。
為了便於切換,一般需要設定此引數為true,該引數在使用standby redo logs和fal_server支援時需要設定此引數為true。
7、REMOTE_ARCHIVE_ENABLE
對日誌的傳送和接受的控制。
該引數的經常設定的值如下:
該引數在主備庫中都需要設定。
TRUE - Allows both sending and receiving to and from remote sites. This is the default。
FALSE - Prevents both sending and receiving to/from remote sites。
SEND - Allows only sending to remote sites。
RECEIVE - Allows only receiving from remote sites。
RAC每個節點中該引數的設定必須相同。
該引數的值同v$database.remote_archieve
物理備庫引數檔案
compatible=’9.2.0’
control_files=’D:\USER01\ORADATAB\U01\control01.ctl’
db_file_name_convert=
‘D:\USER01\ORADATAA\U01’,’D:\USER01\ORADATAB\U01’,
‘D:\USER01\ORADATAA\U02’,’D:\USER01\ORADATAB\U02’
db_name=’TESTA’
lock_name_space=’testb’
log_file_name_convert=
‘D:\USER01\ORADATAA\U03’,’D:\USER01\ORADATAB\U03’
remote_archive_enable=’TRUE’
remote_login_passwordfile=’exclusive’
standby_archive_dest=’D:\USER01\ORADATAB\U04’
standby_file_management=’auto’
啟動物理備庫
啟動到mount階段
STARTUP MOUNT PFILE=STBY_INIT.ORA
建立備庫日誌檔案
ALTER DATABASE ADD STANDBY LOGFILE
(‘/oracle/dbs/log1c.rdo’,’/oracle/dbs/log2c.rdo’)
SIZE 500K;
啟動MPR程序
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT (From Session);

物理備庫日誌檔案是一組日誌,RFS程序可以將日誌寫進備庫日誌檔案,然後由歸檔程序進行歸檔,RFS程序也可以直接將日誌寫進歸檔日誌中。Standby redo log在最大保護模式和最大可用模式下是必須的,但是在最大效能模式下是可選的,但是也建議建立備庫歸檔日誌。

配置Oracle網路
配置網路,需要使主備庫能夠相互通訊。
配置備庫的監聽
重啟主備庫的監聽
設定主庫引數
LOG_ARCHIVE_DEST
LOG_ARCHIVE_STATE
ARCHIVE_LAG_TARGET

1、 Log_archive_dest_n
至少包括2個該引數,引數中必須包含location,server
Location指定一個有效的路徑名,本地的日誌歸檔地址。
Service指定一個有效的網路服務名,該服務名指向:
A standby database:就是一個備用資料庫,可以為物理的,也可以為邏輯的。
An archive log repository:歸檔知識庫,允許遠端歸檔資料庫。歸檔知識庫是通過備庫的控制檔案建立,啟動到mount狀態,該知識庫不包含任何的資料檔案。
A cross-instance archival database:交叉的歸檔庫可以是主庫也可以是備庫。
比如:
log_archive_dest_1=’LOCATION=D:\ARC’
log_archive_dest_2=’SERVICE=standby’

MANDATORY和OPTIONAL屬性
OPTIONAL為失敗做準備,允許主庫重寫
MANDATORY,除非歸檔日誌已經歸檔到該地址,否則日誌不允許覆蓋。
通常情況下,某一個地址將被設定為強制的。預設值為可選擇的。
相關設定如下:
log_archive_dest_1=’LOCATION=D:\ARC’
log_archive_dest_2=’SERVICE=standby MANDATORY’
log_archive_dest_3=’SERVICE=o9i1 OPTIONAL’
2、 LOG_ARCHIVE_DEST_STATE_n

定義了目前歸檔地址的狀態。可以應用於主備庫。
1、enable預設值,就是該地址是有效的歸檔地址。
2、defer:預留相關引數的地址和屬性,但是該地址在目前不做為歸檔地址,除非該地址再次enabled。
3、reset:與defer一樣,但是會清除該引數指定的地址的相關錯誤
4、alternate:當一個歸檔地址失敗的時候,另外一個地址作為備用地址。
log_archive_dest _3=’SERVICE=stby1_path1 NOREOPEN ALTERNATE=LOG_ARCHIVE_DEST_4’
log_archive_dest _4=’SERVICE=stby1_path2 NOREOPEN OPTIONAL’
log_archive_dest_state_3=ENABLE
log_archive_dest_state_4=ALTERNATE
3、 ARCHIVE_LAG_TARGET
1、在主庫設定
2、設定的單位為秒,在主庫上即使日誌沒滿,過了這麼長時間後日志必須切換。
3、設定備庫等待處理日誌的最大時間
4、預設設定為0,不使用該功能
5、該引數範圍值為:60—7200,建議值為30分鐘
6、該值設定太小,可能會導致主庫的日誌的頻繁切換。一般情況下要等主庫的日誌完成後才能應用到備庫。比如日誌為100M,而目前日誌已經寫為80M,而此時主庫失敗,那麼必須在該80M日誌在備庫應用後,才能無資料損失的切換。
4、 LOG_ARCHIVE_TRACE
1、該引數是可選的作為診斷用
2、設定該引數為一個整數,用來檢視想備庫地址歸檔日誌的進度。
3、在主庫上記錄主庫向備庫傳遞日誌的trace記錄,而在備庫記錄備庫接受到主庫的trace記錄。該trace資訊記錄在user_dump_dest下。
4、在主庫上設定該引數,需要重新啟動資料庫。
資料庫在open或者mount時
ALTER SYSTEM SET LOG_ARCHIVE_TRACE=trace_level
主庫引數檔案
archive_lag_target=0
compatible=’9.2.0’
db_name=’TESTA’
log_archive_dest_1=’LOCATION=D:\USER01\ORADATAA\ARCHIVE1’
log_archive_dest_state_1=’ENABLE’
log_archive_dest_2=’service=TESTB’
log_archive_dest_state_2=’ENABLE’
log_archive_format=’testa_%s.arc’
log_archive_max_processes=3
log_archive_start=TRUE
log_archive_trace=0
log_parallelism=1
remote_archive_enable=’TRUE’
remote_login_passwordfile=’exclusive’
standby_archive_dest=’D:\USER01\ORADATAA\ARCHIVE2’
standby_file_management=’MANUAL’
開始日誌傳輸服務
Alter system log archive current;
歸檔當前日誌,並且備庫的RFS服務將開始接受日誌。
主備庫在同一主機
1、在備庫設定LOCK_NAME_SPACE引數
2、備庫資料庫檔案必須與主庫在不同的地址
3、該引數允許在一臺機器上同時開啟兩個資料庫名字一樣的資料庫。
否則會出現:ORA-01102 “cannot mount database in EXCLUSIVE mode.”

 保護模式和傳輸服務
目標
建立備用重做日誌
描述不同的保護模式
改變不同的保護模式
修改日誌傳輸服務為我們需求服務
備用重做日誌
備用重做日誌一般在最大保護和最大可用模式下需要,但是一般建議在最大效能模式下也建議使用備用重做日誌。
備用重做日誌必須在歸檔後才能被應用到備庫。備用歸檔是自動執行的。
邏輯備庫可以建立備用重做日誌,但是邏輯備庫不支援使用備庫重做日誌。
備庫重做日誌配置
當建立備庫時我們必須建立與主庫的日誌組數和大小一致。如果我們使用不同的大小的聯機日誌,那麼RFS將會自動調整備庫的日誌到一樣的大小。
在如下情況,RFS程序不會寫備用重做日誌,而會歸檔日誌:
1、備庫無備用重做日誌
2、在備庫中找不到與主庫中大小一樣的日誌檔案
3、所有正確大小的備庫重做日誌都沒有被歸檔
備庫聯機日誌數量
在create database的如下引數會影響redo log檔案的數量。
Maxlogfiles:每個資料庫備用重做日誌和聯機重最日誌的最大組數。
Maxlogmembers:每個組中最大的成員數。
修改上述兩個引數的唯一方法就是重新建立控制檔案。而如果我們重新建立了主庫控制檔案,那麼我們必須重新建立備庫的控制檔案。在重新建立控制檔案前我們必須確保所有的日誌都已經應用到備庫中。簡單的說,我們應該停止備庫的恢復管理模式,在主庫上建立一個新的備用控制檔案,將該檔案拷貝到備庫節點,然後mount備庫後,再次將備庫置於恢復管理模式。
使用SQL增加備用聯機日誌
ALTER DATABASE ADD STANDBY LOGFILE
(‘/oracle/dbs/log1c.rdo’, ‘/oracle/dbs/log2c.rdo’) SIZE 500K;

ALTER DATABASE ADD STANDBY LOGFILE MEMBER
‘/oracle/dbs/log2b.rdo’ TO GROUP 2;

SELECT * FROM V$LOGFILE
WHERE TYPE = ‘STANDBY’; —-type有兩個值:online/standby

    雖然備用日誌檔案只是在物理備用資料庫環境下才使用,但是oracle建議在主節點仍然應該建立備用日誌檔案,這樣方便災難切換,而不需要DBA的任何干預。
    查詢standby redo log方法:
    V$standby_log(active/unused)
    V$logfile(type=online/standby)

傳輸方法和保護模式
一種特定的保護模式應該需要一種特定的日誌傳輸方法。
僅僅傳輸方法不能決定日誌傳輸模式。

   當我們定義從主庫傳輸到備庫(物理或者是邏輯備庫)的日誌傳輸方法的時候,我們必須設定該傳輸方法應該能夠支援特定的保護模式。但是僅僅靠傳輸方法無法決定保護模式。
   通常一旦定義了某種傳輸方法,那麼必須和某種保護模式配合使用。然後就是oracle的內部機制確保主備庫正常執行。

LOG_ARCHIVE_DEST_n引數屬性
ARCH/LGWR
設定是archiver還是lgwr程序去負責從主庫傳輸日誌到備庫節點,預設是archiver程序。

    Arch含義就是在歸檔期間對日誌進行傳輸。充當傳輸服務功能的可以是後臺的歸檔程序,也可以是前臺手工歸檔的一條SQL。
   LGWR含義就是當LGWR寫聯機日誌的時候,同時將日誌寫進備庫重做日誌。LGWR就是日誌傳輸服務程序。當LGWR傳輸日誌到遠端地點的時候,LGWR同遠端資料庫例項建立一個連線,如果建立連線失敗,那麼會自動啟用歸檔程序,直到能夠成功建立連線。

SYNC/ASYNC
當使用LGWR程序去傳遞日誌的時候,網路IO同步還是非同步的。
預設是同步的,並且有並行屬性。

    SYNC含義就是網路IO與目的地是同步的。也就是說每當啟動一個IO時,LGWR會等待該IO完成才能繼續處理。當需要建立無資料損失的環境的時候,需要指定Sync屬性,因為該屬性可以保證日誌資訊準確的傳輸到了備庫節點。
   當使用LGWR傳輸日誌的時候,如果有多個備庫節點,當設定SYNC=NOPARALLE,那麼LGWR必須等待一個目的地址的IO完成才能寫下一個IO地址,也就是每個地址是順序寫的。如果指定SYNC=PARALLE,其實IO就是非同步的,也就是多個目的地址可以同時進行IO操作,但是同樣,LGWR也需要等待每個目的地的IO完成後才能繼續處理。

  ASYNC[=blocks] (預設值是2048,塊的個數),指定為每個地址非同步執行IO。LGWR不檢查本次IO操作是否完成,直接可以繼續處理下一個IO請求。使用非同步IO可以使備庫的環境對主庫效能影響最小。2048是指在SGA中網路緩衝的大小。

AFFIRM/NOAFFIRM
保證重做日誌被寫進物理備用資料庫。預設是NOAFFIRM。
Affirm是保證日誌已經寫到備庫地址。當使用lgwr,sync,affirm屬性的時候需要直到IO全部完成事務才能提交。該引數對資料庫效能是有影響的。
Noaffirm就是說LGWR的IO操作是非同步的,該引數是預設值。
備用聯機日誌
物理備庫的最大保護和最大可用性需要使用備庫,但是最大效能是建議建立備用重做日誌。而邏輯備用資料庫不使用備用重做日誌。
保護模式
1、決定使用何種保護模式
2、使用最大保護和最大可用性需要使用備用重做日誌
3、如果保護模式需要備用重做日誌,那麼使用sync,async日誌傳輸模式
4、最大保護模式至少需要一個備庫點使用sysnc傳輸模式,建議使用兩個
5、最大可用性也至少需要一個備庫點使用sysnc傳輸模式
6、最大效能至少一組需要使用async或者是arch
SQL改變保護模式
在主庫上執行如下指令碼,可以改變資料庫的執行保護模式
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {PROTECTION | AVAILABILITY | PERFORMANCE};
最大保護模式
保證無資料損失
最高級別的資料保護
必須使用sync傳輸方法
必須使用備用重做日誌
如果沒有可用的備用重做日誌,那麼主庫將down機

該模式最高級別的資料保護模式,當以sysnc配置日誌傳輸方法時,一個事務至少等待相關日誌被寫進至少一個備庫點時,事務才能完成。當強制force logging屬性時,如果日誌無法寫到任何一個備庫,那麼主庫將關閉。
最大可用性
無資料損失
第二級別的資料保護模式
必須使用sysnc傳輸方法
對物理備庫而言,必須使用備用重做日誌
如果無可用備庫,那麼主庫不會down掉。

    基本同最大保護模式,但是當備庫全部不可用時,主庫將自動切換到最大效能模式,直到備用節點可用,再次執行在最大可用模式。

最大效能模式
預設的資料保護模式
可以使用SYNC, ASYNC, ARCH模式
可以使用備庫重做日誌
當事務提交的時候沒必須想備庫寫日誌資訊
無可用備庫時,備庫不會down機,並且該模式可能會有資料丟失。

注意:如果使用sysnc的傳輸方法,那麼主庫的效能可能會受到影響。
延遲日誌應用
Nodelay
Delay=30分鐘
當日志在備庫節點歸檔後,是立即應用到備用資料庫還是等待一段時間後才應用該歸檔日誌。
在最大保護模式,該引數設定無效。
延遲日誌應用可以防止主庫的錯誤操作立即應用到備庫中去。
其他影響備庫的引數
ALTERNATE, NOALTERNATE
1、可以為某一個目的地指定另外一個目的地。
2、允許一個失敗的目的地去改變目的地
比如:一個地址磁碟滿了,而轉移到另外一個磁碟
Oracle的網路服務斷了,需要轉移到另外一個網路服務
3、需要指定noreopen或者maxfailure引數
4、引數設定
log_archive_dest_3=’SERVICE=stby1_path1 NOREOPEN ALTERNATE=LOG_ARCHIVE_DEST_4’
log_archive_dest_4=’SERVICE=stby1_path2 NOREOPEN OPTIONAL’
log_archive_dest_state_3=ENABLE
log_archive_dest_state_4=ALTERNATE

一個歸檔地址只能有一個替代的歸檔地址。當原歸檔地址傳輸日誌失敗時,會啟用替代的歸檔地址。替代地址不能是自己。替代地址的狀態為alternate,當原地址失敗的時候會自動啟用該地址。

DEPENDENCY, NODEPENDENCY
定義了一個目的地址依賴於另外一個地址的成功傳輸成功。
指向同一系統的兩個目的地只需要一份日誌的拷貝。
預設值是非依賴的。
設定引數如下:
log_archive_dest_2=’SERVICE=o9i2 LGWR SYNC AFFIRM’
log_archive_dest_3=’SERVICE=o9i1 ARCH DEPENDENCY= LOG_ARCHIVE_DEST_2’
應用場合:主備庫在同一個主機上,備庫直接可以獲取主庫的歸檔日誌,那麼就不需要額外存放第二份歸檔了。

MAX_FAILURE, NOMAX_FAILURE
日誌傳輸嘗試與該地址嘗試建立連線的次數。
需要reopen引數
沒有預設的次數
當max_failure=0就是設定了nomax_failure,預設值就是nomax_failure

當我們設定了max_failure數值時,傳輸程序當一次連線失敗時,不會立即開啟,而需要設定reopen, 設定重新開啟歸檔地址的時間間隔。
當同時設定reopen與max_failure次數為非0值時,那麼系統會以max_failure引數為準,同時我們可以檢視相關檢視:V$ARCHIVE_DEST下的FAILURE_COUNT欄位與REOPEN_SECS。

NET_TIMEOUT, NONET_TIMEOUT
可以避免LGWR程序網路超時
引數值從15到1200
該值可以覆蓋作業系統設定的預設的網路超時。要小心設定該引數值,不合理的引數設定可能會導致主庫當機。

REOPEN, NOREOPEN
預設值為5分鐘
在再次嘗試重新連線失敗的目的地前需要等待的秒數。
失敗的原因可以是網路失敗,配額問題,磁碟滿等等。

   如果設定為reopen那麼,那麼失敗的地址將會標記為不可用,除非:

1、 手工重新啟動目的地
2、 使用alter語句設定reopen屬性
3、 例項重啟
TEMPLATE, NOTEMPLATE
指定每個目的地存放歸檔日誌的路徑
覆蓋備庫的引數設定
 Switchover&Failover
目標
解釋資料庫的角色概念
執行角色轉換
執行失敗切換
角色
Oracle 資料庫中含有2種角色
使用者角色:定義了一組許可權的集合,該角色可以分配給使用者,也可以分配給其它角色。
資料庫角色:在備庫中資料庫扮演什麼樣的角色,primary還是standby。
v$database.DATABASE_ROLE標識了資料庫的執行角色。

處於備庫環境中,資料庫有兩種型別,phsical standby,logical standby。
角色管理服務
一個數據庫執行在如下互相排斥的角色中:
Primary role:一個數據庫執行在primary role,那麼log transport services傳遞重做日誌到備庫。
Standby role:一個數據庫執行在standby role,那麼log apply services應用歸檔日誌到備庫。
角色管理服務允許我們動態的進行在主備庫中進行角色切換。

我們可以使用角色管理服務,進行主備庫的計劃中的角色切換,這個叫switchover。或者是非計劃中的角色切換,叫failover。
Switchover&Failover
切換都不是自動被呼叫的。我們必須使用SQL語句去執行角色切換。不要想使用switchover進行軟體的滾段升級,這個是不支援的。

Switchover
計劃中的角色轉換
使用者作業系統和硬體的維護

Failover
非計劃中的角色切換
在緊急情況下使用
根據保護模式的不同,可能會沒有或者很少的資料損失
角色轉換決策樹
角色轉換(switchover&failover)的最終目的是儘快的使主庫線上,而同時儘量減少資料損失或者是無資料損失。儘量選擇down機時間最短,同時資料損失最小的策略。總之在失敗切換前,我們應該先考慮修復主資料庫或者進行無資料損失的角色轉換。
即使使用無資料損失的備庫方案,修復主庫可能會比切換到備庫更快點。如果修復了主庫,那麼就不需要修改客戶端的連線。但是如果修復工作導致了任何的資料損失,那麼我們可能需要重新建立所有的備用資料庫。
通常情況下,最合適切換的備庫為:已經應用了最多的歸檔日誌的備用資料庫。
Switchover
Switchover操作轉換了主和被節點的角色,有如下特點
1、 無資料損失
2、 新主節點資料庫不需要重新設定聯機日誌
如果切換操作涉及的是物理備庫,那麼兩個都需要關閉和重啟,但是其他沒有角色切換的備庫節點是不需要重新啟動的。如果切換的備庫是邏輯備用資料庫,那麼主備節點都不需要重啟,就可以直接切換。
切換前
Switchover工作只能在主庫節點發起,而不會在備庫節點發起切換工作。
切換後
切換後南京的使用者需要重新配置才能進行資料庫的再次連線。備用資料庫的切換不會自動從一個數據庫到另外一個數據庫切換程序。
Switchover&Standby Redo Logs
備庫重做日誌最好在主庫上建立以方便switchover。
備庫重做日誌最好在主備節點上都建立,即使備用重做日誌在主節點並不使用,這樣做主要是為了方便switchover。
準備switchover
建立好初始化檔案
建立好主備庫連線的網路
將被切換到主庫的備庫必須處於歸檔模式
關閉所有連線到主庫的連線

     一般情況下主備庫都需要維持2組引數檔案,這樣非常方便角色切換。最好能夠將所有的備庫都置於歸檔模式,這樣在切換的時候,任何備庫都可以作為切換到主庫。

切換到物理備庫SQL
1、確信可以執行切換操作。查詢vdatabase.SWITCHOVERSTATUSsessionactivetostandby2ALTERDATABASECOMMITTOSWITCHOVERTOPHYSICALSTANDBYWITHSESSIONSHUTDOWNWAIT;wait