首页 > 数据库 >无数据备份和无归档文件时,使用bbed修改数据文件头的SCN,强制打开数据库的方法

无数据备份和无归档文件时,使用bbed修改数据文件头的SCN,强制打开数据库的方法

时间:2024-09-14 13:23:54浏览次数:1  
标签:SCN 00000000 数据备份 DBF ORCL ORADATA 3103662768 ONLINE bbed

在数据库运维中经常会遇到某个数据文件的SCN与其他文件的SCN不一致(如offline后或者异常断电),如果归档日志被删除了,导致datafile不能recover,数据库不能打开情况,这时候我们需要借助bbed修改datafile header的scn与其他datafile的header scn 一致,然后recover datafile。

  • 一、问题产生原因

(1)数据文件被offline一段时间后,归档已经被删除不存在了;
(2)异常断电时,数据文件头中的scn与控制文件中的scn不一致;

  • 二 、 恢复方法

文件头说明:修改数据文件头,需要关注四个偏移量offset点,分别为484、492、140和148
a、datafile 的file header 存储在第一个block里(linux下块从1开始,window下块从2开始)
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错误,这时可以使用bbed工具来修改文件头相关值。

提醒:使用bbed工具修改数据文件,该操作风险极大,操作前请备份数据文件!!!

  • 三、具体恢复过程

3.1 查看当前数据库一些相关信息(恢复时需要关注的一些信息)

col name for a60
col member for a50
set pagesize 20000
set linesize 200
set pause off
set serveroutput on
set feedback on
set echo on
set numformat 999999999999999
spool recovery_info.txt
select file#,name, status,checkpoint_change#,checkpoint_time from v$datafile;
select file#,name, status,checkpoint_change#,checkpoint_time from v$datafile;
select name, recover, fuzzy, checkpoint_change# from v$datafile_header;
select GROUP#,member from v$logfile;
select * from v$recover_file;
select distinct status from v$backup;
select distinct (fuzzy) from v$datafile_header;
spool off
exit;

3.2 查看控制文件记录的数据文件的SCN信息

set lines 200 pages 500
col name for a60
col checkpoint_change for a20
select file#,name,status,to_char(checkpoint_change#) checkpoint_change
from v$datafile order by 1;

FILE# NAME STATUS CHECKPOINT_CHANGE
---------- -------------------------------------------------------------------------------- -------------- --------------------
1 D:\ORADATA\ORCL\SYSTEM01.DBF SYSTEM 3103652694
2 D:\ORADATA\ORCL\SYSAUX01.DBF ONLINE 3103652694
3 D:\ORADATA\ORCL\UNDOTBS01.DBF ONLINE 3103652694
4 D:\ORADATA\ORCL\USERS01.DBF ONLINE 3103652694
5 D:\ORADATA\ORCL\TS_EXAMPLE.DBF ONLINE 3103652694
6 D:\ORADATA\ORCL\OGGTBS01.DBF ONLINE 3103652694
7 D:\ORADATA\ORCL\REC_TBS01.DBF ONLINE 3103652694
8 D:\ORADATA\ORCL\MRKT.DBF ONLINE 3103652694

3.3 查看数据文件头的SCN信息

set lines 200 pages 500
col name for a60
col checkpoint_change for a20
select file#,name,status,to_char(checkpoint_change#) checkpoint_change
from v$datafile_header order by 1;

FILE# NAME STATUS CHECKPOINT_CHANGE
---------- -------------------------------------------------------------------------------- -------------- --------------------
1 D:\ORADATA\ORCL\SYSTEM01.DBF ONLINE 3103662768
2 D:\ORADATA\ORCL\SYSAUX01.DBF ONLINE 3103662768
3 D:\ORADATA\ORCL\UNDOTBS01.DBF ONLINE 3103323763
4 D:\ORADATA\ORCL\USERS01.DBF ONLINE 3103662768
5 D:\ORADATA\ORCL\TS_EXAMPLE.DBF ONLINE 3103662768
6 D:\ORADATA\ORCL\OGGTBS01.DBF ONLINE 3103662768
7 D:\ORADATA\ORCL\REC_TBS01.DBF ONLINE 3103662768
8 D:\ORADATA\ORCL\MRKT.DBF ONLINE 3103662768

从上面可以看到数据文件3的文件头SCN 3103323763 与 其他文件的文件头SCN 3103662768 不一致,我们需要将它修改成与其他文件一样,也就是将3103323763修改成3103662768

--3103662768 转换成16进制如下:
select trunc(3103662768/power(2,32)) scn_wrap,mod(3103662768,power(2,32)) scn_base,
to_char(trunc(3103662768/power(2,32)),'xxxxxxxxxxxxxxxxxxxxx') scn_wrap16,to_char(mod(3103662768,power(2,32)),'xxxxxxxxxxxxxxxxxxxxx') SCN_BASE16
from dual;
SCN_WRAP SCN_BASE SCN_WRAP16 SCN_BASE16
---------------- ---------------- -------------------------------------------- --------------------------------------------
0 3103662768 0 b8fe22b0

3.4 BBED查看3号数据文件的SCN信息

BBED> set file 3 block 2;
FILE# 3
BLOCK# 2
注意:如果是linux环境,文件头在块1,win os系统中第一个块头存在偏移量无法识别,访问时需要 block +1,所以在块2。

BBED> dump offset 484 count 128;
File: D:\ORADATA\ORCL\UNDOTBS01.DBF (3)
Block: 2 Offsets: 484 to 611 Dba:0x00c00002
------------------------------------------------------------------------
73f6f8b8 00000000 2416a245 01000000 b30b0000 04000000 1000ab0d 02000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

<32 bytes per line>

–注意字节顺序,大小端问题
73f6f8b8 反序后 b8f8f673 >>>> 转换成10进制就是 3103323763 ,这与我们上面看到的datafile_header的scn是一致的。

3.5 BBED修改3号数据文件的SCN信息
需要将3号文件的文件头scn由3103323763修改成3103662768,3103662768 转换成16进制就是 b8fe22b0 反序后就是 b022feb8

BBED> modify /x b022feb8 offset 484
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: D:\ORADATA\ORCL\UNDOTBS01.DBF (3)
Block: 2 Offsets: 484 to 611 Dba:0x00c00002
------------------------------------------------------------------------
b022feb8 00000000 2416a245 01000000 b30b0000 04000000 1000ab0d 02000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

<32 bytes per line>

BBED> sum apply
Check value for File 3, Block 2:
current = 0xf3ab, required = 0xf3ab

3.6 再次查看数据文件头的SCN信息

<SQL> set lines 200 pages 500
<SQL> col name for a60
<SQL> col checkpoint_change for a20
<SQL> select file#,name,status,to_char(checkpoint_change#) checkpoint_change
2 from v$datafile_header order by 1;

FILE# NAME STATUS CHECKPOINT_CHANGE
---------- ------------------------------------------------------------ -------------- --------------------
1 D:\ORADATA\ORCL\SYSTEM01.DBF ONLINE 3103662768
2 D:\ORADATA\ORCL\SYSAUX01.DBF ONLINE 3103662768
3 D:\ORADATA\ORCL\UNDOTBS01.DBF ONLINE 3103662768
4 D:\ORADATA\ORCL\USERS01.DBF ONLINE 3103662768
5 D:\ORADATA\ORCL\TS_EXAMPLE.DBF ONLINE 3103662768
6 D:\ORADATA\ORCL\OGGTBS01.DBF ONLINE 3103662768
7 D:\ORADATA\ORCL\REC_TBS01.DBF ONLINE 3103662768
8 D:\ORADATA\ORCL\MRKT.DBF ONLINE 3103662768

3.7 重建控制文件

--生成当前的控制文件
alter database backup controlfile to trace;
select * from v$diag_info;
D:\APP\ADMINISTRATOR\diag\rdbms\orcl\orcl\trace\orcl_ora_36248.trc

--查看orcl_ora_36248.trc文件,找到控制文件重建语句
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS FORCE LOGGING ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 4 'D:\ORADATA\ORCL\REDO04.LOG' SIZE 100M BLOCKSIZE 512,
GROUP 5 'D:\ORADATA\ORCL\REDO05.LOG' SIZE 100M BLOCKSIZE 512,
GROUP 6 'D:\ORADATA\ORCL\REDO06.LOG' SIZE 100M BLOCKSIZE 512
DATAFILE
'D:\ORADATA\ORCL\SYSTEM01.DBF',
'D:\ORADATA\ORCL\SYSAUX01.DBF',
'D:\ORADATA\ORCL\UNDOTBS01.DBF',
'D:\ORADATA\ORCL\USERS01.DBF',
'D:\ORADATA\ORCL\TS_EXAMPLE.DBF',
'D:\ORADATA\ORCL\OGGTBS01.DBF',
'D:\ORADATA\ORCL\REC_TBS01.DBF',
'D:\ORADATA\ORCL\MRKT.DBF'
CHARACTER SET AL32UTF8
;
RECOVER DATABASE USING BACKUP CONTROLFILE;

执行上述语句,进行控制文件的重建。

--查看控制文件头scn
<SQL> set lines 200 pages 500
<SQL> col name for a60
<SQL> col checkpoint_change for a20
<SQL> select file#,name,status,to_char(checkpoint_change#) checkpoint_change
2 from v$datafile order by 1;

FILE# NAME STATUS CHECKPOINT_CHANGE
---------- ------------------------------------------------------------ -------------- --------------------
1 D:\ORADATA\ORCL\SYSTEM01.DBF SYSTEM 3103662768
2 D:\ORADATA\ORCL\SYSAUX01.DBF RECOVER 3103662768
3 D:\ORADATA\ORCL\UNDOTBS01.DBF RECOVER 3103662768
4 D:\ORADATA\ORCL\USERS01.DBF RECOVER 3103662768
5 D:\ORADATA\ORCL\TS_EXAMPLE.DBF RECOVER 3103662768
6 D:\ORADATA\ORCL\OGGTBS01.DBF RECOVER 3103662768
7 D:\ORADATA\ORCL\REC_TBS01.DBF RECOVER 3103662768
8 D:\ORADATA\ORCL\MRKT.DBF RECOVER 3103662768

重建完控制文件后,SCN与文件头的SCN一致。

3.8 使用隐含参数打开数据库

--修改隐含参数
<SQL> alter system set "_allow_resetlogs_corruption"= TRUE scope=spfile;
<SQL> shutdown immediate;
已经卸载数据库。
ORACLE 例程已经关闭。
<SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area 3140026368 bytes
Fixed Size 2285360 bytes
Variable Size 2046820560 bytes
Database Buffers 1073741824 bytes
Redo Buffers 17178624 bytes

<SQL> alter database open resetlogs;

数据库已更改。

3.9 数据库打开后的,其他操作步骤

–添加临时文件
ALTER TABLESPACE TEMP ADD TEMPFILE ‘D:\ORADATA\ORCL\TEMP01.DBF’ REUSE;

–去掉隐含参数:
<SQL> alter system set “_allow_resetlogs_corruption”=false scope=spfile;

–重启数据库,生效
<SQL> shutdown immediate;
<SQL> startup;

 

 

以上内容转载自网络,原文连接:https://blog.csdn.net/zhirongsu/article/details/139202168

 

 使用过程中的几个小波折:

1、问题数据库使用的是Oracle11G,本身未安装BBED,windows版本的BBED独立运行程序网上可以下载

2、在运行BBED时,filelist不知道怎么设置,最后使用的是 指定filename方式

3、blocksize的缺省大小设置是2048,运行dump指令后查看的数据都是0,后来改成8196 问题解决

BBED> show
FILE# 1
BLOCK# 1
OFFSET 0
DBA 0x00400001(4194305 1,1)
FILENAME /u01/app/oracle/oradata/sex0/system01.dbf
BIFILE bifile.bbd
LISTFILE /u01/filelist.txt
BLOCKSIZE 8192
MODE Edit
EDIT Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No

标签:SCN,00000000,数据备份,DBF,ORCL,ORADATA,3103662768,ONLINE,bbed
From: https://www.cnblogs.com/SafeSimple/p/18413793

相关文章

  • 数据同步和数据备份
       日常使用的移动手机或者是电脑等其它电子产品都是每天在产生不同的数据。数据安全性的 保证需要有很多的计算机程序设计的运行程序进行有效保证。电子产品是硬件设备,硬件设 备就像机器机械一样是可以看得见摸得着的具体物件设施。物质和能量,源头物料可以通过 不同的设......
  • etcd数据备份与恢复
    etcd数据备份与恢复 单节点etcd数据备份与恢复一、数据备份1、设置环境变量ETCDCTL_API=3 2、创建备份目录,使用快照备份mkdir-p/data/etcd/backupetcdctlsnapshotsave/data/etcd/backup/etcd.db 二、数据恢复1、停止etcd服务systemctlstop......
  • 构建专业技能:MySQL数据备份策略的培训与实践
    数据备份是数据库管理中的一项基础且关键的任务,它直接关系到数据安全和业务连续性。在MySQL环境中,有效的数据备份策略培训对于确保团队成员能够正确执行备份操作、理解备份原理以及在必要时进行数据恢复至关重要。本文将详细介绍如何在MySQL中实现数据备份的策略培训,包括培......
  • 优化MySQL数据备份的网络策略:技术与实践
    在当今的数据库管理实践中,数据备份是确保数据安全性和业务连续性的关键环节。MySQL作为广泛使用的数据库系统,其数据备份过程往往涉及大量的数据传输,尤其是在分布式或云环境中。因此,网络优化在MySQL数据备份中扮演着至关重要的角色。本文将探讨如何在MySQL中实现数据备份的网......
  • 全面掌握MySQL数据备份策略评估:方法、工具与实践
    数据备份是确保企业数据安全和业务连续性的重要环节。在MySQL环境中,有效的数据备份策略评估对于优化备份流程、降低成本和提高恢复效率至关重要。本文将深入探讨如何在MySQL中实现数据备份的策略评估,包括评估流程的规划、关键指标的选择、评估工具的应用以及评估结果的分析......
  • 确保合规性:MySQL数据备份策略的全面指南
    在数据驱动的商业环境中,数据备份不仅是数据保护的关键措施,也是满足法规要求的重要环节。对于使用MySQL数据库的企业而言,制定并实施符合行业标准和法规要求的数据备份策略至关重要。本文将深入探讨如何在MySQL中实现数据备份的策略合规性,包括合规性要求的理解、备份策略的制......
  • 博客园-awescnb插件-geek皮肤优化-表情配置
    ......
  • Microsoft 365 解决方案:数据备份的必要性、配置架构
    51CTO博客链接:https://blog.51cto.com/u_13637423业务连续性保障是许多公司最关心的问题。如果发生加密大量数据的勒索软件攻击,或者内部意外或恶意数据删除或覆盖事件的实例,则需要能够尽快使业务恢复正常状态。这是Microsoft365备份产品提供的功能,无论是通过Microsoft365管......
  • 博客园-awescnb插件-geek皮肤优化-目录优化
    ......
  • 博客园-awescnb插件-geek皮肤优化-目录优化
    ......