几个scn和恢复的细节

前些天在看电视剧《无懈可击之高手如林》,终于速度看完了,该静下心来看看oracle了,不然年底估计完成不了俺的4book的阅读了,这些天陆陆续续接触了rman备份的原理,其中肯定不免得接触了oracle中的scn,查阅资料当然主要是eygle的两本书的说法和itpub上网友整理的一些scn的资料。

当一个checkpoint发生时有哪些scn

1 发生检查点,记录系统的检查点scn

Select name,checkpoint_change# from v$datafile

2 发生检查点对数据文件的checkpoint scn更新,也就是数据文件checkpoint scn,存储在控制文件中

Select namecheckpoint_change# from v$datafile

3 数据文件头部又存储了启动的checkpoint scn

Select namecheckpoint_change# from v$datafile_header

4 数据文件的stop scn,同时存储在控制文件和数据文件头部中

Select name,last_change# from v$datafile

数据文件头部视图v$datafile_header不存在stop scn的信息,但是通过转储数据文件头部信息是可以看出stop scn

5 还有日志文件中low scnnext scn,也就是此日志文件记录的在某一区域的scnredo log

关于上述的scn,有点多,有点繁琐,理解起来并不舒服,个人结合资料:

系统检查点scn的发生alter system checkpoint肯定会对所有的数据文件的checkpoint scn同步,数据文件也发生checkpoint,然后数据文件头部启动checkpoint scn也会同步更新,一般都是相同的,除非是数据文件或者控制文件一个被替换了,因为控制文件中记录的数据文件checkpoint scn就是数据文件头部启动checkpoint scn,每次发生检查点都会让他们同步更新。

在这里根据eygel的深入浅出记载,个人的测试也如下:

首先当前数据库是open状态

1 首先转储控制文件

Alter session set events ‘immediate trace name controlf level 8’

内容如下:

DATA FILE #1:

(name #19) D:ORACLEPRODUCT10.2.0ORADATATESTSYSTEM01.DBF

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

tablespace 0, index=1 krfil=1 prev_file=0

unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

Checkpoint cnt:1179 scn: 0x0000.583aac2d 08/16/2011 11:11:04

Stop scn: 0xffff.ffffffff 08/16/2011 00:32:14

Creation Checkpointed at scn: 0x0000.00000009 03/14/2008 18:46:45

thread:0 rba:(0x0.0.0)

DATA FILE #2:

Checkpoint cnt 956 scn 0x0000.583a99b7

转储控制文件,可以查看具体有checkpoint cntcheckpoint scncheckpoint cnt也就是发生检查点的计数。每发生一次checkpoint时,checkpoint cnt就会增加1,此时checkpoint cnt scn注意查看了。

2 让数据文件1出于热备份状态

Alter tablespace system begin backup

Alter session set events ‘immiedate trace name controlf level 8’

内容如下:

DATA FILE #1:

(name #19) D:ORACLEPRODUCT10.2.0ORADATATESTSYSTEM01.DBF

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

tablespace 0, index=1 krfil=1 prev_file=0

unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

Checkpoint cnt:1180 scn: 0x0000.583ab466 08/16/2011 12:14:35

Stop scn: 0xffff.ffffffff 08/16/2011 00:32:14

DATA FILE #2

Checkpoint cnt:956 scn 0x0000.583a99b7

此时表空间热备时,会发生表空间一次检查点。此时checkpoint cnt会自增1,数据文件checkpoint scn也会更新,但是系统的checkpoint scn并没有改变。系统完全checkpoint会更新数据文件和控制文件的checkpoint scn,但是单个表空间的checkpoint,并没有带来整个系统的checkpoint scn的变化。

3 我们显示的调用一次完全检查点

Alter system checkpoint

Alter session set events ‘immiedate trace name controlf level 8’

内容如下:

DATA FILE #1:

(name #19) D:ORACLEPRODUCT10.2.0ORADATATESTSYSTEM01.DBF

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

tablespace 0, index=1 krfil=1 prev_file=0

unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

Checkpoint cnt:1181 scn: 0x0000.583ab466 08/16/2011 12:14:35

Stop scn: 0xffff.ffffffff 08/16/2011 00:32:14

Creation Checkpointed at scn: 0x0000.00000009 03/14/2008 18:46:45

DATA FILE #2:

Checkpoint cnt:957 scn:0x0000.583ab49d

此时查看数据文件的检查点信息发现Select name,checkpoint_change# from v$datafilev$datafile_header 此时相应的各数据文件的cnt都会增加,别的表空间数据文件都会随着系统的checkpoint同步checkpoint scn。但是system表空间的checkpoint scn没有变化,只是cnt增加1,因为出于热备期间,数据文件头部的checkpoint scn会被冻结。

4 结束热备份状态

Alter tablesapce users end backup

结束热备状态,此时此时又发生了一次检查点,数据文件头部信息checkpoint scn的冻结被取消并同步。

但是这个检查点是数据文件的检查点事件,观察数据文件2此时的cntscn都没有变化。

内容如下:

DATA FILE #1:

(name #19) D:ORACLEPRODUCT10.2.0ORADATATESTSYSTEM01.DBF

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

tablespace 0, index=1 krfil=1 prev_file=0

unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

Checkpoint cnt:1182 scn: 0x0000.583ab49d 08/16/2011 12:16:23

Stop scn: 0xffff.ffffffff 08/16/2011 00:32:14

Creation Checkpointed at scn: 0x0000.00000009 03/14/2008 18:46:45

thread:0 rba:(0x0.0.0)

DATA FILE #2

Checkpoint cnt 957 scn:0x0000.583ab49d

啰嗦了这么多,控制文件和日志文件中还记录的low scnnext scn,也就是此日志文件记录的在scn的某一段内的redo log的信息,

Alter session set events ‘immediate trace name controlf level 8’

内容如下:

LOG FILE #1:

WAIT #4: nam='control file sequential read' ela= 301 file#=0 block#=30 blocks=1 obj#=43 tim=13193545386

(name #8) D:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG

Thread 1 redo log links: forward: 2 backward: 0

siz: 0x19000 seq: 0x0000000f hws: 0x5 bsz: 512 nab: 0xf044 flg: 0x1 dup: 1

Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.583975fc

Low scn: 0x0000.583a2aa8 08/15/2011 22:50:57

Next scn: 0x0000.583a99b6 08/16/2011 09:26:20

LOG FILE #2:

(name #7) D:ORACLEPRODUCT10.2.0ORADATATESTREDO02.LOG

Thread 1 redo log links: forward: 3 backward: 1

siz: 0x19000 seq: 0x00000010 hws: 0x2 bsz: 512 nab: 0xffffffff flg: 0x8 dup: 1

Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.583a2aa8

Low scn: 0x0000.583a99b6 08/16/2011 09:26:20

Next scn: 0xffff.ffffffff 01/01/1988 00:00:00

此时log file #2是当前联机日志文件,因为next scn未知。

Scn和恢复

Scnoracle内部的时间机制,checkpoint scn主要是为了实例恢复的时间的减少,

数据库在从mountopen状态时

1首先查看控制文件记录的各数据文件的ckeckpoint cnt和各数据文件的checkpoint cnt是否一致。

2 再次查看控制文件记录的各数据文件头的开始checkpoint scn和控制文件结束checkpoint scn是否一致,因为在数据库正常shutdown时,数据库会发生一次正常检查点,控制文件中的各数据文件stop scn和数据文件头部开始scn一致。如果上述两个条件达不到,则需要进行数据库恢复。

回忆数据库的nomount mount open三个状态,nomount需要spfileMount需要controlfileopen需要数据文件和控制文件。

涉及到scn的是controfileredo log datafile

前段时间一致不是很理解恢复的细节,看过一段时间的os备份恢复和rman恢复,有点想法了。

open状态时:

alter tablespace system begin backup

正常关闭数据库。

Shutdown immediate

系统进行checkoint

Startup

由于在热备份状态system数据文件头部scn 被冻结,当重新启动数据库尝试到open状态时,无法成功,由于stop scn并没有同步成数据文件头部启动scn,此时无法打开数据库,只能到mount状态,需要介质恢复datafile 1.

recover datafile 1

利用controlfileredo log或者archive log来通过scn机制恢复datafile 1的启动scnstop scn同控制文件原先记录的达到一致。

然后打开数据库

Alter database open

此时如果再次转储控制文件发现控制文件的stop scn已经变味无穷大了。

当然数据快头中还有scn等的信息,现在关于检查点 scn等的还是有一点模糊,后续继续跟进了。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25362835/viewspace-1053918/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25362835/viewspace-1053918/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值