檢查點和oracle數據庫的恢復(一)SCN

 

SCN號研究
什麼是scn(system change number)號

scn號是ORACLE數據庫一個內部時鐘,是數據庫的歷史時間記錄,用來衡量ORACLE事務(transaction)發生的順序,是一個時間概念。 scn號不斷增加,可以理解爲直至無窮大。

什麼時候scn號會增加

scn號會實時增加的,而且只會增加不會減少,反映數據庫的更新歷史。

怎樣查詢目前系統最新的scn號

SQL>select dbms_flashback.get_system_change_number from dual; (9i以前)

SQL>select  current_scn# from v$database;(10g以後)

scn號的存在什麼地方

1. 控制文件中當:

  • Database checkpoint SCN系統常規檢查點checkpoint對應的scn號Oracle就把系統檢查點的scn存儲到控制文件中)

 

  •  
  •  Resetlogs scn(系統在執行resetlogs操作時的scn號,當數據庫系統做resetlogs操作完成之後會把這時scn號記錄到控制文件)

SQL>select RESETLOGS_CHANGE# from v$database;

  •  Datafile Checkpoint scn(一個檢查點動作完成後,Oracle就把每個數據文件的scn單獨存放在控制文件中,每個數據文件一個)

SQL> select name, CHECKPOINT_CHANGE# from v$datafile where name ='FILENAME';

  •  End scn(ORACLE將End scn號存放在控制文件中,這個scn號用於檢查數據庫啓動過程是否需要做instance recovery,每個數據文件一個)           

SQL> select name, LAST_CHANGE# from v$datafile where name ='FILENAME';

  •  First scn、Next scn(控制文件中包含每個日誌文件的low scn和next scn)

 

在線重做日誌

2. 數據文件中(頭部):

  • Start scn(ORACLE將Start scn號存放在數據文件頭中,這個scn用於檢查數據庫啓動過程是否需要做media recovery,每個數據文件一個)

SQL> Select name,checkpoint_change# from v$datafile_header where name ='FILENAME';

3. 數據文件

4. 日誌文件(日誌文件頭中包含了low scn,next scn,表示該日誌文件包含有從low scn到next scn的redo record)

接下來我們實例演示一下
Dump控制文件

Alter session set events 'immediate trace name controlf level 8';

打開一個新的session
Dump數據文件頭部

 

控制dump文件節選
第一段

***************************************************************************
DATABASE ENTRY
***************************************************************************
 (size = 316, compat size = 316, section max = 1, section in-use = 1,
  last-recid= 0, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 1, numrecs = 1)
 04/11/2009 11:07:20
 DB Name "ORA"
 Database flags = 0x00404001 0x00001000
 Controlfile Creation Timestamp  04/11/2009 11:07:20
 Incmplt recovery scn: 0x0000.00000000

 Resetlogs scn: 0x0000.00089d08 Resetlogs Timestamp  04/11/2009 11:07:22
此處爲Resetlogs scn 

 Prior resetlogs scn: 0x0000.00000001 Prior resetlogs Timestamp  12/19/2006 04:16:53
 Redo Version: compatible=0xa200300
 #Data files = 4, #Online files = 4
 Database checkpoint: Thread=1 scn: 0x0000.000a326c
Database checkpoint SCN,系統常規檢查點checkpoint對應的scn號,Oracle就把系統檢查點的scn存儲到控制文件中
Threads: #Enabled=1, #Open=1, Head=1, Tail=1
 enabled  threads:  01000000 00000000 00000000 00000000
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Max log members = 3, Max data members = 1
 Arch list: Head=2, Tail=2, Force scn: 0x0000.00096e74scn: 0x0000.000a326b
 Activation ID: 1302138531
 
Controlfile Checkpointed at scn:  0x0000.000a32ca 04/17/2009 15:59:53
增量檢查點更新的scn
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
***************************************************************************
CHECKPOINT PROGRESS RECORDS
***************************************************************************
 (size = 8180, compat size = 8180, section max = 11, section in-use = 0,
  last-recid= 0, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 2, numrecs = 11)
THREAD #1 - status:0x2 flags:0x0dirty:11
dirty buffer的數量

low cache rba:(0x8.b85.0) on disk rba:(0x8.bfb.0)
on disk scn: 0x0000.000a340b 04/17/2009 16:10:26
增量檢查點會更新low cache rba
resetlogs scn: 0x0000.00089d08 04/11/2009 11:07:22
 
heartbeat: 684440041 mount id: 1302634282
心跳檢驗沒三秒檢查一次,用於驗證實例的存活性。
THREAD #2 - status:0x0 flags:0x0 dirty:0
low cache rba:(0x0.0.0) on disk rba:(0x0.0.0)
on disk scn: 0x0000.00000000 01/01/1988 00:00:00
resetlogs scn: 0x0000.00000000 01/01/1988 00:00:00
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

第二段


***************************************************************************
REDO THREAD RECORDS
***************************************************************************
 (size = 256, compat size = 256, section max = 8, section in-use = 1,
  last-recid= 0, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 9, numrecs = 8)
THREAD #1 - status:0xf thread links forward:0 back:0
 #logs:3 first:1 last:3 current:2 last used seq#:0x8
 enabled at scn: 0x0000.00089d08 04/11/2009 11:07:22
 disabled at scn: 0x0000.00000000 01/01/1988 00:00:00
 opened at 04/17/2009 15:59:49 by instance ora

Checkpointed at scn:  0x0000.000a326c 04/17/2009 15:59:49
redo進程檢查點,這個檢查點和Database的檢查點信息一致。
 thread:1 rba:(0x8.2.10)
 enabled  threads:  01000000 00000000 00000000 00000000 00000000 00000000

第三段


***************************************************************************
LOG FILE RECORDS
***************************************************************************
 (size = 72, compat size = 72, section max = 16, section in-use = 3,
  last-recid= 6, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 10, numrecs = 16)
LOG FILE #1:
  (name #3) +DISKGROUP1/ora/onlinelog/group_1.261.683896043
 Thread 1 redo log links: forward: 2 backward: 0
 siz: 0x19000 seq: 0x00000006 hws: 0x6 bsz: 512 nab: 0x92aa flg: 0x1 dup: 1
 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.0008e394
 Low scn: 0x0000.00096e74 04/14/2009 12:57:09
 Next scn: 0x0000.0009de44 04/17/2009 15:17:12

LOG FILE #2:
  (name #2) +DISKGROUP1/ora/onlinelog/group_2.262.683896043
 Thread 1 redo log links: forward: 3 backward: 1
 siz: 0x19000 seq: 0x00000008 hws: 0x2 bsz: 512 nab: 0xffffffff flg: 0x8 dup: 1
 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.0009de44
 Low scn: 0x0000.000a326b 04/17/2009 15:59:48
 Next scn: 0xffff.ffffffff 01/01/1988 00:00:00
日誌文件中的first scn和next scn,當前文件的next scn爲無窮大

LOG FILE #3:
  (name #1) +DISKGROUP1/ora/onlinelog/group_3.263.683896045
 Thread 1 redo log links: forward: 0 backward: 2
 siz: 0x19000 seq: 0x00000007 hws: 0x5 bsz: 512 nab: 0xa8c flg: 0x1 dup: 1
 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.00096e74
 Low scn: 0x0000.0009de44 04/17/2009 15:17:12
 Next scn: 0x0000.000a326b 04/17/2009 15:59:48

第四段

***************************************************************************
DATA FILE RECORDS
***************************************************************************
 (size = 428, compat size = 428, section max = 100, section in-use = 4,
  last-recid= 7, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 11, numrecs = 100)
DATA FILE #1:
  (name #7) +DISKGROUP1/ora/datafile/system.256.683895993
creation size=0 block size=8192 status=0xe head=7 tail=7 dup=1
 tablespace 0, index=1 krfil=1 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:63 scn: 0x0000.000a326c 04/17/2009 15:59:49
 Stop scn: 0xffff.ffffffff 04/17/2009 15:57:34
checkpoint cnt號:checkpoint的次數
scn:爲Datafile Checkpoint scn
stop scn當數據庫正常打開時
這個值被設爲無窮大。
 Creation Checkpointed at scn:  0x0000.00000008 12/19/2006 04:17:12
 thread:0 rba:(0x0.0.0)

數據文件dump

DATA FILE #1:
  (name #7) +DISKGROUP1/ora/datafile/system.256.683895993
creation size=0 block size=8192 status=0xe head=7 tail=7 dup=1
 tablespace 0, index=1 krfil=1 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:63 scn: 0x0000.000a326c 04/17/2009 15:59:49
 Stop scn: 0xffff.ffffffff 04/17/2009 15:57:34
 Creation Checkpointed at scn:  0x0000.00000008 12/19/2006 04:17:12
 thread:0 rba:(0x0.0.0)
 enabled  threads:  00000000 00000000 00000000 00000000 00000000 00000000
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 Hot Backup end marker scn: 0x0000.00000000
 aux_file is NOT DEFINED
 V10 STYLE. FILEHEADER (header前面的信息來自控制文件,後面的來自數據文件頭部

 Compatibility Vsn = 169870080=0xa200300
 Db ID=1302124456=0x4d9cd7a8, Db Name='ORA'
 Activation ID=0=0x0
 Control Seq=457=0x1c9, File size=61440=0xf000
 File Number=1, Blksiz=8192, File Type=3 DATA
Tablespace #0 - SYSTEM  rel_fn:1
Creation   at   scn: 0x0000.00000008 12/19/2006 04:17:12
Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0
 reset logs count:0x28c36cea scn: 0x0000.00089d08 reset logs terminal rcv data:0x0 scn: 0x0000.00000000
 prev reset logs count:0x245542b5 scn: 0x0000.00000001 prev reset logs terminal rcv data:0x0 scn: 0x0000.00000000
 recovered at 04/17/2009 15:59:47
 status:0x2004 root dba:0x00400179 chkpt cnt: 63 ctl cnt:62
datafile cnt號和control file cnt號

begin-hot-backup file size: 0

Checkpointed at scn:  0x0000.000a326c 04/17/2009 15:59:49
 
begin scn號
 thread:1 rba:(0x8.2.10)
 

日誌文件dump文件
DUMP OF REDO FROM FILE '+DISKGROUP1/ora/onlinelog/group_2.262.683896043'
 Opcodes *.*
 RBAs: 0x000000.00000000.0000 thru 0xffffffff.ffffffff.ffff
 SCNs: scn: 0x0000.00000000 thru scn: 0xffff.ffffffff
 Times: creation thru eternity
 FILE HEADER:
 Compatibility Vsn = 169870080=0xa200300
 Db ID=1302124456=0x4d9cd7a8, Db Name='ORA'
 Activation ID=1302138531=0x4d9d0ea3
 Control Seq=457=0x1c9, File size=102400=0x19000
 File Number=2, Blksiz=512, File Type=2 LOG
 descrip:"Thread 0001, Seq# 0000000008, SCN 0x0000000a326b-0xffffffffffff"
 thread: 1 nab: 0xffffffff seq: 0x00000008 hws: 0x2 eot: 1 dis: 0
 resetlogs count: 0x28c36cea scn: 0x0000.00089d08 (564488)
 resetlogs terminal rcv count: 0x0 scn: 0x0000.00000000
 prev resetlogs count: 0x245542b5 scn: 0x0000.00000001 (1)
 prev resetlogs terminal rcv count: 0x0 scn: 0x0000.00000000
 Low  scn: 0x0000.000a326b (668267) 04/17/2009 15:59:48
 Next scn: 0xffff.ffffffff 01/01/1988 00:00:00
與控制文件中對應的low scn和next scn
 Enabled scn: 0x0000.00089d08 (564488) 04/11/2009 11:07:22
 Thread closed scn: 0x0000.000a326b (668267) 04/17/2009 15:59:48
 Disk cksum: 0x5f9b Calc cksum: 0x5f9b
 Terminal recovery stop scn: 0x0000.00000000
 Terminal recovery  01/01/1988 00:00:00

 

Alter session set events 'immediate trace name file_hdrs level 10';
獲得處於current狀態的日子文件

SQL> select l.STATUS,lf.member from v$log l,v$logfile lf where l.GROUP#=lf.GROUP#;
 STATUS ---------------- MEMBER -------------------------------------------------------------------------------- INACTIVE +DISKGROUP1/ora/onlinelog/group_3.263.683896045 CURRENT +DISKGROUP1/ora/onlinelog/group_2.262.683896043 INACTIVE +DISKGROUP1/ora/onlinelog/group_1.261.683896043
打開一個新的session
Dump日誌文件
注意:
在每次dump文件後都要重新打開一個session才能重新dump下一個文件,在dump文件後用

SELECT    d.VALUE
       || '/'
       || LOWER (RTRIM (i.INSTANCE, CHR (0)))
       || '_ora_'
       || p.spid
       || '.trc' trace_file_name
  FROM (SELECT p.spid
          FROM v$mystat m, v$session s, v$process p
         WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,
       (SELECT t.INSTANCE
          FROM v$thread t, v$parameter v
         WHERE v.NAME = 'thread'
           AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,
       (SELECT VALUE
          FROM v$parameter
         WHERE NAME = 'user_dump_dest') d
/
 
獲得dump文件的路徑。
Alter system dump logfile '+DISKGROUP1/ora/onlinelog/group_2.262.683896043';

select group#,thread#,sequence#,first_change# from v$log;
 歸檔重做日誌

select NAME,THREAD#,SEQUENCE#,FIRST_CHANGE#,NEXT_CHANGE# from v$archived_log;

SQL> select checkpoint_change# from v$database;
  • Controlfile  checkpoint  SCN(增量檢查點更新的scn)
  • Redo checkpoint scn(redo進程記錄的檢查點信息和Database checkpoint SCN 是一致的)
  •  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章