mysql scn_数据库控制文件中的SCN详解

在的启动和关闭数据库的时候控制文件起着重要的作用,从官方文档中我们可以知道控制文件中保存着下列的信息: 数据库的名称及数据库创建时间等 所有的数据文件、重做日志文件的名称和位置信息。 表空间的信息。 Offline 数据文件的信息。 重做日志及归档日志

在的启动和关闭数据库的时候控制文件起着重要的作用,从官方文档中我们可以知道控制 文件中保存着下列的信息:

数据库的名称及数据库创建时间等

所有的数据文件、重做日志文件的名称和位置信息。

表空间的信息。

Offline数据文件的信息。

重做日志及归档日志的信息。

备份集及备份文件的信息

检查点及SCN信息等。

正常关闭数据库时,控制文件中的SCN值

在控制文件的数据文件信息部分,对于每一个数据文件都有一个Checkpoint SCN和Stop SCN,在数据库启动时要对其进行校验。

我们知道数据库在一致性关闭的时候控制文件中的SCN是怎样的呢?

1.一致性关闭数据库。Dump控制文件

SYS@ENMOEDU > shutdown immediate

SYS@ENMOEDU > startup mount

Database mounted.

SYS@ENMOEDU > oradebug setmypid;

Statement processed.

SYS@ENMOEDU > oradebug dump controlf 3;

Statement processed.

2.数据库的相关信息,上次数据库成功完成检查点的信息

***************************************************************************

DATABASE ENTRY

***************************************************************************

(size = 316, compat size = 316, div max = 1, div in-use = 1,

last-recid= 0, old-recno = 0, last-recno = 0)

(extent = 1, blkno = 1, numrecs = 1)

01/13/2014 16:13:27

DB Name "ENMOEDU"

Database flags = 0x00404001 0x00001000

Controlfile Creation Timestamp 01/13/2014 16:13:28

Incmplt recovery scn: 0x0000.00000000

Resetlogs scn: 0x0000.000fc451 Resetlogs Timestamp 02/05/2014 15:44:46

Prior resetlogs scn: 0x0000.000fa657 Prior resetlogs Timestamp 02/05/2014 14:15:27

Redo Version: compatible=0xb200000

#Data files = 6, #Online files = 6

Database checkpoint: Thread=1 scn: 0x0000.0011b73b

Threads: #Enabled=1, #Open=0, Head=0, Tail=0

3.检查点进程记录。Low cache rba是恢复的起点,此时是fffffff说明数据库不需要恢复。On disk rba是恢复的终点。

***************************************************************************

CHECKPOINT PROGRESS RECORDS

***************************************************************************

(size = 8180, compat size = 8180, div max = 11, div in-use = 0,

last-recid= 0, old-recno = 0, last-recno = 0)

(extent = 1, blkno = 2, numrecs = 11)

THREAD #1 - status:0x1 flags:0x0 dirty:0

low cache rba:(0xffffffff.ffffffff.ffff) on disk rba:(0x6.6f7.0)

on disk scn: 0x0000.0011b58f 02/19/2014 21:58:48

resetlogs scn: 0x0000.000fc451 02/05/2014 15:44:46

heartbeat: 839919586 mount id: 99161229

Flashback log tail log# 2 thread# 1 seq 2 block 5337 byte 0

4.Redo线程记录中记录了检查点的信息,与数据库的检查点一样

***************************************************************************

REDO THREAD RECORDS

***************************************************************************

(size = 256, compat size = 256, div max = 8, div in-use = 1,

last-recid= 0, old-recno = 0, last-recno = 0)

(extent = 1, blkno = 9, numrecs = 8)

THREAD #1 - status:0xbe thread links forward:0 back:0

#logs:3 first:1 last:3 current:3 last used seq#:0x6

enabled at scn: 0x0000.000fc451 02/05/2014 15:44:46

disabled at scn: 0x0000.00000000 01/01/1988 00:00:00

opened at 02/19/2014 21:57:43 by instance ENMOEDU

Checkpointed at scn: 0x0000.0011b73b 02/19/2014 21:58:52

5.数据文件中记录的检查点信息与DATABASE ENTRY记录的一样

***************************************************************************

DATA FILE RECORDS

***************************************************************************

DATA FILE #6:

name #13: /u01/app/oracle/oradata/ENMOEDU/sample01.dbf

creation size=12800 block size=8192 status=0xe head=13 tail=13 dup=1

tablespace 7, index=7 krfil=6 prev_file=0

unrecoverable scn: 0x0000.001143f4 02/10/2014 15:34:23

Checkpoint cnt:7 scn: 0x0000.0011b73b 02/19/2014 21:58:52

Stop scn: 0x0000.0011b73b 02/19/2014 21:58:52

Creation Checkpointed at scn: 0x0000.00111736 02/10/2014 15:28:26

thread:1 rba:(0x4.1f5.10)

enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000

由于数据库是一致性关闭,数据文件中的Checkpoint scn与Stop scn,database scn和redo中记录的scn值都一样,所以在下次启动数据库的时候可以直接启动,不用进行恢复。

数据库异常关闭的时候的SCN的值。

1.如果数据库异常关闭,则不会执行任何的检查点。通过shutdown abort可以模拟一次异常,当使用shutdown abort方式关闭数据库时,此时的SCN值是怎么样的。

SYS@ENMOEDU > shutdown abort

ORACLE instance shut down.

SYS@ENMOEDU > startup mount

Database mounted.

SYS@ENMOEDU > oradebug setmypid;

Statement processed.

SYS@ENMOEDU > oradebug dump controlf 3;

Statement processed.

2.在DATABASE ENTRY中我们可以看到数据库thread checkpoint信息。

***************************************************************************

DATABASE ENTRY

***************************************************************************

(size = 316, compat size = 316, div max = 1, div in-use = 1,

last-recid= 0, old-recno = 0, last-recno = 0)

(extent = 1, blkno = 1, numrecs = 1)

01/13/2014 16:13:27

DB Name "ENMOEDU"

Database flags = 0x00404001 0x00001200

Controlfile Creation Timestamp 01/13/2014 16:13:28

Incmplt recovery scn: 0x0000.00000000

Resetlogs scn: 0x0000.000fc451 Resetlogs Timestamp 02/05/2014 15:44:46

Prior resetlogs scn: 0x0000.000fa657 Prior resetlogs Timestamp 02/05/2014 14:15:27

Redo Version: compatible=0xb200000

#Data files = 6, #Online files = 6

Database checkpoint: Thread=1 scn: 0x0000.0011b73e

Threads: #Enabled=1, #Open=1, Head=1, Tail=1

3. 检查点信息其中包含low chache rba和on disk ora信息。low cache rba(recovery block address)是恢复的起点,on disk rba(确定已经写到磁盘上的重做值)是恢复的终点,

***************************************************************************

CHECKPOINT PROGRESS RECORDS

***************************************************************************

(size = 8180, compat size = 8180, div max = 11, div in-use = 0,

last-recid= 0, old-recno = 0, last-recno = 0)

(extent = 1, blkno = 2, numrecs = 11)

THREAD #1 - status:0x2 flags:0x0 dirty:510

low cache rba:(0x6.18e2.0) on disk rba:(0x6.ca99.0)

on disk scn: 0x0000.0011e785 02/19/2014 22:55:08

resetlogs scn: 0x0000.000fc451 02/05/2014 15:44:46

heartbeat: 839992040 mount id: 99202971

Flashback log tail log# 3 thread# 1 seq 3 block 2244 byte 0

4. Redo线程的记录。

***************************************************************************

REDO THREAD RECORDS

***************************************************************************

(size = 256, compat size = 256, div max = 8, div in-use = 1,

last-recid= 0, old-recno = 0, last-recno = 0)

(extent = 1, blkno = 9, numrecs = 8)

THREAD #1 - status:0xbf thread links forward:0 back:0

#logs:3 first:1 last:3 current:3 last used seq#:0x6

enabled at scn: 0x0000.000fc451 02/05/2014 15:44:46

disabled at scn: 0x0000.00000000 01/01/1988 00:00:00

opened at 02/19/2014 22:49:27 by instance ENMOEDU

Checkpointed at scn: 0x0000.0011b73e 02/19/2014 22:49:27

thread:1 rba:(0x6.9ce.10)

enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000

5. 数据文件的检查点信息;

DATA FILE #6:

name #13: /u01/app/oracle/oradata/ENMOEDU/sample01.dbf

creation size=12800 block size=8192 status=0xe head=13 tail=13 dup=1

tablespace 7, index=7 krfil=6 prev_file=0

unrecoverable scn: 0x0000.001143f4 02/10/2014 15:34:23

Checkpoint cnt:8 scn: 0x0000.0011b73e 02/19/2014 22:49:27

Stop scn: 0xffff.ffffffff 02/19/2014 21:58:52

Creation Checkpointed at scn: 0x0000.00111736 02/10/2014 15:28:26

thread:1 rba:(0x4.1f5.10)

enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000

可以看出由于是异常关闭数据库,数据库没有完成最后的检查点,数据库文件的stop scn仍然设定为最大的ffffffff。由以上信息可以看出,各部分的checkpoint scn都是一样的,但是数据文件的stop scn不等于checkpoint scn,意味着数据库的上一次的关闭没有执行完全检查点,是异常关闭数据库,此时启动数据库需要进行完全恢复。

在进行恢复的时候,从检查点信息中读取low cache rba的值确定日志文件的地址。再读取日志,从最后的检查点开始,应用所有的重做记录,这个过程叫做前滚。数据库可以被打开提供访问和使用,但是此时数据库中包含已提交的和没有提交的事务,使用undo段回滚。

再对数据库进行实例恢复的时候,我们从alert日志中可以看到的信息。

alter database open

Beginning crash recovery of 1 threads

parallel recovery started with 2 processes

Started redo scan

Completed redo scan

read 22747 KB redo, 510 data blocks need recovery

Started redo application at

Thread 1: logseq 6, block 6370

Recovery of Online Redo Log: Thread 1 Group 3 Seq 6 Reading mem 0

Mem# 0: /u01/app/oracle/oradata/ENMOEDU/redo03.log

Completed redo application of 3.07MB

Wed Feb 19 23:13:55 2014

Completed crash recovery at

Thread 1: logseq 6, block 51865, scn 1193381

510 data blocks read, 493 data blocks written, 22747 redo k-bytes read

Wed Feb 19 23:13:55 2014

在实例恢复的时候。 Alter中的logseq 6, block 6370就是日志中的检查点中记录的low cache rba:(0x6.18e2.0)。恢复完成时的logseq 6, block 51865就是on disk rba:(0x6.ca99.0)。把十六进制的数换成十进制。

总结:当一致性关闭数据库的时候,关闭数据库之前数据库会执行一个检查点动作,每个数据文件的你Stop SCN会被设置为Checkpoint SCN。数据库不需要恢复。当数据库是异常关闭的时候,Stop SCN来不及设置为Checkpoint SCN会是无穷大,在重启数据库的时候需要恢复

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值