暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

bbed修复数据文件头信息、推进数据文件scn等

原创 2023-01-31
675

问题现象:① 表空间新增数据文件时,文件名出错,且归档过期或已无在线日志文件;② 异常断电时,导致数据文件头中的scn与控制文件中的scn不一致;

1、查看当前数据文件信息
SQL> set pagesize 20000
set linesize 180
set pause off
set serveroutput on
set feedback on
set echo on
set numformat 999999999999999
Spool recovery_info.txt
select file#,substr(name, 1, 50), status,checkpoint_change#,checkpoint_time from v$datafile;
select substr(name,1,50), recover, fuzzy, checkpoint_change# from v$datafile_header;
select GROUP#,substr(member,1,60) from v$logfile;
select * from v$recover_file;
select distinct status from v$backup;
select hxfil FILENUMBER, fhsta STATUS, fhscn SCN, FHAFS ABSSCN , fhrba_Seq SEQUENCE from x$kcvfh;
select distinct (fuzzy) from v$datafile_header;
spool off
exit;


2、停库

sql> shutdown immediate


-----下面使用bbed工具查看、修改数据文件,该操作风险极大,操作前请备份数据库!

(需要关注四个偏移量offset点,分别为484、492、140和148
a、datafile 的file header 存储在第一个block里
b、Oracle considers four attributes of this data structure when determining if a datafile is sync with the other data files of the database:(不同oracle版本offset可能不同)
(1)kscnbas (at offset 484) – SCN of last change to the datafile.
(2)kcvcptim (at offset 492) -Time of the last change to the datafile.
(3)kcvfhcpc (at offset 140) – Checkpoint count.
(4)kcvfhccc (at offset 148) – Unknown, but is always 1 less than thecheckpoint point count.
Oracle有4个属性来判断datafile 是否和其他的datafile 一致,如果都一致,可以正常操作,如果不一致,那么会报ORA-01113错误)



3、查看某个正确文件的数据文件头,偏移量484
双击bbed.bat
bbed> set filename '这里是filelist文件中的地址/user01.dbf'
bbed> set block 2
--window下块从2开始,linux下块从1开始
bbed> map
bbed> set offset 484
bbed> set count 128
bbed> dump
--照片记录这个偏移量484的信息,后续修改需要使用


4、切换查看异常文件的数据文件头,偏移量484
bbed> set filename '这里是filelist文件中的地址/异常的文件名.dbf'
bbed> set block 2
bbed> map
bbed> set offset 484
bbed> set count 128
bbed> dump
--照片记录这个偏移量484的信息,如果有误后续需要改回去
bbed> m /x 正确的偏移量值 484
回车后输入y,确认修改

----按照步骤3、步骤4修改其他需要修改的偏移量----
----492\140\148的偏移量


bbed> sum apply
这个步骤表示提交修改

bbed> verify
这步表示提交验证



5、cmd下,登录sqlplus / as sysdba,启动数据库到mount状态
sql> startup mount;
sql> select file#,name,checkpoint_change#,checkpoint_time from v$datafile;
sql> select file#, recover, fuzzy, CHECKPOINT_CHANGE# from v$datafile_header;



6、手动去数据库文件目录下将数据文件名修改为符合规则的
然后使用命令调整数据字典信息
alter database rename file 'D:\app\administrator\oradata\orcl\d_01.DBF' to 'D:\app\administrator\oradata\orcl\d01.DBF';


7、尝试将数据库open
alter database open;

select tablespace_name,file_name from dba_data_files;


8、如果直接open不开,重建控制文件、需使用隐含参数打开
SQL> alter database backup controlfile to trace as 'd:\app\control';

复制文件中startup nomount下create controlfile 的内容,将内容复制到nomount状态下执行


SQL> create pfile='d:\app\pfile' from spfile;


-------d:\app\pfile中加上----------
_allow_resetlogs_corruption= TRUE
------------------------------------


SQL> startup mount pfile='d:\app\pfile' force
SQL> alter database open resetlogs;

SQL> alter system set "_allow_resetlogs_corruption"=false scope=spfile;








「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论