数据库中的几个概念 - LGWR, ARCH,ASYNC,SYNC,AFFIRM
雙機(jī)熱備(雙機(jī)容錯(cuò))就是對(duì)于重要的服務(wù),使用兩臺(tái)服務(wù)器,互相備份,共同執(zhí)行同一服務(wù)。當(dāng)一臺(tái)服務(wù)器出現(xiàn)故障時(shí),可以由另一臺(tái)服務(wù)器承擔(dān)服務(wù)任務(wù),從而在不需要人工干預(yù)的情況下,自動(dòng)保證系統(tǒng)能持續(xù)提供服務(wù) 雙機(jī)熱備由備用的服務(wù)器解決了在主服務(wù)器故障時(shí)服務(wù)不中斷的問題。但在實(shí)際應(yīng)用中,可能會(huì)出現(xiàn)多臺(tái)服務(wù)器的情況,即服務(wù)器集群 雙機(jī)熱備一般情況下需要有共享的存儲(chǔ)設(shè)備。但某些情況下也可以使用兩臺(tái)獨(dú)立的服務(wù)器 實(shí)現(xiàn)雙機(jī)熱備,需要通過專業(yè)的集群軟件或雙機(jī)軟件
從狹義上講,雙機(jī)熱備特指基于active/standby方式的服務(wù)器熱備。服務(wù)器數(shù)據(jù)包括數(shù)據(jù)庫(kù)數(shù)據(jù)同時(shí)往兩臺(tái)或多臺(tái)服務(wù)器寫,或者使用一個(gè)共享的存儲(chǔ)設(shè)備。在同一時(shí)間內(nèi)只有一臺(tái)服務(wù)器運(yùn)行。當(dāng)其中運(yùn)行著的一臺(tái)服務(wù)器出現(xiàn)故障無法啟動(dòng)時(shí),另一臺(tái)備份服務(wù)器會(huì)通過雙機(jī)軟件的診測(cè)(一般是通過心跳診斷)將standby機(jī)器激活,保證應(yīng)用在短時(shí)間內(nèi)完全恢復(fù)正常使用.
所以,像VCS (VERITAS Cluster Manager)等軟件實(shí)現(xiàn)的Oracle Cluster Server以及Oracle Standby ,Oracle RAC(Real Application Cluster),高級(jí)復(fù)制(Advanced Replication), Streams等技術(shù)都能認(rèn)為是雙機(jī)熱備。
二.Physical Standby,Logical Standby (物理Standby及邏輯Standby)
Physical standby直接從主庫(kù)接受archived log,然后直接做基于block的物理恢復(fù)(更新或調(diào)整變化的block),所以physical standby在物理文件一級(jí)完全都等同于主庫(kù)。physical standby恢復(fù)只是底層的block apply, OS層面的工作,數(shù)據(jù)庫(kù)SCHEMA,包括索引都是一樣的。它是直接應(yīng)用REDO或歸檔實(shí)現(xiàn)同步的。不會(huì)涉及temp ,undo等。物理STANDBY可能的模式:只讀模式(OPEN READONLY)和恢復(fù)模式(MANANGED RECOVERY)。
在邏輯STANDBY中,邏輯信息是相同的,但物理組織和數(shù)據(jù)結(jié)構(gòu)可以不同,它和主庫(kù)保持同步的方法是將接收的REDO轉(zhuǎn)換成SQL語(yǔ)句,然后在STANDBY上執(zhí)行SQL語(yǔ)句(SQL Apply)。邏輯STANDBY除災(zāi)難恢復(fù)外還有其它用途,比如用于用戶進(jìn)行查詢和報(bào)表。
在9i R2之前,data guard的服務(wù)器只能運(yùn)行在read only或者recover模式, 一個(gè)physical standby database在物理上完全等同主庫(kù),當(dāng)physical standby database正在做恢復(fù)的時(shí)候,不能打開用作其他用途。 而logical standby database只是在logical上等同需要恢復(fù)的schema, 所以在恢復(fù)的時(shí)候,可以同時(shí)打開做report(做查詢動(dòng)作),也可以用戶和主庫(kù)不一樣的 數(shù)據(jù)對(duì)象等等,極大了提高了備用庫(kù)的利用率。
三.Dataguard
都是Standby。在Oracle 9i之前稱為Standby,9i或之后的Standby被改名為Data guard。不過功能上也有了很多的改進(jìn)和區(qū)別 。
四.Standby下LGWR / ARCH傳輸
查看數(shù)據(jù)庫(kù)保護(hù)模式:
SQL> select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;
1.最大性能(maximize performance):這是data guard默認(rèn)的保護(hù)模式。primay上的事務(wù)commit前不需要從standby上收到反饋信息(主數(shù)據(jù)庫(kù)的提交操作不等待STANDBY),該模式在primary故障時(shí)可能丟失數(shù)據(jù),但standby對(duì)primary的性能影響最小。 可以使用LGWR ASYNC或者ARCH兩種傳輸模式。
ARCH傳輸模式:Primary DB上的online redo log寫滿或其他條件引起redo log寫歸檔的時(shí)候,redo log生成的archived log file寫到本地歸檔目錄的同時(shí),寫入了Standby歸檔目錄。只是Primary db上的online redo log切換不必等Standby上的寫歸檔動(dòng)作結(jié)束。
2.最大可用(maximize availability):在正常情況下,最大可用模式和最大保護(hù)模式一樣;在standby不可用時(shí),最大可用模式會(huì)自動(dòng)降低成最大性能模式,所以standby故障不會(huì)導(dǎo)致primay不可用。在問題糾正之后,Standby和主數(shù)據(jù)庫(kù)進(jìn)行再同步,至少有一個(gè)standby可用的情況下,即使primary down機(jī),也能保證不丟失數(shù)據(jù)。(不過當(dāng)問題修復(fù),再同步之前有必要FAILOVER,那么有些數(shù)據(jù)可能會(huì)丟失)。最大可用性模式Standby必須配置Standby Redo log,Oracle推薦最大可用模式使用LGWR ASYNC(異步)模式傳輸。
采用最大可用的data guard模式,主庫(kù)往備庫(kù)傳遞在線日志(online redo log)信息,在線日志信息寫入備用庫(kù)的standby redo log,這些standby redo log歸檔后,備用庫(kù)應(yīng)用歸檔日志。
LGWR還分為L(zhǎng)GWR ASYNC(異步)和LGWR SYNC(同步)兩種。
|
|
最大保護(hù) |
最大可用 |
最大性能 |
|
進(jìn)程 |
LGWR |
LGWR |
LGWR或ARCH |
|
網(wǎng)絡(luò)傳輸模式 |
SYNC |
SYNC |
LGWR時(shí)設(shè)置ASYNC |
|
磁盤寫操作 |
AFFIRM |
AFFIRM |
NOAFFIRM |
|
備用日志 |
YES |
物理備用需要 |
LGWR和物理備用時(shí)需要 |
|
備用庫(kù)類型 |
物理Standby |
物理或邏輯 |
物理或邏輯 |
最大保護(hù)(maximize protection):最高級(jí)別的保護(hù)模式。primay上的事務(wù)在commit前必須確認(rèn)redo已經(jīng)傳遞到至少一個(gè)standby上,如果所有standby不可用,則primary會(huì)掛起。該模式能保證零數(shù)據(jù)丟失。對(duì)于最大保護(hù)和最高可用性模式,Standby數(shù)據(jù)庫(kù)必須配置standby redo log,并且oracle推薦所有數(shù)據(jù)庫(kù)都使用LGWR ASYNC模式傳輸。
一. DBWR寫磁盤數(shù)據(jù)觸發(fā)條件
1. 當(dāng)進(jìn)程在輔助LRU鏈表和主LRU鏈表上掃描以查找可以覆蓋的buffer header[空閑緩沖區(qū)]時(shí),如果已經(jīng)掃描的buffer header的數(shù)量到達(dá)一定的限度(由隱藏參數(shù):_db_block_max_scan_pct決定)時(shí),觸發(fā)DBWR進(jìn)程。 _db_block_max_scan_pct表示已經(jīng)掃描的buffer header的個(gè)數(shù)占整個(gè)LRU鏈表上buffer header總數(shù)的百分比。這時(shí),搜索可用buffer header的進(jìn)程掛起,在v$session_wait中表現(xiàn)為等待“free buffer wait”事件,同時(shí)增加v$sysstat中的“dirty buffers inspected”的值。(can query by x$kvit)
這部分內(nèi)容在我的Blog里也有說明:
Oracle Buffer Cache 原理
http://blog.csdn.net/tianlesoftware/archive/2011/06/28/6573438.aspx
2. 當(dāng)DBWR在主LRUW鏈表上查找已經(jīng)更新完而正在等待被寫入數(shù)據(jù)文件的buffer header時(shí),如果找到的buffer header的數(shù)量超過一定限度(由隱藏參數(shù):_db_writer_scan_depth_pct決定)時(shí),DBWR就不再繼續(xù)往下掃描了,而轉(zhuǎn)到輔助LRUW鏈表上將其上的臟數(shù)據(jù)塊寫入數(shù)據(jù)文件。_db_writer_scan_depth_pct表示已經(jīng)掃描的臟數(shù)據(jù)塊的個(gè)數(shù)占整個(gè)主LRUW鏈表上buffer header總數(shù)的百分比。
3. 如果主LRUW鏈表和輔助LRUW鏈表上的臟數(shù)據(jù)塊的總數(shù)超過一定限度,也將觸發(fā)DBWR進(jìn)程。該限度由隱藏參數(shù):_db_large_dirty_queue決定。
4. 發(fā)生增量檢查點(diǎn)(incremental checkpoint)或完全檢查點(diǎn)(complete checkpoint)時(shí)觸發(fā)DBWR。
5. 每隔三秒鐘啟動(dòng)一次DBWR。
6. 將表空間設(shè)置為離線(offline)狀態(tài)時(shí)觸發(fā)DBWR。
7. 發(fā)出命令:alter tablespace … begin backup,從而將表空間設(shè)置為熱備份狀態(tài)時(shí)觸發(fā)DBWR。
8. 將表空間設(shè)置為只讀狀態(tài)時(shí),觸發(fā)DBWR。
9. 刪除對(duì)象時(shí)(比如刪除某個(gè)表)會(huì)觸發(fā)DBWR。
二. LGWR寫聯(lián)機(jī)日志文件觸發(fā)條件
1. 超時(shí)(timeout)
當(dāng)LGWR處于空閑狀態(tài)時(shí),它依賴于rdbms ipc message等待,處于休眠狀態(tài),直到3秒超時(shí)時(shí)間到。 如果LGWR發(fā)現(xiàn)有redo需要寫出,那么LGWR將執(zhí)行寫出操作,log file parallel write等待事件將會(huì)出現(xiàn)。
2. 閾值達(dá)到
只要一個(gè)進(jìn)程在log buffer中分配空間,已經(jīng)使用的Log buffer的數(shù)量將被計(jì)算。如果使用的塊的數(shù)量大于或等于_log_io_size參數(shù)設(shè)置,那么將會(huì)觸發(fā)LGWR寫操作。
如果此時(shí)LGWR未處于活動(dòng)狀態(tài),那么LGWR將被通知去執(zhí)行后臺(tái)寫操作。
缺省的_log_io_size等于1/3 log buffer大小,上限值為1M,此參數(shù)在X$KSPPSV中顯示的0值,意為缺省值。也就是,LGWR將在Min(1M,1/3 log buffer size)時(shí)觸發(fā)。
注意此處的log buffer size是以log block來衡量的。此值通常為512 bytes.
3. 提交
當(dāng)一個(gè)事物提交時(shí),在redo stream中將記錄一個(gè)提交標(biāo)志。
在這些redo被寫到磁盤上之前,這個(gè)事物是不可恢復(fù)的。所以,在事務(wù)返回成功標(biāo)志給用戶前,必須等待LGWR寫完成。進(jìn)程通知LGWR寫,并且以log file sync事件開始休眠,超時(shí)時(shí)間為1秒。
Oracle的隱含參數(shù)_wait_for_sync參數(shù)可以設(shè)置為false避免redo file sync的等待,但是就將無法保證事務(wù)的恢復(fù)性.注意,在遞歸調(diào)用(recursive calls)中的提交(比如過程中的提交)不需要同步redo直到需要返回響應(yīng)給用戶。因此遞歸調(diào)用僅需要同步返回給用戶調(diào)用之前的最后一次Commit操作的RBA。
存在一個(gè)SGA變量用以記錄redo線程需要同步的log block number。
如果多個(gè)提交在喚醒LGWR之前發(fā)生,此變量記錄最高的log block number,在此之前的所有redo都將被寫入磁盤。這有時(shí)候被稱為組提交(group commit).
4. 在DBWR寫之前
如果DBWR將要寫出的數(shù)據(jù)的高RBA超過LGWR的on-Disk RBA,DBWR將post LGWR去執(zhí)行寫出。
在Oracle8i之前,此時(shí)DBWR將等待log file sync事件。
從Oracle8i開始,DBWR把這些Block放入一個(gè)defer隊(duì)列,同時(shí)通知LGWR執(zhí)行redo寫出,DBWR可以繼續(xù)執(zhí)行無需等待的數(shù)據(jù)寫出。
三. CKPT發(fā)送CHECKPOINT信號(hào)的觸發(fā)條件
1. log_checkpoint_timeout時(shí)間達(dá)到
2. 當(dāng)前redo日志已經(jīng)寫夠log_checkpoint_internavl*操作系統(tǒng)塊大小
3. redo log switch
4. alter system checkpoint
5. alter tablespace XXX begin backup,end backup的時(shí)候
6. alter tablespace , datafile offline, shutdown immediate, direct read的時(shí)候;
四. ARCH進(jìn)程日志歸檔觸發(fā)條件
1. 如果設(shè)置了自動(dòng)歸檔模式,則日志切換時(shí),由LGWR進(jìn)程觸發(fā)ARCH進(jìn)程進(jìn)行歸檔。這是最常見的方式。
2. 可以手工進(jìn)行歸檔。使用命令:alter system archive log current表示啟動(dòng)ARCH進(jìn)程,從而對(duì)當(dāng)前的日志文件進(jìn)行歸檔。
3. 如果ARCH進(jìn)程在5分鐘以后還沒有接收到LGWR的通知,則發(fā)生超時(shí),于是ARCH被喚醒以檢查是否存在需要?dú)w檔的日志文件。ARCH通過讀取控制文件中的信息來決定是否需要?dú)w檔以及應(yīng)該歸檔哪些日志文件。但是在進(jìn)行實(shí)例恢復(fù)或者介質(zhì)恢復(fù)的過程中,ARCH進(jìn)程不會(huì)啟動(dòng)。
歸檔日志(Archive Log)是非活動(dòng)的重做日志備份.通過使用歸檔日志,可以保留所有重做歷史記錄,當(dāng)數(shù)據(jù)庫(kù)處于ARCHIVELOG模式并進(jìn)行日志切換時(shí),后臺(tái)進(jìn)程ARCH會(huì)將重做日志的內(nèi)容保存到歸檔日志中,當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)介質(zhì)失敗時(shí),使用數(shù)據(jù)文件備份,歸檔日志和重做日志可以完全恢復(fù)數(shù)據(jù)庫(kù)。在Oracle10g中,只要啟動(dòng)數(shù)據(jù)庫(kù)的歸檔模式,Oracle就會(huì)啟用自動(dòng)歸檔,從而避免了10g以前由于用戶疏忽所帶來的一系列問題。
日志操作模式:ARCHIVELOG(歸檔),NOARCHIVELOG(非歸檔)
對(duì)于非歸檔模式的數(shù)據(jù)庫(kù)改為歸檔模式(主要以O(shè)racle 10g為參考)使用以下步驟:
步驟1(查看數(shù)據(jù)庫(kù)的歸檔狀態(tài))
首先查看數(shù)據(jù)庫(kù)現(xiàn)有模式可使用以下語(yǔ)句,顯示數(shù)據(jù)庫(kù)處于非歸檔模式下
SQL>select name,log_mode from v$database;
NAME LOG_MODE
--------- ------------
ZHQHDB NOARCHIVELOG
也可以用下面的語(yǔ)句
[oracle@wangdm~ 10:28 #9]$ sqlplus / as sysdba
SQL>archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination ?/dbs/arch
Oldest online log sequence 534
Current log sequence 536
步驟2(設(shè)置歸檔日志文件路徑)
SQL>alter system setlog_archive_dest_1='location=/u01/arch';
該語(yǔ)句含義是設(shè)置歸檔日志文件的存放路徑,實(shí)際上Oracle 10g以后可以生成多份一樣的日志,保存多個(gè)位置以防不測(cè)
例如再添加一個(gè)歸檔日志文件存放位置可使用以下語(yǔ)句
SQL>alter system set log_archive_dest_2='location=/u02/arch ';
“location=/u01/arch”此目錄是要從根目錄開始的一個(gè)完整的目錄
詳細(xì)介紹歸檔日志文件的存放的兩種方法:
方法一、使用log_archive_dest和log_archive_duplex_dest配置歸檔位置
如果不使用備用數(shù)據(jù)庫(kù),只需要將歸檔日志存放到本地目錄.配置本地歸檔位置可以使用初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST,其中,第一個(gè)參數(shù)用于設(shè)置第一個(gè)歸檔位置,第二個(gè)參數(shù)用于設(shè)置第二個(gè)歸檔位置.
ALTER SYSTEM SET log_archive_dest='/u01/arch';
ALTER SYSTEM SET log_archive_duplex_dest='/u01/arch';
方法二、使用LOG_ARCHIVE_DEST_n配置多個(gè)歸檔位置.
初始化參數(shù)LOG_ARCHIVE_DEST_n用于指定多個(gè)歸檔位置,該參數(shù)最多可以指定10個(gè)歸檔位置.通過使用初始化參數(shù)LOG_ARCHIVE_DEST_n,不僅可以配置本地歸檔位置,還可以配置遠(yuǎn)程歸檔位置. 如果既要在主節(jié)點(diǎn)上生成歸檔日志,又要將歸檔日志傳遞到備用節(jié)點(diǎn),那么必須使用參數(shù)LOG_ARCHIVE_DEST_n.
兩種方法的比較:
1) 方法二可以配置本地和遠(yuǎn)程歸檔目錄,而方法一只能配置本地歸檔目錄.
2) 方法二可以配置多達(dá)10個(gè)歸檔目錄,方法一最多只能配置兩個(gè)歸檔目錄.
3) 如果用方法一那么log_archive_dest是強(qiáng)制(MANDATORY)歸檔目錄,而log_archive_duplex_dest為可選(OPTIONAL)歸檔目錄,且第一種方法中不能使用REOPEN關(guān)鍵字
4) 方法一與方法二是互拆的,設(shè)置了方法一參數(shù)就不能再設(shè)置方法二的參數(shù)反之亦然
當(dāng)使用初始化參數(shù)LOG_ARCHIVE_DEST_n配置本地歸檔位置時(shí),需要指定LOCALTION選項(xiàng).當(dāng)配置遠(yuǎn)程歸檔位置時(shí),需要指定SERVICE選項(xiàng).
示例如下:
ALTER SYSTEM SET log_archive_dest_1='location=/u01/arch';
ALTER SYSTEM SET log_archive_dest_2='location=/u02/arch';
ALTER SYSTEM SET log_archive_dest_3='service=standby';
配置遠(yuǎn)程歸檔位置時(shí),SERVICE選項(xiàng)需要指定遠(yuǎn)程數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)服務(wù)名(在tnsnames.ora文件中配置)
使用LOG_ARCHIVE_DEST_n的關(guān)鍵字
使用初始化參數(shù)LOG_ARCHIVE_DEST_n配置歸檔位置時(shí),可以在歸檔位置上指定OPTIONAL或MANDATORY選項(xiàng);指定MANDATORY選項(xiàng)時(shí),可以設(shè)置REOPEN屬性.
OPTIONAL:該選項(xiàng)是默認(rèn)選項(xiàng).使用該選項(xiàng)時(shí),無論歸檔是否成功,都可以覆蓋重做日志.
MANDATORY:強(qiáng)制歸檔.使用該選項(xiàng)時(shí),只有在歸檔成功之后,重做日志才能被覆蓋,在設(shè)置時(shí)至少應(yīng)該有一個(gè)本地(location)強(qiáng)制(mandatory)歸檔目錄
REOPEN:該屬性指定如果歸檔不成功嘗試重新歸檔的時(shí)間間隔,默認(rèn)值為300秒,必須跟在MANDATORY后.
例如:
Alter system set log_archive_dest_1=’location=/u01/arch mandatory’;
Alter system set log_archive_dest_2=’location=/u02/arch mandatory reopen=500’;
Alter system set log_archive_dest_3=’location=/u03/arch optional’;
控制本地歸檔成功的最小個(gè)數(shù)
使用初始化參數(shù)LOG_ARCHIVE_MIN_SUCCEED_DEST控制本地歸檔的最小成功個(gè)數(shù)
alter system set log_archive_min_succeed_dest=2;
如上設(shè)置為2就說明至少要有2個(gè)歸檔目錄歸檔成功后redo日志才能被重寫;如果log_archive_dest_n中的mandatory關(guān)鍵字個(gè)數(shù)大于這個(gè)參數(shù)那么此參數(shù)值失效,只有小于這個(gè)數(shù)的時(shí)候這個(gè)參數(shù)才有效
使用初始化參數(shù)LOG_ARCHIVE_DEST_STATE_n控制歸檔位置的可用性
設(shè)置該參數(shù)為ENABLE(默認(rèn)值),表示會(huì)激活相應(yīng)的歸檔位置;設(shè)置該參數(shù)為DEFER/DISABLE,表示禁用相應(yīng)歸檔位置.當(dāng)歸檔日志所在磁盤損壞或填滿時(shí),DBA需要暫時(shí)禁用該歸檔目錄.
Alter system set log_archive_dest_state_3=defer/disable;(禁用)
Alter system set log_archive_dest_state_3=enable;(啟用)
配置歸檔文件格式
SQL> alter system set log_archive_format = "archive_%t_%s_%r.log" scope=spfile(指定歸檔日志文件的格式);
當(dāng)數(shù)據(jù)庫(kù)處于ARCHIVELOG模式時(shí),如果進(jìn)行日志切換,后臺(tái)進(jìn)程將自動(dòng)生成歸檔日志目錄,歸檔日志的默認(rèn)位置為%oracle_home%rdbms,在oracle database 10g中,歸檔日志的默認(rèn)文件格式為ARCH%S_%R.%T。
歸檔日志文件可以指定以下匹配符:
%s: 日志序列號(hào):
%S: 日志序列號(hào)(帶有前導(dǎo)0)
%t: 重做線程編號(hào).
%T: 重做線程編號(hào)(帶有前導(dǎo)0)
%a: 活動(dòng)ID號(hào)
%d: 數(shù)據(jù)庫(kù)ID號(hào)
%r: RESETLOGS的ID值
%R: RESETLOGS的ID值(帶有前導(dǎo)0)
從10g開始,配置歸檔日志文件格式時(shí),必須帶有%s,%t和%r匹配符,設(shè)置了歸檔文件格式后必須重啟數(shù)據(jù)庫(kù),修改完成后手動(dòng)干預(yù)進(jìn)行日志切換查看歸檔日志文件格式是否正確。
步驟3(修改數(shù)據(jù)庫(kù)為歸檔模式)
關(guān)閉數(shù)據(jù)庫(kù)
SQL>shutdown immediate
啟動(dòng)數(shù)據(jù)mount狀態(tài):
SQL>startup mount
修改數(shù)據(jù)庫(kù)為歸檔模式:
SQL>alter database archivelog;
打開數(shù)據(jù)庫(kù),查詢:
SQL>alter database open
步驟4(配置歸檔進(jìn)程個(gè)數(shù))可選
初始化參數(shù)LOG_ARCHIVE_MAX_PROCESSES用于指定例程初始啟動(dòng)的最大歸檔進(jìn)程個(gè)數(shù),當(dāng)將數(shù)據(jù)庫(kù)轉(zhuǎn)變?yōu)锳RCHIVELOG模式時(shí),默認(rèn)情況下oracle會(huì)自動(dòng)啟動(dòng)兩個(gè)歸檔進(jìn)程.通過改變初始化參數(shù)LOG_ARCHIVE_MAX_PROCESS的值,可以動(dòng)態(tài)地增加或降低歸檔進(jìn)程的個(gè)數(shù),每個(gè)實(shí)例歸檔進(jìn)程數(shù)量最多只能為30個(gè)取值范圍為[0-9 a-t]:
ALTER SYSTEM SETLOG_ARCHIVE_MAX_PROCESSES=3 scope=both;
如果設(shè)置的歸檔進(jìn)程個(gè)數(shù)超過30如下圖會(huì)有錯(cuò)誤提示
其實(shí)對(duì)于oracle 10g以前的版本還有l(wèi)og_archive_start參數(shù)與LOG_ARCHIVE_MAX_PROCESSES結(jié)合使用,但是對(duì)于10g及后期的版本這個(gè)參數(shù)完全做廢了,如下圖數(shù)據(jù)庫(kù)已啟用歸檔同時(shí)在日志發(fā)生切換時(shí)日志也會(huì)自動(dòng)歸檔只是log_archive_start參數(shù)值還是false,所以到10G后這個(gè)參數(shù)就不用理它了
步驟5(顯示歸檔日志信息)
1.使用ARCHIVE LOG LIST命令可以顯示日志操作模式,歸檔位置,自動(dòng)歸檔機(jī)器要?dú)w檔的日志序列號(hào)等信息.
2.顯示歸檔日志信息.
Select name,sequence#, first_change# FROM v$archived_log;
Name用于表示歸檔日志文件名,sequence#用于表示歸檔日志對(duì)應(yīng)的日志序列號(hào),firs_change#用于標(biāo)識(shí)歸檔日志的起始SCN值.
3.執(zhí)行介質(zhì)恢復(fù)時(shí),需要使用歸檔日志文件,此時(shí)必須準(zhǔn)確定位歸檔日志的存放位置.通過查詢動(dòng)態(tài)性能視圖v$archive_dest可以取得歸檔日志所在目錄.
SELECT * FROMv$archive_dest;
4.顯示日志歷史信息
SELECT * FROMv$loghist;
THREAD#用于標(biāo)識(shí)重做線程號(hào),SEQUNCE#用于標(biāo)識(shí)日志序列號(hào),FIRST_CHANGE#用于標(biāo)識(shí)日志序列號(hào)對(duì)應(yīng)的起始SCN值,FIRST_TIME用于標(biāo)識(shí)起始SCN的發(fā)生時(shí)間.SWICTH_CHANGE#用于標(biāo)識(shí)日志切換的SCN值.
5.顯示歸檔進(jìn)程信息.
進(jìn)行日志切換時(shí),ARCH進(jìn)程會(huì)自動(dòng)將重做日志內(nèi)容復(fù)制到歸檔目錄中,為了加快歸檔速度,應(yīng)該啟用多個(gè)ARCH進(jìn)程.通過查詢動(dòng)態(tài)性能視圖V$ARCHIVE_PROCESSES可以顯示所有歸檔進(jìn)程的信息!
SELECT * FROMv$archive_processes;
Porcess用于標(biāo)識(shí)ARCH進(jìn)程的編號(hào),status用于標(biāo)識(shí)ARCH進(jìn)程的狀態(tài)(ACTIVE:活動(dòng),STOPPED:未啟動(dòng)),log_sequence用于標(biāo)識(shí)正在進(jìn)行歸檔的日志序列號(hào),state用于標(biāo)識(shí)ARCH進(jìn)程的工作狀態(tài)
步驟6(執(zhí)行手工歸檔)
從oracle database 10g開始,當(dāng)將日志操作模式轉(zhuǎn)變未ARCHIVELOG模式時(shí),oracle會(huì)自動(dòng)啟動(dòng)ARCH進(jìn)程.如果要使用手工歸檔.那么在改變?nèi)罩静僮髂J綍r(shí)必須使用命令A(yù)LTER DATABASEARCHIVELOG MANUAL;
需要注意,使用手工歸檔方式,數(shù)據(jù)庫(kù)管理員必須手工執(zhí)行歸檔命令.如果沒有執(zhí)行手工歸檔命令,日志組的原有內(nèi)容將不能被覆蓋.ALTER DATABASE ARCHIVELOG MANUAL 命令是為了與先前的版本兼容而保留的,將來的oracle版本會(huì)淘汰該命令,使用手工歸檔方式時(shí),數(shù)據(jù)庫(kù)管理員可以執(zhí)行以下命令歸檔重做日志:
alter systemarchive log all; --手動(dòng)歸檔所有switch的日志
alter systemarchive log sequence 545; --545為日志序列號(hào)
alter systemarchive log current; --歸檔當(dāng)前聯(lián)機(jī)日志文件
arter databasearchivelog; --用此命令再次將數(shù)據(jù)庫(kù)改為自動(dòng)歸檔,手動(dòng)歸檔一般情況下在10g及后期版本其實(shí)已經(jīng)沒什么了
注意點(diǎn)
1 特別指出的是在Oracle 9i中還要修改參數(shù)log_archive_start = true才
能生效,oracle 10g中已經(jīng)廢除了該參數(shù),所以不需要設(shè)置該參數(shù)。oracle 9i 設(shè)置log_archive_start = true的命令是:alter system setlog_archive_start=TRUE scope=spfile;并且不用重啟數(shù)據(jù)庫(kù),就可以生效;
2 alter system switch logfile 是強(qiáng)制日志切換,不一定就歸檔當(dāng)前的重做日志文件(若自動(dòng)歸檔打開,就歸檔前的重做日志,若自動(dòng)歸檔沒有打開就不歸檔當(dāng)前重做日志)
3 10G如果沒有設(shè)置歸檔路徑,在設(shè)置了閃回目錄的情況下默認(rèn)會(huì)把歸檔日志放到閃回恢復(fù)目錄中,如果閃回恢復(fù)目錄也沒設(shè)置那么會(huì)將歸檔日志放在$ORACLE_HOME/dbs/arch目錄中。
showparameter db_recovery_file_dest
停用歸檔(將數(shù)據(jù)庫(kù)從歸檔變?yōu)榉菤w檔)
在歸檔日志模式下,有可能會(huì)遇到歸檔日志大小超過最大值而出現(xiàn)討厭的ORA-00257錯(cuò)誤,前面說了如何把歸檔日志空間變大。而在普通的開發(fā)環(huán)境下,其實(shí)是根本用不著歸檔日志的,設(shè)個(gè)時(shí)候我們就把數(shù)據(jù)庫(kù)的歸檔日志給禁用了,也就是說把數(shù)據(jù)庫(kù)變?yōu)榉菤w檔日志模式,應(yīng)該怎么做呢。
1. 如果是10G及后期的版本直接跳到步驟2,而10G之前的版本此步必須操作,用
SYS用戶進(jìn)行登錄,首先設(shè)置歸檔進(jìn)程關(guān)閉。
alter system set log_archive_start=falsescope=spfile;
2.關(guān)閉數(shù)據(jù)庫(kù)。
shutdown immediate
3.再后面把數(shù)據(jù)庫(kù)啟動(dòng)到mount的模式
startup mount
4.如果是10G及后期的版本直接跳至步驟5,而10G之前的版本必須關(guān)閉數(shù)據(jù)庫(kù)的flash
模式,如果不關(guān)閉此功能在后面關(guān)閉歸檔日志的時(shí)候就會(huì)出現(xiàn)討厭的ORA-38774錯(cuò)
誤;這個(gè)主要針對(duì)早期的版本,而對(duì)于10G及后期的版本此參數(shù)也是不需要改的,而
且閃回功能最好是要開啟否則數(shù)據(jù)庫(kù)的整個(gè)閃回特性都失效,也是得不償失的。
alter database flashback off
5.接著把數(shù)據(jù)庫(kù)改為非歸檔模式
alter database noarchivelog;
6.都修改好了以后,然后打開數(shù)據(jù)庫(kù)
alter database open;
7.接著看一下log日志的狀態(tài),這一步不能省略修改后切記發(fā)現(xiàn)日志的狀態(tài)為stale非
正常狀態(tài)的要留意一下,聯(lián)機(jī)日志全部手工切換一遍確保沒有問題
select * from v$log;
select * from v$logfile;
8.查看閃回恢復(fù)區(qū)域空間使用狀況,這個(gè)只在沒有指定歸檔目錄而指定了閃回恢復(fù)區(qū)域的
情況下才用得著
select * from v$flash_recovery_area_usage;
這些都沒有問題以后至此停用數(shù)據(jù)庫(kù)歸檔就算順利完成了
停用歸檔日志遇到錯(cuò)誤
ORA-00258:
停用歸檔日志后打開數(shù)據(jù)庫(kù)時(shí)報(bào)如下錯(cuò)誤
Sql>alter database open;
alter database open
*
ERROR at line 1:
ORA-00258: manual archiving in NOARCHIVELOG mode must identify log
出現(xiàn)這個(gè)問題的原因主要就是將數(shù)據(jù)庫(kù)從歸檔改為非歸檔模式導(dǎo)致數(shù)據(jù)打開時(shí)報(bào)如上錯(cuò)誤,可能是日志歸檔沒有完成而這時(shí)已將數(shù)據(jù)改為非歸檔模式了,在打開數(shù)據(jù)庫(kù)的時(shí)候沒有歸檔完成的日志又要重新進(jìn)行歸檔,可這時(shí)發(fā)現(xiàn)據(jù)庫(kù)已處于非歸檔模式下了。解決這個(gè)問題的方法是先進(jìn)入歸檔模式將所有聯(lián)機(jī)日志進(jìn)行手工歸檔然后再將數(shù)據(jù)庫(kù)改為非歸檔模式如下:
(1)查看數(shù)據(jù)庫(kù)的歸檔目錄位置
sql> show parameter log_archive_dest_1
(2)查看當(dāng)前數(shù)據(jù)庫(kù)日志情況
sql> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCSTATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- --------------------- -------------------
1 1 1528 209715200 1 NO CURRENT 476386158 2010-04-20 13:20:13
2 1 1526 209715200 1 YESINACTIVE 476094078 2010-04-14 16:00:07
3 1 1527 209715200 1 NO INACTIVE 476248931 2010-04-17 22:00:54
(3)嘗試歸檔第一組日志
sql>alter system archive log group 1;
alter system archive log group 1
ERROR at line 1:
ORA-00259: log 1 of open instance ora10g (thread 1) is the current log, cannotarchive
錯(cuò)誤提示很顯然,當(dāng)前日志組不允許歸檔。
(4)嘗試歸檔第二組日志
sql >alter system archive log group 2;
alter system archive log group 2
ERROR at line 1:
ORA-16013: log 2 sequence# 1526 does not need archiving
因?yàn)闅w檔狀態(tài)是“YES”,因此該組日志無需歸檔。
(5)嘗試歸檔第三組之日
sql >alter system archive log group 3;
System altered.
歸檔成功。
(6)確認(rèn)歸檔文件
sql > !ls-l /u01/arch/
total 194652
-rw-r----- 1 oracle oinstall 199121920 Apr 21 06:38 1_1527_688786498.arch
(7)有關(guān)手工歸檔操作補(bǔ)充內(nèi)容
以上我們使用的是數(shù)據(jù)庫(kù)參數(shù)指定的路徑存放手工歸檔生成的文件,我們還可以額外指定歸檔寫入的路徑方法如下
sql > alter system archive log group 3 to'/home/oracle';
System altered.
sql > !ls -l /home/oracle/1_1527_688786498.arch
-rw-r----- 1 oracle oinstall 199121920 Apr21 06:45 /home/oracle/1_1527_688786498.arch
注意:其實(shí)還有一種方法就是將數(shù)據(jù)改回歸檔模式然后打開數(shù)據(jù)過一段時(shí)間后再將數(shù)據(jù)庫(kù)改為非歸檔模式,數(shù)據(jù)庫(kù)就可以正常開啟了。
與歸檔信息相關(guān)的視圖:
視圖
作用
V$DATABASE
LOG_MODE字段歸檔模式
V$INSTANCE
ARCHIVER字段是否正在歸檔
V$ARCHIVED_LOG
從控制文件中獲取的所有歷史歸檔日志文件信息
V$ARCHIVE_DEST
歸檔目標(biāo)位置的信息
V$ARCHIVE_PROCESSES
歸檔進(jìn)程的信息
V$BACKUP_REDOLOG
所有已備份的歸檔日志文件的信息
V$LOG
所有重做日志文件的信息,其中包含那些需要?dú)w檔的重做日志文件
V$LOG_HISTORY
重做日志文件的歷史信息
總結(jié)
以上是生活随笔為你收集整理的数据库中的几个概念 - LGWR, ARCH,ASYNC,SYNC,AFFIRM的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity3D集成腾讯语音GVoice
- 下一篇: flex自适应宽度显示省略号