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