熱線電話:13121318867

登錄
首頁精彩閱讀分析Oralce重做日志
分析Oralce重做日志
2014-07-22
收藏



1. 簡介

Oracle引入重做日志的目的:數據庫的恢復。

Oracle相關進程:重做日志寫進程(LGWR)。

重做日志性質:聯機日志文件,oracle服務器運行時需要管理它們。

相關數據字典:v$log ; v$logfile 。

操作者權限:具有sys用戶或system用戶權限。

重做日志文件:

日志文件的數據文件類型:在線日志文件(又叫聯機日志)與歸檔日志文件(在線日志文件的歷史備份), 每個重做日志組中有一個或多個重做日志文件。每個勢力至少要有兩個重做日志組。

日志運行的模式:歸檔模式、非歸檔模式(是否自動歸檔)

日志的運行流程:寫文件是依靠LGWR后臺進程

日志按照有序循環的方式被使用,即當一組日志文件被填滿后,循環覆蓋下一組日志文件,不斷循環。

重做日志文件的目的:1. 記錄數據的改變 2. 提供數據恢復 3. 維護數據庫完整性。

2. 什么是 Oracle 歸檔模式?

Oracle數據庫有聯機重做日志,這個日志是記錄對數據庫所做的修改,比如插入,刪除,更新數據等,對這些操作都會記錄在聯機重做日志里。一 般數據庫至少要有2個聯機重做日志組。當一個聯機重做日志組被寫滿的時候,就會發生日志切換,這時聯機重做日志組2成為當前使用的日志,并且把這些文件分 布在不同的物理磁盤,當聯機重做日志組2寫滿的時候,又會發生日志切換,去寫聯機重做日志組1,就這樣反復進行。

,當前在使用聯機重做日志如果數據庫處于非歸檔模式,聯機日志在切換時就會丟棄. 而在歸檔模式下,當發生日志切換的時候,被切換的日志會進行歸檔。比如1,當1寫滿的時候,發生日志切換,開始寫聯機重做日志 2,這時聯機重做日志1的內容會被拷貝到另外一個指定的目錄下。這個目錄叫做歸檔目錄,拷貝的文件叫歸檔重做日志。 數據庫使用歸檔方式運行時才可以進行災難性恢復。

歸檔日志模式和非歸檔日志模式的區別: 非歸檔模式只能做冷備份,并且恢復時只能做完全備份.最近一次完全備份到系統出錯期間的數據不能恢復. 歸檔模式可以做熱備份,并且可以做增量備份,可以做部分恢復. 用ARCHIVE LOG LIST 可以查看期模式狀態時歸檔模式還是非歸檔模式.

3. 重做日志工作原理

后臺進程 LGWR 負責把重做日志緩沖區中的日志條目寫到重做日志文件 中。當用戶提交一個事務時,LGWR把這個事務的重做條目寫入到重做日志文件,并賦予一個標識符(System change number SCN),SCN用于標識事務的重做日志條目。只有當事務的“重做日志條目”被成功寫入到磁盤上的重做日志文件中,事務的提交才算完成。

以下情況LGWR會自動把重做日志緩沖區的日志條目寫入到重做日志文件中:

》每隔3秒鐘

》一個用戶提交一個事務

》日志緩沖區(Redo Log Buffer)被填滿三分之一

》日志緩沖區將有1MB的日志數據

》發生校驗點checkpoint

以下情況發生check point:

a.每次日志切換時

b.實例通過normal,transactional,immediate選項關閉時

c.通過設置初始化參數FAST_START_MTTR_TARGET強制發生

d.數據庫管理員手工設置ALTER SYSTEM CHECKPOINT、alter tablespace ,datafile offline

e.使用alter tablespace[OFFLINE NORMAL|READ ONLY|BEGIN BACKUP] 語句導致指定數據文件發生檢查點

注:如果參數LOG_CHECKPOINTS_TO_ALERT 設置為true,則每次檢查點信息將記錄在alert_SID.log文件中.

4. 重做日志狀態

Current 表示正在LGWR寫的重做日志組

Active 表示重做日志組記錄的改變還沒有寫入到數據文件中,實例恢復時需要用到Active的重做日志組;

Inactive表示實例恢復時不需要狀態為inactive的重做日志組;

Unused表示該重做日志組是新建的,還未被使用;

5. 實例恢復

如果數據庫突然斷電,對數據庫的改變沒有真正寫入到數據庫文件中,但是Oracle保證對數據庫的改變已經記錄到重做日志文件中。例程失敗類似于執行 SHUTDOWN ABORT命令關閉數據庫,解決了硬件問題和電源斷電等問題之后,DBA只需要執行STARTUP命令啟動例程就可以了,而不需要執行任何恢復命令。 當執行 STARTUP 命令啟動例程并裝載了數據庫之后,后臺進程 SMON 會自動執行例程恢復,最終使數據庫所有文件(數據文件、控制文件、重做日志)完全同步。實例恢復會自動把記錄在重做日志文件中的改變應用到數據文件中,就不會有數據的丟失 。

6. 重做日志組操作

1.1     數據庫日志歸檔操作

1. 查看oracle數據庫是否為歸檔模式:

SQL> select name,log_mode from v$database;

NAME LOG_MODE

--------- ------------

PTLDB NOARCHIVELOG

2.查看數據庫中的重做日志組

SQL> select * from v$log;

GROUP#  THREAD# SEQUENCE#  BYTES  MEMBERS ARC  STATUS  FIRST_CHANGE# FIRST_TIME

1        1          1558  315392000            1  NO   INACTIVE      459785223 20-JUL-14

2        1          1559  315392000            1  NO   CURRENT      460781485 21-JUL-14

3        1          1557  315392000            1  NO   INACTIVE      458700182 19-JUL-14

3.查看數據庫中的重做日志文件

知道有哪些重做日志文件,以及每個重做日志文件屬于哪一組。

SQL> select * from v$logfile;

GROUP#  STATUS  TYPE   MEMBER                                   IS_

3       ONLINE        /opt/oracle/oradata/ptldb/redo03.log       NO

2       ONLINE        /opt/oracle/oradata/ptldb/redo02.log       NO

1       ONLINE        /opt/oracle/oradata/ptldb/redo01.log       NO

4.創建重做日志組

ALTER DATABASE ADD LOGFILE GROUP 4 ('/dev/rlv_vgdb9_data22','/dev/rlv_vgdb9_data23','/dev/rlv_vgdb9_data24') SIZE 8191m; --這樣,就最增一個日志組,且這個日志組里有3個成員每個成員8191MB大小。

5:給某個日志組新增一個成員

ALTER DATABASE ADD LOGFILE MEMBER '/dev/rlv_vgdb9_data25' TO GROUP 4;

--注意,這里不需要指定日志組成員的大小。

6:刪除日志組

ALTER DATABASE DROP LOGFILE GROUP 4;

--注意:當前日志組不能刪,活動的日志組不能刪,沒有歸檔的日志組不能刪。

7:刪除日志組成員

ALTER DATABASE DROP LOGFILE MEMBER '/dev/rlv_vgdb9_data25';

--注意:每個組至少要保留一個成員;

8.改變重做日志組的狀態

Alter system switch logfile;

從Active狀態變為Inactive狀態

Alter system checkpoint;

配置數據庫的歸檔模式

改變非歸檔模式到歸檔模式:

1)SQL>SHUTDOWN NORMAL/IMMEDIATE;

2)SQL>START MOUNT;

3)SQL>ALTER DATABASE ARCHIVELOG;

4)SQL>ALTER DATABASE OPEN;

5)SQL>做一次完全備份,因為非歸檔日志模式下產生的備份日志對于歸檔模式已經不可用了.這一步非非常重要!

改變歸檔模式到非歸檔模式:

1)SQL>SHUTDOWN NORMAL/IMMEDIATE;

2)SQL>START MOUNT;

3)SQL>ALTER DATABASE NOARCHIVELOG;

4)SQL>ALTER DATABASE OPEN;

3.啟用自動歸檔: LOG_ARCHIVE_START=TRUE

歸檔模式下,日志文件組不允許被覆蓋(重寫),當日志文件寫滿之后,如果沒有進行手動歸檔,那么系統將掛起,知道歸檔完成為止.

這時只能讀而不能寫.

運行過程中關閉和重啟歸檔日志進程

SQL>ARCHIVE LOG STOP

SQL>ARCHIVE LOG START

4.手動歸檔: LOG_ARCHIVE_START=FALSE

歸檔當前日志文件

SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;

歸檔序號為052的日志文件

SQL>ALTER SYSTEM ARCHIVE LOG SEQUENCE 052;

歸檔所有日志文件

SQL>ALTER SYSTEM ARCHIVE LOG ALL;

改變歸檔日志目標

SQL>ALTER SYSTEM ARCHIVE LOG CURRENT TO '&PATH';

1.2     日志切換

ALTER SYSTEM SWITCH LOGFILE;

--所謂日志切換就是停止寫當前組,轉而寫一個新組,系統可以自動發生,也可以手工完成。

--當發生SWITCH LOGFILE時,系統會在后臺完成CHECKPOINT的操作

--手動切換日志組

--日志組A:當前正在寫。

--日志組B:可寫。

--CHECKPOINT保證控制文件,數據文件頭,日志文件頭的SCN一致是數據庫保持數據完整性的一個重要機制

--手動切換日志組后,ORACLE開始往日志組B寫日志,并進行一次CHECKPOINT,把日志組A里沒有經過CHECKPOINT的那部分日志對應的DIRTY BUFFER從BUFFER CACHE里寫到

--數據文件里。CHECKPOING完成后

--日志組A:可寫。

--日志組B:當前正在寫。

--另外,ALTER TABLESPACE USER BEGIN BACKUP,DROP TABLE,TRUNCATE TABLE都會引發CHECKPOINT操作

--除了以上所手動,及自動CHECKPOINT之外,還可以通過一些參數來控制CHECKPOINT

--FAST_START_MTTR_TARGET(MTTR:數據恢復的時間間隔)

--checkpoints用來同步,同步頻率越高,發生系統錯誤時所需RECOVERY時間越短

--同步相關的參數:FAST_START_MTTR_TARGET(數據庫通過它來改變后面3個參數),fast_start_io_target,log_checkpoint_interval,log_checkpoint_timeout


SQL

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢