Oracle 之利用BBED修改数据块SCN----没有备份数据文件的数据恢复
2017-02-22 13:25
881 查看
测试环境
OS:redhat6.6
oracle:12.1.0.2
BBED(OracleBlockBrowerandEDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。该工具不受Oracle支持,所以默认是没有生成可执行文件的,在使用前需要重新连接。
1.安装BBED
[oracle@12cdock software]$ cp bbedus.msb $ORACLE_HOME/rdbms/mesg
[oracle@12cdock software]$ cp sbbdpt.o $ORACLE_HOME/rdbms/lib
[oracle@12cdock software]$ cp ssbbded.o $ORACLE_HOME/rdbms/lib
[oracle@12cdock software]$ cd $ORACLE_HOME/rdbms/lib/
[oracle@12cdock lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
Linking BBED utility (bbed)
rm -f /u01/app/oracle/product/12.1.0.2/db_1/rdbms/lib/bbed
/u01/app/oracle/product/12.1.0.2/db_1/bin/orald -o /u01/app/oracle/product/12.1.0.2/db_1/rdbms/lib/bbed -m64 -z noexecstack -Wl,
--disable-new-dtags -L/u01/app/oracle/product/12.1.0.2/db_1/rdbms/lib/ -L/u01/app/oracle/product/12.1.0.2/db_1/lib/ -L/u01/app/oracle/product/12.1.0.2/db_1/lib/stubs/
/u01/app/oracle/product/12.1.0.2/db_1/lib/s0main.o /u01/app/oracle/product/12.1.0.2/db_1/rdbms/lib/ssbbded.o /u01/app/oracle/product/12.1.0.2/db_1/rdbms/lib/sbbdpt.o
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/ldflags` -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -ldbtools12 -lclntsh -lclntshcore
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/ldflags` -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -lnro12
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/ldflags` -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -lnnz12 -lzt12 -lztkg12 -lztkg12 -lclient12 -lnnetd12 -lvsn12 -lcommon12 -lgeneric12 -lmm -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12
-lxml12 -lcore12 -lunls12 -lsnls12 -lnls12 -lcore12 -lnls12
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/ldflags` -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -lnro12
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/ldflags` -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -lclient12 -lnnetd12 -lvsn12 -lcommon12 -lgeneric12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lxml12 -lcore12 -lunls12 -lsnls12
-lnls12 -lcore12 -lnls12 -lclient12 -lnnetd12 -lvsn12 -lcommon12 -lgeneric12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lxml12 -lcore12 -lunls12 -lsnls12 -lnls12 -lcore12 -lnls12
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/sysliblist` -Wl,-rpath,/u01/app/oracle/product/12.1.0.2/db_1/lib -lm
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/sysliblist` -ldl -lm -L/u01/app/oracle/product/12.1.0.2/db_1/lib
[oracle@12cdock lib]$ cp bbed /u01/app/oracle/product/12.1.0.2/db_1/bin/
BBED是Oracle 内部使用的命令,所以Oracle 不提供技术支持。 为了安全BBED设置了口令保护,默认密码为blockedit。
[oracle@12cdock lib]$ bbed
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Wed Feb 22 09:47:07 2017
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> show
FILE# 0
BLOCK#
1
OFFSET
0
DBA 0x00000000 (0 0,1)
FILENAME
BIFILE
bifile.bbd
LISTFILE
BLOCKSIZE 8192
MODE
Browse
EDIT
Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No
将现有数据文件在bbed中指定,没有的话先在sqlplus中创建
BBED> set filename '/u01/app/oracle/oradata/ORCL/datafile/test.dbf'
FILENAME
/u01/app/oracle/oradata/ORCL/datafile/test.dbf
BBED> show all;
FILE# 0
BLOCK#
1
OFFSET
0
DBA 0x00000000 (0 0,1)
FILENAME
/u01/app/oracle/oradata/ORCL/datafile/test.dbf
BIFILE
bifile.bbd
LISTFILE
BLOCKSIZE 8192
MODE
Browse
EDIT
Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No
2.使用参数文件连接BBED
a)查询出当前的数据文件并保存在文本文件中
SQL>spool psdb_file.txt
SQL> select file#||' '||name||' '||bytes from v$datafile ;
FILE#||''||NAME||''||BYTES
--------------------------------------------------------------------------------
1 /data/oradata/ocrl/datafile/system01.dbf 912261120
2 /data/oradata/ocrl/datafile/sysaux01.dbf 1247805440
3 /data/oradata/ocrl/datafile/undotbs01.dbf 765460480
4 /data/oradata/ocrl/datafile/users01.dbf 28835840
5 /data/oradata/ocrl/datafile/test.dbf 10485760
6 /data/oradata/ocrl/datafile/tstest.dbf 10485760
6 rows selected.
SQL> spool off
注意:保存在文件里的文件号要与我们数据库查询出来的FILE#相同
ocrl:/home/oracle@oracle1>cat psdb_file.txt
1 /data/oradata/ocrl/datafile/system01.dbf 912261120
2 /data/oradata/ocrl/datafile/sysaux01.dbf 1247805440
3 /data/oradata/ocrl/datafile/undotbs01.dbf 765460480
4 /data/oradata/ocrl/datafile/users01.dbf 28835840
5 /data/oradata/ocrl/datafile/test.dbf 10485760
6 /data/oradata/ocrl/datafile/tstest.dbf 10485760
b)BBED使用参数文件登陆
[oracle@12cdock ~]$cat psdb_file.txt
1 /data/oradata/ocrl/datafile/system01.dbf 912261120
2 /data/oradata/ocrl/datafile/sysaux01.dbf 1247805440
3 /data/oradata/ocrl/datafile/undotbs01.dbf 765460480
4 /data/oradata/ocrl/datafile/users01.dbf 28835840
5 /data/oradata/ocrl/datafile/test.dbf 10485760
6 /data/oradata/ocrl/datafile/tstest.dbf 10485760
[oracle@12cdock ~]$cat bbed_parameter.txt
blocksize=8192
listfile=/home/oracle/psdb_file.txt
mode=edit
ocrl:/home/oracle@oracle1>bbed parfile=/home/oracle/bbed_parameter.txt
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Tue Feb 21 15:17:57 2017
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> info
File# Name Size(blks)
----- ---- ----------
1 /data/oradata/ocrl/datafile/system01.dbf 111360
2 /data/oradata/ocrl/datafile/sysaux01.dbf 152320
3 /data/oradata/ocrl/datafile/undotbs01.dbf 93440
4 /data/oradata/ocrl/datafile/users01.dbf 3520
5 /data/oradata/ocrl/datafile/test.dbf 1280
6 /data/oradata/ocrl/datafile/tstest.dbf 1280
BBED>
3.破坏system表空间文件
注意:这里最好先做好备份
ocrl:/data/oradata/ocrl/datafile@oracle1>cp system01.dbf system01.dbf.bak
切换日志模拟生产交易,更新SCN
SQL> alter system switch logfile;//多切几次
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL>
把旧的system文件直接复制替换掉新的
ocrl:/data/oradata/ocrl/datafile@oracle1>cp system01.dbf.bak system01.dbf
再次切换日志模拟生产交易
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
/
alter system switch logfile
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 9115
Session ID: 20 Serial number: 33669
出现问题,数据库直接宕掉
ocrl:/home/oracle@oracle1>sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Tue Feb 21 14:53:47 2017
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 754974720 bytes
Fixed Size 2928968 bytes
Variable Size 524291768 bytes
Database Buffers 222298112 bytes
Redo Buffers 5455872 bytes
Database mounted.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/data/oradata/ocrl/datafile/system01.dbf'
SQL> col name for a50
SQL> select name,checkpoint_change# from v$datafile;
NAME CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/data/oradata/ocrl/datafile/system01.dbf 12717804
/data/oradata/ocrl/datafile/sysaux01.dbf 12717804
/data/oradata/ocrl/datafile/undotbs01.dbf 12717804
/data/oradata/ocrl/datafile/users01.dbf 12717804
/data/oradata/ocrl/datafile/test.dbf 12717804
/data/oradata/ocrl/datafile/tstest.dbf 12717804
6 rows selected.
scn 转换成16进制
SQL> select to_char(12717804,'xxxxxxxx') from dual;
TO_CHAR(1
---------
c20eec
SQL> select name,checkpoint_change# from v$datafile_header;
NAME CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/data/oradata/ocrl/datafile/system01.dbf 12717402
/data/oradata/ocrl/datafile/sysaux01.dbf 12717804
/data/oradata/ocrl/datafile/undotbs01.dbf 12717804
/data/oradata/ocrl/datafile/users01.dbf 12717804
/data/oradata/ocrl/datafile/test.dbf 12717804
/data/oradata/ocrl/datafile/tstest.dbf 12717804
6 rows selected.
可以看到数据库system01.dbf的scn点为12717402明显是用的备份的数据文件。oracle在open数据库时要对控制文件,数据文件头的scn进行检查,一致才能打开,所以这里我们通过ddeb来修改数据文件头让它和其他的数据文件的scn相同,达到起库的目的。
登陆bbed
ocrl:/home/oracle@oracle1>bbed parfile=bbed_parameter.txt
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Tue Feb 21 14:58:25 2017
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
用bbed查询bbed01数据文件结构信息
BBED> set dba 1,1
DBA 0x00400001 (4194305 1,1)
Bbed查看kcvfh信息
BBED> p kcvfhckp
struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x00c20d5a
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x37d28348
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x000000bb
ub4 kcrbabno @504 0x00000002
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00
BBED> set filename '/data/oradata/ocrl/datafile/system01.dbf'
FILENAME
/data/oradata/ocrl/datafile/system01.dbf
BBED> p kcvfhckp
struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x00c20d5a
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x37d28348
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x000000bb
ub4 kcrbabno @504 0x00000002
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00
查看正常数据文件头
BBED> set count 26
COUNT 26
BBED> d offset 484 dba 3,1
File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_d0xj0lhx_.dbf (3)
Block: 1 Offsets: 484 to 509 Dba:0x00c00001
------------------------------------------------------------------------
6dcf1d00 00000000 41a5d337 0100a792 2a000000 02000000 1000
<32 bytes per line>
BBED> d offset 484 dba 4,1
File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_d0xj4qc1_.dbf (4)
Block: 1 Offsets: 484 to 509 Dba:0x01000001
------------------------------------------------------------------------
6dcf1d00 00000000 41a5d337 0100a792 2a000000 02000000 1000
查看system文件的数据文件头
BBED> d offset 484 dba 1,1
File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_d0xj2b4p_.dbf (1)
Block: 1 Offsets: 484 to 509 Dba:0x00400001
------------------------------------------------------------------------
e8c81d00 00000000 f5a2d337 01000000 15000000 02000000 1000
<32 bytes per line>
修改system文件头
BBED> modify /x 6dcf dba 1,1 offset 484
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_d0xj2b4p_.dbf (1)
Block: 1 Offsets: 484 to 509 Dba:0x00400001
------------------------------------------------------------------------
6dcf1d00 00000000 f5a2d337 01000000 15000000 02000000 1000
<32 bytes per line>
BBED> sum dba 1,1 apply
Check value for File 1, Block 1:
current = 0x2438, required = 0x2438
BBED> d offset dba 1,1
BBED-00207: invalid offset specifier (dba)
BBED> d offset 484 dba 1,1
File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_d0xj2b4p_.dbf (1)
Block: 1 Offsets: 484 to 509 Dba:0x00400001
------------------------------------------------------------------------
6dcf1d00 00000000 f5a2d337 01000000 15000000 02000000 1000
<32 bytes per line>
打开数据库
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/data/oradata/ocrl/datafile/system01.dbf'
SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
OS:redhat6.6
oracle:12.1.0.2
BBED(OracleBlockBrowerandEDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。该工具不受Oracle支持,所以默认是没有生成可执行文件的,在使用前需要重新连接。
1.安装BBED
[oracle@12cdock software]$ cp bbedus.msb $ORACLE_HOME/rdbms/mesg
[oracle@12cdock software]$ cp sbbdpt.o $ORACLE_HOME/rdbms/lib
[oracle@12cdock software]$ cp ssbbded.o $ORACLE_HOME/rdbms/lib
[oracle@12cdock software]$ cd $ORACLE_HOME/rdbms/lib/
[oracle@12cdock lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
Linking BBED utility (bbed)
rm -f /u01/app/oracle/product/12.1.0.2/db_1/rdbms/lib/bbed
/u01/app/oracle/product/12.1.0.2/db_1/bin/orald -o /u01/app/oracle/product/12.1.0.2/db_1/rdbms/lib/bbed -m64 -z noexecstack -Wl,
--disable-new-dtags -L/u01/app/oracle/product/12.1.0.2/db_1/rdbms/lib/ -L/u01/app/oracle/product/12.1.0.2/db_1/lib/ -L/u01/app/oracle/product/12.1.0.2/db_1/lib/stubs/
/u01/app/oracle/product/12.1.0.2/db_1/lib/s0main.o /u01/app/oracle/product/12.1.0.2/db_1/rdbms/lib/ssbbded.o /u01/app/oracle/product/12.1.0.2/db_1/rdbms/lib/sbbdpt.o
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/ldflags` -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -ldbtools12 -lclntsh -lclntshcore
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/ldflags` -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -lnro12
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/ldflags` -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -lnnz12 -lzt12 -lztkg12 -lztkg12 -lclient12 -lnnetd12 -lvsn12 -lcommon12 -lgeneric12 -lmm -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12
-lxml12 -lcore12 -lunls12 -lsnls12 -lnls12 -lcore12 -lnls12
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/ldflags` -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -lnro12
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/ldflags` -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -lclient12 -lnnetd12 -lvsn12 -lcommon12 -lgeneric12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lxml12 -lcore12 -lunls12 -lsnls12
-lnls12 -lcore12 -lnls12 -lclient12 -lnnetd12 -lvsn12 -lcommon12 -lgeneric12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lxml12 -lcore12 -lunls12 -lsnls12 -lnls12 -lcore12 -lnls12
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/sysliblist` -Wl,-rpath,/u01/app/oracle/product/12.1.0.2/db_1/lib -lm
`cat /u01/app/oracle/product/12.1.0.2/db_1/lib/sysliblist` -ldl -lm -L/u01/app/oracle/product/12.1.0.2/db_1/lib
[oracle@12cdock lib]$ cp bbed /u01/app/oracle/product/12.1.0.2/db_1/bin/
BBED是Oracle 内部使用的命令,所以Oracle 不提供技术支持。 为了安全BBED设置了口令保护,默认密码为blockedit。
[oracle@12cdock lib]$ bbed
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Wed Feb 22 09:47:07 2017
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> show
FILE# 0
BLOCK#
1
OFFSET
0
DBA 0x00000000 (0 0,1)
FILENAME
BIFILE
bifile.bbd
LISTFILE
BLOCKSIZE 8192
MODE
Browse
EDIT
Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No
将现有数据文件在bbed中指定,没有的话先在sqlplus中创建
BBED> set filename '/u01/app/oracle/oradata/ORCL/datafile/test.dbf'
FILENAME
/u01/app/oracle/oradata/ORCL/datafile/test.dbf
BBED> show all;
FILE# 0
BLOCK#
1
OFFSET
0
DBA 0x00000000 (0 0,1)
FILENAME
/u01/app/oracle/oradata/ORCL/datafile/test.dbf
BIFILE
bifile.bbd
LISTFILE
BLOCKSIZE 8192
MODE
Browse
EDIT
Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No
2.使用参数文件连接BBED
a)查询出当前的数据文件并保存在文本文件中
SQL>spool psdb_file.txt
SQL> select file#||' '||name||' '||bytes from v$datafile ;
FILE#||''||NAME||''||BYTES
--------------------------------------------------------------------------------
1 /data/oradata/ocrl/datafile/system01.dbf 912261120
2 /data/oradata/ocrl/datafile/sysaux01.dbf 1247805440
3 /data/oradata/ocrl/datafile/undotbs01.dbf 765460480
4 /data/oradata/ocrl/datafile/users01.dbf 28835840
5 /data/oradata/ocrl/datafile/test.dbf 10485760
6 /data/oradata/ocrl/datafile/tstest.dbf 10485760
6 rows selected.
SQL> spool off
注意:保存在文件里的文件号要与我们数据库查询出来的FILE#相同
ocrl:/home/oracle@oracle1>cat psdb_file.txt
1 /data/oradata/ocrl/datafile/system01.dbf 912261120
2 /data/oradata/ocrl/datafile/sysaux01.dbf 1247805440
3 /data/oradata/ocrl/datafile/undotbs01.dbf 765460480
4 /data/oradata/ocrl/datafile/users01.dbf 28835840
5 /data/oradata/ocrl/datafile/test.dbf 10485760
6 /data/oradata/ocrl/datafile/tstest.dbf 10485760
b)BBED使用参数文件登陆
[oracle@12cdock ~]$cat psdb_file.txt
1 /data/oradata/ocrl/datafile/system01.dbf 912261120
2 /data/oradata/ocrl/datafile/sysaux01.dbf 1247805440
3 /data/oradata/ocrl/datafile/undotbs01.dbf 765460480
4 /data/oradata/ocrl/datafile/users01.dbf 28835840
5 /data/oradata/ocrl/datafile/test.dbf 10485760
6 /data/oradata/ocrl/datafile/tstest.dbf 10485760
[oracle@12cdock ~]$cat bbed_parameter.txt
blocksize=8192
listfile=/home/oracle/psdb_file.txt
mode=edit
ocrl:/home/oracle@oracle1>bbed parfile=/home/oracle/bbed_parameter.txt
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Tue Feb 21 15:17:57 2017
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> info
File# Name Size(blks)
----- ---- ----------
1 /data/oradata/ocrl/datafile/system01.dbf 111360
2 /data/oradata/ocrl/datafile/sysaux01.dbf 152320
3 /data/oradata/ocrl/datafile/undotbs01.dbf 93440
4 /data/oradata/ocrl/datafile/users01.dbf 3520
5 /data/oradata/ocrl/datafile/test.dbf 1280
6 /data/oradata/ocrl/datafile/tstest.dbf 1280
BBED>
3.破坏system表空间文件
注意:这里最好先做好备份
ocrl:/data/oradata/ocrl/datafile@oracle1>cp system01.dbf system01.dbf.bak
切换日志模拟生产交易,更新SCN
SQL> alter system switch logfile;//多切几次
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL>
把旧的system文件直接复制替换掉新的
ocrl:/data/oradata/ocrl/datafile@oracle1>cp system01.dbf.bak system01.dbf
再次切换日志模拟生产交易
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
/
alter system switch logfile
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 9115
Session ID: 20 Serial number: 33669
出现问题,数据库直接宕掉
ocrl:/home/oracle@oracle1>sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Tue Feb 21 14:53:47 2017
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 754974720 bytes
Fixed Size 2928968 bytes
Variable Size 524291768 bytes
Database Buffers 222298112 bytes
Redo Buffers 5455872 bytes
Database mounted.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/data/oradata/ocrl/datafile/system01.dbf'
SQL> col name for a50
SQL> select name,checkpoint_change# from v$datafile;
NAME CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/data/oradata/ocrl/datafile/system01.dbf 12717804
/data/oradata/ocrl/datafile/sysaux01.dbf 12717804
/data/oradata/ocrl/datafile/undotbs01.dbf 12717804
/data/oradata/ocrl/datafile/users01.dbf 12717804
/data/oradata/ocrl/datafile/test.dbf 12717804
/data/oradata/ocrl/datafile/tstest.dbf 12717804
6 rows selected.
scn 转换成16进制
SQL> select to_char(12717804,'xxxxxxxx') from dual;
TO_CHAR(1
---------
c20eec
SQL> select name,checkpoint_change# from v$datafile_header;
NAME CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/data/oradata/ocrl/datafile/system01.dbf 12717402
/data/oradata/ocrl/datafile/sysaux01.dbf 12717804
/data/oradata/ocrl/datafile/undotbs01.dbf 12717804
/data/oradata/ocrl/datafile/users01.dbf 12717804
/data/oradata/ocrl/datafile/test.dbf 12717804
/data/oradata/ocrl/datafile/tstest.dbf 12717804
6 rows selected.
可以看到数据库system01.dbf的scn点为12717402明显是用的备份的数据文件。oracle在open数据库时要对控制文件,数据文件头的scn进行检查,一致才能打开,所以这里我们通过ddeb来修改数据文件头让它和其他的数据文件的scn相同,达到起库的目的。
登陆bbed
ocrl:/home/oracle@oracle1>bbed parfile=bbed_parameter.txt
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Tue Feb 21 14:58:25 2017
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
用bbed查询bbed01数据文件结构信息
BBED> set dba 1,1
DBA 0x00400001 (4194305 1,1)
Bbed查看kcvfh信息
BBED> p kcvfhckp
struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x00c20d5a
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x37d28348
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x000000bb
ub4 kcrbabno @504 0x00000002
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00
BBED> set filename '/data/oradata/ocrl/datafile/system01.dbf'
FILENAME
/data/oradata/ocrl/datafile/system01.dbf
BBED> p kcvfhckp
struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x00c20d5a
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x37d28348
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x000000bb
ub4 kcrbabno @504 0x00000002
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00
查看正常数据文件头
BBED> set count 26
COUNT 26
BBED> d offset 484 dba 3,1
File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_d0xj0lhx_.dbf (3)
Block: 1 Offsets: 484 to 509 Dba:0x00c00001
------------------------------------------------------------------------
6dcf1d00 00000000 41a5d337 0100a792 2a000000 02000000 1000
<32 bytes per line>
BBED> d offset 484 dba 4,1
File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_d0xj4qc1_.dbf (4)
Block: 1 Offsets: 484 to 509 Dba:0x01000001
------------------------------------------------------------------------
6dcf1d00 00000000 41a5d337 0100a792 2a000000 02000000 1000
查看system文件的数据文件头
BBED> d offset 484 dba 1,1
File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_d0xj2b4p_.dbf (1)
Block: 1 Offsets: 484 to 509 Dba:0x00400001
------------------------------------------------------------------------
e8c81d00 00000000 f5a2d337 01000000 15000000 02000000 1000
<32 bytes per line>
修改system文件头
BBED> modify /x 6dcf dba 1,1 offset 484
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_d0xj2b4p_.dbf (1)
Block: 1 Offsets: 484 to 509 Dba:0x00400001
------------------------------------------------------------------------
6dcf1d00 00000000 f5a2d337 01000000 15000000 02000000 1000
<32 bytes per line>
BBED> sum dba 1,1 apply
Check value for File 1, Block 1:
current = 0x2438, required = 0x2438
BBED> d offset dba 1,1
BBED-00207: invalid offset specifier (dba)
BBED> d offset 484 dba 1,1
File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_d0xj2b4p_.dbf (1)
Block: 1 Offsets: 484 to 509 Dba:0x00400001
------------------------------------------------------------------------
6dcf1d00 00000000 f5a2d337 01000000 15000000 02000000 1000
<32 bytes per line>
打开数据库
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/data/oradata/ocrl/datafile/system01.dbf'
SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
相关文章推荐
- Oracle 之利用BBED修改数据块SCN----极端环境下的数据恢复(一)
- 使用bbed修改文件头,推进scn,恢复offline drop的数据文件
- [Oracle]如果误删了某个数据文件,又没有被备份,能否恢复?
- ORACLE 11G没有备份文件參数文件在异机通过rman备份恢复找回被误删的数据
- oracle特殊恢复-bbed修改某个数据文件头
- ORACLE 11G没有备份文件参数文件在异机通过rman备份恢复找回被误删的数据
- 每天两道oracle笔试题+第九天:1、比较truncate和delete命令的区别?2、如果必须利用备份恢复数据库,但此时没有控制文件,如何应对?
- 没有备份、只有归档日志,如何恢复数据文件?
- 系统损坏,移植Oracle(9.2.0.1)数据库(无备份数据文件进行恢复)
- 利用DBMS_BACKUP_RESETORE从备份中恢复控制文件数据文件和归档日志
- oracle无备份丢失数据文件的恢复
- oracle备份文件恢复到oracle10的数据乱码问题解决方法
- 文件、修改-Oracle非常规恢复(使用BBED跳过归档)-by小雨
- oracle实验记录 (恢复,备份-含坏块数据文件)
- 丢失oracle参数文件,数据文件以及控制文件,只有rman备份的恢复
- Oracle恢复实验(三):恢复未备份的数据文件。
- 没有备份、只有归档日志,如何恢复数据文件?
- ARCHIVELOG模式下用户管理的完全恢复(4)——在没有数据文件备份的情况下恢复数据文件!
- 拥有所有归档文件,但没有备份情况下的数据文件恢复
- Oracle的学习四:数据库管理员、逻辑备份与恢复、数据字典、动态性能视图、管理表空间与数据文件