resetlogs浅析

------------感谢博主分享---------

 

 

alter database open resetlogs;

SCN:系统改变号,记录系统所有数据块的变化,当有新的数据块变化,oracle database server会依据SCN进行一次增长,保证数据的连续性,buffer cache 中最新更改的数据块为当前最大的SCN。

log sequence number:redo 日志中记录日志的改变,数据库中每时每刻的DDL操作都会被记录日志,log file 根据log sequence number来串行化的记录所有的改变操作。当执行alter system switch logfile; 或者达到redo log 切换条件时,切换后的log file会根据前一个log file的log sequence number加1。当执行resetlogs时,log sequence number会被重置为1.

-------incarnation
正常运行中Oracle内部有一个生命周期(incarnation)。不完全恢复,由于已经无法将数据库恢复到当前状态(崩溃前的状态),Oracle数据库也不知道当前处于什么状态了,事务上也许一致,但是不是最新,Oracle自己无从判断,后续也许仍有重做日志文件,但却无法应用(或DBA不允许应用)。
若没有 incarnation,正常Open数据库的话又会产生redo log,并且这些日志文件的序号与之前相同(但内容可能不同),产生的归档无效,因此必须在执行不完全恢复后,标示之前生命周期结束。
以RESETLOGS方式打开后,Oracle数据库又开始了一个新的生命周期,即重置Incarnation,日志文件序号也被重新初始化到1。

resetlogs 运行机制:

1、重置 oline logfiles在控制文件中的元数据
2、10g之后归档当前redo,并选则有效的thread的一个logfile,使其状态为current。清空logfile内容,并将log sequence number重置为1.
3、所有的online 的datafile header 被新的checkpoint和新的“resetlog data”更新,offline datafile被标记为需要media recover。


resetlogs 使用场景:

1、不完全恢复时,需要使用resetlogs重置 log sequence number ,防止log file 中新的log 对应的log sequence number 和旧的log sequence number 出现冲突。
2、控制文件发生更改(重建或从备份中恢复),需要使用resetlogs重置 oline logfiles在控制文件中的元数据。

resetlogs的原理机制
 
1)在open resetlogs时,oracle要对比检查控制文件和数据字典file$,
如果一个数据文件在file$中存在,但在控制文件中不存在,则在控制文件中将创建一个这个文件条目(MISSINGnnn ‘nnn’是十进制的file_id),同时这个文件被标记为离线并需要恢复。
如果实际中这个文件存在的话,可以通过如下sql更改到正确的文件名。
 
  sql> alter database rename file 'MISSINGnnn' to '<filename>';
  
 然后数据文件被恢复,online。
 
2)如果一个数据文件存在控制文件中,而不在数据字典file$中,
那么直接把控制文件中这个文件的记录条目删除(oracle认为file$文件是正确的,要以它为准)
 
3)当用旧的备份控制文件恢复的时候,如果有数据文件不在控制文件中注册(会提示控制文件比较旧的错误),
那就不得不重建数据文件,以使数据文件注册到控制文件中,然后系统会自动利用redo/archivelog恢复这个数据文件。
 
 
 
 
在保证控制文件和file$文件内容一致之后,还要满足以下三点才能resetlogs。
 
1、数据文件的版本要小于当前数据库的版本(counter)
 
2、offline的数据文件必须被online或者直接drop
 
3、所有的数据文件不能设置fuzzy bit,所有的数据文件要有相同的检查点(checkpoint SCN) 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值