- 浏览: 62934 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
使用BBED修改SCN
Posted on May 9, 2012 at 5:30 pm by vogts
文章来源:http://www.alidba.net/index.php/archives/594
下面这个错误,我想是很多DBA的痛。
@>startup ;
ORACLE instance started.
Total System Global Area 838860800 bytes
Fixed Size 2087608 bytes
Variable Size 494929224 bytes
Database Buffers 335544320 bytes
Redo Buffers 6299648 bytes
Database mounted.
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: ‘/data/oracle/oradata/orcl/wt_tbs01.dbf’
有备份还好,没备份基本上只有把数据文件offline了。DBA准备打包回家吧。
经过无数次的测试,确认修改SCN号可以搞定。目前网上的文章,多少还是有些错误。经过反复的测试,确认没有问题。
我们直接使用BBED查看下当前SYSTEM TBS表空间的SCN号:
BBED> set file 1
FILE# 1
数据文件头就是第一个block块,因此我们不需要设置其他block块,
此外map可以显示block里的详细信息。我们发现就一个“kcvfh”,OK直接查看这个吧。
BBED> map
File: /data/oracle/oradata/bops10g/system01.dbf (1)
Block: 1 Dba:0×00400001
————————————————————
Data File Header
struct kcvfh, 676 bytes @0
ub4 tailchk @8188
print出来的内容太多,我做了删剪,留下我们有用的内容。
BBED> print kcvfh
struct kcvfh, 676 bytes @0
…………………………
struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0×000748bf–SCN的低位
ub2 kscnwrp @488 0×0000–SCN的高位
ub4 kcvcptim @492 0×2ea86f92 –最后一次checkpoint time
ub2 kcvcpthr @496 0×0001
………………………………
ub4 kcvfhcpc @140 0×0000007f—checkpoint count
ub4 kcvfhrts @144 0×2ea86844
ub4 kcvfhccc @148 0×0000007e
–oracle 一个TBS最多30个字符,通过BBED ,我们发现这里是定长的
text kcvfhtnm[0] @338 S
text kcvfhtnm[1] @339 Y
text kcvfhtnm[2] @340 S
text kcvfhtnm[3] @341 T
text kcvfhtnm[4] @342 E
text kcvfhtnm[5] @343 M
text kcvfhtnm[6] @344
text kcvfhtnm[7] @345
text kcvfhtnm[8] @346
text kcvfhtnm[9] @347
text kcvfhtnm[10] @348
text kcvfhtnm[11] @349
text kcvfhtnm[12] @350
text kcvfhtnm[13] @351
text kcvfhtnm[14] @352
text kcvfhtnm[15] @353
text kcvfhtnm[16] @354
text kcvfhtnm[17] @355
text kcvfhtnm[18] @356
text kcvfhtnm[19] @357
text kcvfhtnm[20] @358
text kcvfhtnm[21] @359
text kcvfhtnm[22] @360
text kcvfhtnm[23] @361
text kcvfhtnm[24] @362
text kcvfhtnm[25] @363
text kcvfhtnm[26] @364
text kcvfhtnm[27] @365
text kcvfhtnm[28] @366
text kcvfhtnm[29] @367
………………………………
这4个offset的位置内容,文档上是这样说的:
Oracleconsiders four attributes of this data structure when determining if a datafile is sync with the other data files of the database:
(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个来判断一致性,至于中文说明,我也写在上面了。
接下去,我们看看坏掉的wt-tbs01.dbf的信息:
wt_tbs.dbf
struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0×000747a5
ub2 kscnwrp @488 0×0000
ub4 kcvcptim @492 0×2ea86f03
ub2 kcvcpthr @496 0×0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0×00000004
ub4 kcrbabno @504 0×00000019
ub2 kcrbabof @508 0×0010
**********************
ub4 kcvfhcpc @140 0×00000007
ub4 kcvfhrts @144 0×2ea86844
ub4 kcvfhccc @148 0×00000006
好,484,492,140,148直接修改就好了。
/**************
484
****************/
ub4 kscnbas @484 0×000747a5-> 0×000748bf–> bf487400
set offset 484
modify /x bf48
set offset 486
modify /x 0700
/**************
492
******************/
ub4 kcvcptim @492 0×2ea86f03->0×2ea86f92 –>926fa8ea
set offset 492
modify /x 926f
set offset 494
modify /x a82e
/**************
140
******************/
ub4 kcvfhcpc @140 0×00000007->0×0000007f–>7f000000
set offset 140
modify /x 7f00
set offset 142
modify /x 0000
/**************
148
**************/
ub4 kcvfhccc @148 0×00000006->0×0000007e->7e000000
set offset 148
modify /x 7e00
set offset 150
modify /x 0000
最后做下checksum,就OK了
BBED> sum dba 5,1 apply
Check value for File 5, Block 1:
current = 0×554c, required = 0×554c
接下去就简单了,重建控制文件,数据库OPEN RESETLOG搞定
@>startup nomount;
ORACLE instance started.
Total System Global Area 838860800 bytes
Fixed Size 2087608 bytes
Variable Size 494929224 bytes
Database Buffers 335544320 bytes
Redo Buffers 6299648 bytes
@>CREATE CONTROLFILE REUSE DATABASE “orcl” RESETLOGS NOARCHIVELOG
2 MAXLOGFILES 5
3 MAXLOGMEMBERS 5
4 MAXDATAFILES 100
5 MAXINSTANCES 1
MAXLOGHISTORY 292
6 7 LOGFILE
8 GROUP 1 ‘/data/oracle/oradata/orcl/redo101.log’ SIZE 10M,
9 GROUP 2 ‘/data/oracle/oradata/orcl/redo201.log’ SIZE 10M,
10 GROUP 3 ‘/data/oracle/oradata/orcl/redo301.log’ SIZE 10M
11 — STANDBY LOGFILE
12 DATAFILE
13 ‘/data/oracle/oradata/orcl/system01.dbf’,
14 ‘/data/oracle/oradata/orcl/undotbs01.dbf’,
15 ‘/data/oracle/oradata/orcl/sysaux01.dbf’,
16 ‘/data/oracle/oradata/orcl/users01.dbf’,
17 ‘/data/oracle/oradata/orcl/wt_tbs01.dbf’
18 CHARACTER SET US7ASCII
19 ;
Control file created.
@>RECOVER DATABASE USING BACKUP CONTROLFILE
ORA-00279: change 477375 generated at 05/09/2012 01:49:06 needed for thread 1
ORA-00289: suggestion : /data/oracle/arch/orcl/1_4_782784012.arc
ORA-00280: change 477375 for thread 1 is in sequence #4
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
@>ALTER DATABASE OPEN RESETLOGS;
Database altered.
总结一下:
其实本人不懂其中的原理,可能功力不够,用了一个原始的方法,分别2个块的print kcvfh内容导入文件比较,修改其中四个值
(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.
与正确的文件一致!
备份控制文件:
alter database backup controlfile to 'd:\20080326.ctl';(备份成二进制文件)
alter database backup controlfile to trace;(备份创建控制文件的脚本,在udump目录下)
记录一下,说不定用得上
Posted on May 9, 2012 at 5:30 pm by vogts
文章来源:http://www.alidba.net/index.php/archives/594
下面这个错误,我想是很多DBA的痛。
@>startup ;
ORACLE instance started.
Total System Global Area 838860800 bytes
Fixed Size 2087608 bytes
Variable Size 494929224 bytes
Database Buffers 335544320 bytes
Redo Buffers 6299648 bytes
Database mounted.
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: ‘/data/oracle/oradata/orcl/wt_tbs01.dbf’
有备份还好,没备份基本上只有把数据文件offline了。DBA准备打包回家吧。
经过无数次的测试,确认修改SCN号可以搞定。目前网上的文章,多少还是有些错误。经过反复的测试,确认没有问题。
我们直接使用BBED查看下当前SYSTEM TBS表空间的SCN号:
BBED> set file 1
FILE# 1
数据文件头就是第一个block块,因此我们不需要设置其他block块,
此外map可以显示block里的详细信息。我们发现就一个“kcvfh”,OK直接查看这个吧。
BBED> map
File: /data/oracle/oradata/bops10g/system01.dbf (1)
Block: 1 Dba:0×00400001
————————————————————
Data File Header
struct kcvfh, 676 bytes @0
ub4 tailchk @8188
print出来的内容太多,我做了删剪,留下我们有用的内容。
BBED> print kcvfh
struct kcvfh, 676 bytes @0
…………………………
struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0×000748bf–SCN的低位
ub2 kscnwrp @488 0×0000–SCN的高位
ub4 kcvcptim @492 0×2ea86f92 –最后一次checkpoint time
ub2 kcvcpthr @496 0×0001
………………………………
ub4 kcvfhcpc @140 0×0000007f—checkpoint count
ub4 kcvfhrts @144 0×2ea86844
ub4 kcvfhccc @148 0×0000007e
–oracle 一个TBS最多30个字符,通过BBED ,我们发现这里是定长的
text kcvfhtnm[0] @338 S
text kcvfhtnm[1] @339 Y
text kcvfhtnm[2] @340 S
text kcvfhtnm[3] @341 T
text kcvfhtnm[4] @342 E
text kcvfhtnm[5] @343 M
text kcvfhtnm[6] @344
text kcvfhtnm[7] @345
text kcvfhtnm[8] @346
text kcvfhtnm[9] @347
text kcvfhtnm[10] @348
text kcvfhtnm[11] @349
text kcvfhtnm[12] @350
text kcvfhtnm[13] @351
text kcvfhtnm[14] @352
text kcvfhtnm[15] @353
text kcvfhtnm[16] @354
text kcvfhtnm[17] @355
text kcvfhtnm[18] @356
text kcvfhtnm[19] @357
text kcvfhtnm[20] @358
text kcvfhtnm[21] @359
text kcvfhtnm[22] @360
text kcvfhtnm[23] @361
text kcvfhtnm[24] @362
text kcvfhtnm[25] @363
text kcvfhtnm[26] @364
text kcvfhtnm[27] @365
text kcvfhtnm[28] @366
text kcvfhtnm[29] @367
………………………………
这4个offset的位置内容,文档上是这样说的:
Oracleconsiders four attributes of this data structure when determining if a datafile is sync with the other data files of the database:
(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个来判断一致性,至于中文说明,我也写在上面了。
接下去,我们看看坏掉的wt-tbs01.dbf的信息:
wt_tbs.dbf
struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0×000747a5
ub2 kscnwrp @488 0×0000
ub4 kcvcptim @492 0×2ea86f03
ub2 kcvcpthr @496 0×0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0×00000004
ub4 kcrbabno @504 0×00000019
ub2 kcrbabof @508 0×0010
**********************
ub4 kcvfhcpc @140 0×00000007
ub4 kcvfhrts @144 0×2ea86844
ub4 kcvfhccc @148 0×00000006
好,484,492,140,148直接修改就好了。
/**************
484
****************/
ub4 kscnbas @484 0×000747a5-> 0×000748bf–> bf487400
set offset 484
modify /x bf48
set offset 486
modify /x 0700
/**************
492
******************/
ub4 kcvcptim @492 0×2ea86f03->0×2ea86f92 –>926fa8ea
set offset 492
modify /x 926f
set offset 494
modify /x a82e
/**************
140
******************/
ub4 kcvfhcpc @140 0×00000007->0×0000007f–>7f000000
set offset 140
modify /x 7f00
set offset 142
modify /x 0000
/**************
148
**************/
ub4 kcvfhccc @148 0×00000006->0×0000007e->7e000000
set offset 148
modify /x 7e00
set offset 150
modify /x 0000
最后做下checksum,就OK了
BBED> sum dba 5,1 apply
Check value for File 5, Block 1:
current = 0×554c, required = 0×554c
接下去就简单了,重建控制文件,数据库OPEN RESETLOG搞定
@>startup nomount;
ORACLE instance started.
Total System Global Area 838860800 bytes
Fixed Size 2087608 bytes
Variable Size 494929224 bytes
Database Buffers 335544320 bytes
Redo Buffers 6299648 bytes
@>CREATE CONTROLFILE REUSE DATABASE “orcl” RESETLOGS NOARCHIVELOG
2 MAXLOGFILES 5
3 MAXLOGMEMBERS 5
4 MAXDATAFILES 100
5 MAXINSTANCES 1
MAXLOGHISTORY 292
6 7 LOGFILE
8 GROUP 1 ‘/data/oracle/oradata/orcl/redo101.log’ SIZE 10M,
9 GROUP 2 ‘/data/oracle/oradata/orcl/redo201.log’ SIZE 10M,
10 GROUP 3 ‘/data/oracle/oradata/orcl/redo301.log’ SIZE 10M
11 — STANDBY LOGFILE
12 DATAFILE
13 ‘/data/oracle/oradata/orcl/system01.dbf’,
14 ‘/data/oracle/oradata/orcl/undotbs01.dbf’,
15 ‘/data/oracle/oradata/orcl/sysaux01.dbf’,
16 ‘/data/oracle/oradata/orcl/users01.dbf’,
17 ‘/data/oracle/oradata/orcl/wt_tbs01.dbf’
18 CHARACTER SET US7ASCII
19 ;
Control file created.
@>RECOVER DATABASE USING BACKUP CONTROLFILE
ORA-00279: change 477375 generated at 05/09/2012 01:49:06 needed for thread 1
ORA-00289: suggestion : /data/oracle/arch/orcl/1_4_782784012.arc
ORA-00280: change 477375 for thread 1 is in sequence #4
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
@>ALTER DATABASE OPEN RESETLOGS;
Database altered.
总结一下:
其实本人不懂其中的原理,可能功力不够,用了一个原始的方法,分别2个块的print kcvfh内容导入文件比较,修改其中四个值
(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.
与正确的文件一致!
备份控制文件:
alter database backup controlfile to 'd:\20080326.ctl';(备份成二进制文件)
alter database backup controlfile to trace;(备份创建控制文件的脚本,在udump目录下)
记录一下,说不定用得上
发表评论
-
oracle11g提示服务不可用
2014-09-26 17:36 587今天遇到一个问题,本地1521端口启用,但远程不能访问 修改监 ... -
手工用户创建,老是记不住,记录
2014-09-18 13:53 332Oracle创建表空间、创建用户以及授权、查看权限 创建临 ... -
gdul
2014-08-15 15:16 480一直想自己也写个dul工具,无奈理解得不够深入 几天前看到别人 ... -
SQL调优
2014-06-20 14:14 399网上看到如下sql: 留一个线索在此 select /*+ ... -
表闪回
2014-06-19 16:13 347使用delete删除数据的情况,如果是truncate只能用数 ... -
外键约束
2014-06-19 16:02 395删除一个表时,提示有外键约束,ORA-02292: 违反完整约 ... -
get_ddl使用
2014-05-19 16:45 434查看oracle中表定义等,需要使用dbms_metadata ... -
PL/SQL语法
2014-05-09 11:38 393今天写plsql,很久没写了,很简单的,也不想参看以前写的,怎 ... -
归档日志满的处理
2014-05-04 10:07 781只是一个记录贴,方便查阅。完全没有新意 归档日志一般需要保留 ... -
数据的导出导入
2013-12-30 12:41 360异构数据库之间数据交换,主要使用txt文本文件 以下记录一个工 ... -
exp增量
2013-12-17 17:09 356很久没有写文章了,今天遇到一个老问题,exp增量备份 记 ... -
查找oracle的操作日志
2013-12-17 16:48 567今天程序有些功能不能用了,查了一下,发现某些表对象删除了 ... -
数结构的查询
2013-09-27 18:33 0很早之前就使用过该功能,每次都记不住,每次都要搜索 索性记录一 ... -
面试中的SQL
2013-09-27 12:07 473虽然有些时间没有面试过了 在我的印象中,sql中行列转换的问题 ... -
oracle SQL特性使用
2013-09-27 11:25 392oracle分析函数 统计记录中类似1/222这样的记录 se ... -
oracle内部原理
2013-09-26 11:17 962总是以为对oracle很了解,已经使用了好多年,基本是增、删、 ... -
oracle跟踪程序执行的SQL
2013-09-24 15:34 1120专门记录一下,对于系统调优很重要 1.oracle的10046 ... -
ORA-01555处理
2013-09-22 16:44 600有时表太大,导出时出现1555错误,可以采用分段方式处理。 以 ... -
BLOB字段操作
2013-09-18 10:00 894置为空或NULL update blob_test set b ... -
统计表的大小
2013-09-11 17:29 376统计用户表的大小: SELECT * FROM ( SEL ...
相关推荐
- 使用bbed需要谨慎,因为直接修改数据块可能会导致更严重的问题,因此通常只有在没有其他恢复选项时才使用。 - 在执行任何更改前,应始终创建数据文件的备份,以防万一操作出错。 - 由于bbed涉及到底层数据操作...
1. **块修改**:bbed能够直接访问数据库的数据文件(.dbf),并允许用户修改存储在这些文件中的数据块。这在处理数据错误或需要进行特定调试时非常有用。 2. **文件编译**:除了修改数据,bbed还支持对PL/SQL源代码...
标题中的“bbed.zip用于ORACLE块修改”指的是Oracle数据库中的一种特殊工具——bbed,它是一个二进制块编辑器,主要用于修复数据库文件中损坏的块。在Oracle数据库系统中,数据是存储在一系列的物理块(blocks)中的...
Oracle BBED,全称Binary Block Editor,是一款强大的Oracle数据库数据块编辑工具。它允许数据库管理员直接操作数据库的数据块,进行低级别的数据查看和修改,这对于故障排查、数据恢复以及性能优化等工作具有重要...
从给定的文件信息来看,标题“bbed文档说明官方”和描述“bbed文档说明官方,很详细。不要看别的。”明确指出这是一份关于bbed的官方文档,强调了其详细性和权威性,建议用户只参考此文档,避免混淆信息。 然而,给...
Oracle BBED,全称为Oracle Block Browser and Editor,是一款强大的数据块级别的查看和修改工具,主要用于Oracle数据库内部结构的深入分析。BBED并非官方推荐的常规维护工具,而是专为内部故障恢复设计,对外并不...
BBED能够直接访问这些数据块,实现底层数据的读取和修改,这种能力使得管理员可以执行高级别的数据操作,如修复损坏的数据块或调整头信息,这在数据库故障排查和恢复工作中是不可替代的。 使用BBED进行操作时,管理...
4. **使用BBED**:根据问题的具体情况,DBA需要知道如何定位问题数据块的地址,然后使用BBED读取该块,分析问题,必要时进行修改,并将修改后的数据块写回数据库。 5. **安全注意事项**:由于BBED可以修改数据库的...
Bbed(Block Buffer Editor)是 Oracle 数据库管理员和开发人员的重要工具,它可以访问数据库的数据块,并允许直接修改内存中的数据,这对于诊断数据损坏或进行低级别调试非常有用。不过,由于其强大的功能,Bbed 应...
BBED(Oracle Block Browser and Editor Tool)是Oracle数据库中一个重要的工具,它被设计为可以查看和直接修改Oracle数据库的数据文件块。这个工具在极端的数据恢复场景中十分有用,例如在数据文件损坏或某些不正常...
**bbed工具详解** 在Oracle数据库管理中,`bbed`是一个非常实用的工具,主要用于...请注意,直接修改数据库文件可能对数据造成不可逆的破坏,因此在使用`bbed`时务必谨慎,并确保在进行任何操作前有完整的数据库备份。
bbed提供了一种交互式的方式来检查和修改备份文件的内容,这在处理数据库问题时非常关键,尤其是在数据恢复的情况下。 在Linux环境中,bbed可以与Oracle的RMAN(恢复管理器)一起使用,RMAN是Oracle数据库管理员...
在Oracle 10g 10.2.0.5版本中,“bbed”是一个内建的维护工具,允许DBA(数据库管理员)直接对数据块进行操作,如查看、修改或恢复损坏的数据块。这个工具对于处理数据库中的物理损坏问题非常有用,尤其是在没有RMAN...
bbed工具提供了高级的功能,如查看、修改、删除和插入数据库块中的数据,以及进行十六进制编辑。 在提供的压缩包文件中,我们看到了三个不同平台的bbed相关文件: 1. `bbed_linux_x86`:这是针对32位Linux系统的...
这个工具允许用户直接操作Oracle数据文件(.dbf)中的数据块,进行读取、修改和写入操作。bbed的强大之处在于,它能帮助管理员对数据库进行低级别修复,尤其是在传统的备份和恢复方法无法解决问题时,bbed往往能成为...
在Oracle 8.1.7版本中,BBED作为数据库管理工具,提供了对数据库块级别的操作,允许用户直接在操作系统层面操作和修改数据库的数据块,这对于故障排查、数据修复和性能优化具有重要作用。 BBED工具的核心功能包括:...
Oracle bbed工具是Block Browser and Editor(块浏览编辑器)的缩写,...由于bbed可以对Oracle数据库中的数据块进行内容修改和破坏,因此此工具功能强大同时伴有很高的使用风险。 该资源包含了windows版本和 linux版本
Oracle BBED 是一款用于直接操作Oracle数据库数据文件的低级别数据修复工具,它允许数据库管理员在块级对数据进行查看、修改和验证。BBED 主要适用于Linux 32位平台上的Oracle 10g及11g数据库,特别是在应对数据库坏...
1. **文本与二进制编辑**:bbed能够编辑纯文本文件,同时也可以处理二进制数据,支持查看和修改文件的十六进制表示。 2. **搜索与替换**:提供了强大的搜索和替换功能,可以搜索文本模式、十六进制模式甚至正则...
4. **备份与恢复操作**:在对数据块进行修改前,bbed通常会先创建数据块的备份,确保在操作失误时可以回滚到原始状态,保证数据安全。 使用bbed时,通常需要具备以下几点知识: 1. **Oracle数据库基本概念**:理解...