数据文件的SCN和数据块的SCN有何区别

数据文件的SCN和数据块的SCN有何区别[@more@]

数据文件的SCN和数据块的SCN有何区别

这个问题是PUB上一个朋友的问题,总结一下

数据文件scn是指的是数据文件第一个块上的SCN,这个块指的是表空间头tablespace header,里面记录这很多信息。其实在第一个块上有很多SCN

例如:

create SCN 数据文件添加时候的SCN

checkpoint SCN

recovery SCn

现在就按照数据文件SCN理解为表空间头块上的checkpoint SCN来说

这个SCN和数据块上的SCN之间的相同点都是SCN(废话,呵呵),都具有SCN相同大小的结构。都是6个字节。(都是废话)

1、数据块上有一个SCNSEQ来表示数据块的版本,只要是为了在数据块恢复的时候来标识用的,在我们对这个数据块进行修改后,DBWR将这个修改的块写入到磁盘上,假如在没有来得及将数据块写入磁盘的时候,数据块crash了,下次重启的时候,数据块回自动对其进行恢复,这就要根据SCNSEQ来标识我们redo上的记录是否适合这个数据块的版本。如果redo = SCNSEQ,就会应用。如果redo < SCNSEQ,就会跳过。如果redo > SCNSEQ,乖乖不得了,这就会出现问题了,Oracle会告诉你block stuck,这时候就需要使用备份恢复了。

数据块上SCN的功能,还有一个功能就是数据块corrupt的校验,在块的尾部有一个6个字节的tail,其中有4个字节就是SCN的一部分。

通过这个和块头部的SCN比较,是检查corrupt的条件之一。

2tablespace header上的checkpoint SCN 是干什么用的哪?这个主要在checkpoint上写入的,就是说你在满足一定的条件对这个数据文件产生了checkpoint的时候,就会将当时的SCN写入到数据文件头上。主要是做数据文件恢复用的。或者是看看这个数据文件是否需要恢复时候用的。因为在对这个数据文件头写入的同时,还需要在控制文件上写入相同的SCN,在你做某些操作的时候,Oracle会比较控制文件和数据文件上的SCN,看看这个数据文件是不是当前的数据文件。举一个简单的例子吧。还说假如在打开数据库的时候,Oracle是怎么知道我给的控制文件和数据文件是一致的哪,会不会拿一个很久之前的数据文件来滥竽充数哪,Oracle也不傻,他会比较控制文件上的SCN和这个数据文件上的SCN是不是一致的,如果不是,Oracle会告诉你出现问题了。目的还是标识一个版本,做到数据的一致性。

那两种有什么关系那?

除了结构相同之外,我还真的没有想出两者之间有什么必然的联系。不知道大牛有没有知道的,谢谢

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

转载于:http://blog.itpub.net/222350/viewspace-919055/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值