redo log

redo log的文件有redo records组成,一个redo record由一组change vectors组成。改变向量描述了单个块的改变。redo record记录的数据可以用来重建所有数据库的改变。包含undo段。因此redo log也包含回滚段。当你recover数据库的时候,数据库读取redo信息并应用到相应的数据块上。每次事务提交的时候,lgwr把log buffer中的red records写到log file中,并分配一个scn来标识redo records。只有所有的redo records写到磁盘中用户才会被告知事务已经提交了。

改变向量中包含的信息:

1块修改前的版本号

2操作编码

3改变的值

redo records:描述了一个物理一致性的改变,按scn排序,rba标识

active(current)and inactive redo log file

oracle在写入redo buffer的时候只会使用一个log file,lgwr正在写入的redo log就是current logfile;需要被实例用来recovery的redo log就叫active redo log。redolog不在被实例恢复需要的就叫inactive redo log.

如果启用了归档,数据库直到归档了active的内容后,才可以重用这个redo log,如果没有启用归档,那么最后一个redo log写满后,lgwr会覆盖第一个active文件。

每次发生switch的时候,oracle给redo log file分配一个新的log sequence number。每个在线或活动的redo log 通过log sequence number来标识。在实例恢复期间,数据库按sequence number来降序的应用redo log。

清空redo log file
一个redo log file在数据库打开的时候可能损坏了,因为归档不能继续,可能要停止数据库。在这种情况下,使用alter database clear logfile来重新初始化文件,不用关闭数据库。

alter database clear logfile group 3;

这个语句清空了日志组3中的log file。但是在下面的情况下,会遇到问题:

1如果仅有2个日志组

2损坏的日志是当前日志组。

如果损坏的日志还没有被归档,使用带有unarchived关键字

alter database clear unarchived logfile group 3;这个语句清空了损坏的日志文件,避免归档他们。被清理的redo文件即使他们没有归档也是可用的。如果你清理了一个恢复时候需要的log file,那么你就无法恢复了。数据库会写个alert信息。


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

块版本

当块改变的时候,基本的思路是在改变时候的scn记录到块头,但因为在同一个scn可能会有很多的改变在同一个块上,所以在块头也要存储一个序列号,来标识同一scn时候的不同改变。当scn改变的时候,序列号也被重置为1.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值