某客户给sysaux表空间添加了数据文件,但有在操作系统层rm 删除了数据文件,更悲催的的是之前归档所在的磁盘损坏,恢复所需要的归档那是没指望了,也一年多没进行过数据库备份了,
现记录恢复过程如下:(虚拟机上重新模拟该恢复过程)
1 数据文件状态如下
SQL> select file#,name,status from v$datafile;
FILE# NAME STATUS
---------- ---------------------------------------- -------
1 /oracle/CRM/ZBCRM/system01.dbf SYSTEM
2 /oracle/CRM/ZBCRM/sysaux01.dbf ONLINE
3 /oracle/CRM/ZBCRM/undotbs01.dbf ONLINE
4 /oracle/CRM/ZBCRM/users01.dbf ONLINE
5 /oracle/CRM/ZBCRM/sysaux02.dbf RECOVER
2 重新生成操作系统层删除的数据文件
SQL> alter database create datafile '/oracle/CRM/ZBCRM/sysaux02.dbf';
Database altered.
注意,当我们用 alter database create datafile 创建数据文件时,数据文件头部scn以及rba.seq号均取自于该数据文件创建时控制文件中记录的scn和rba.seq号.
3 此刻数据文件头部信息如下:
SQL> select hxfil,fhscn,fhrba_seq from x$kcvfh;
HXFIL FHSCN FHRBA_SEQ
---------- ---------------- ----------
1 1047892 18
2 1047892 18
3 1047892 18
4 1047892 18
5 1026926 1
这里可以明确看出5号数据文件恢复需要从seq号为1的归档开始恢复,但实际上seq#=1及其之后的归档已经不存在了,所以如下恢复失败:
SQL> recover datafile 5;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 5: '/oracle/CRM/ZBCRM/sysaux02.dbf'
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/oracle/CRM/ZBCRM/sysaux02.dbf'
4 用bbed调整5号数据文件如下几个偏移量
ub4 kcvfhcpc @140 ------检查点计数
ub4 kcvfhccc @148 ------总是比检查点计数少1
ub4 kcvcptim @492 ------检查点时间
ub4 kscnbas @484 ------scn的低位
ub2 kscnwrp @488 ------scn的高位
[oracle@oracle ~]$ bbed parfile=bbed.par
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Thu Jul 25 14:26:45 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> info
File# Name Size(blks)
----- ---- ----------
1 /oracle/CRM/ZBCRM/system01.dbf 89600
2 /oracle/CRM/ZBCRM/sysaux01.dbf 65280
3 /oracle/CRM/ZBCRM/undotbs01.dbf 8960
4 /oracle/CRM/ZBCRM/users01.dbf 640
5 /oracle/CRM/ZBCRM/sysaux02.dbf 12800
对@140的更改如下:
BBED> dump /v dba 2,1 offset 140 count 20
File: /oracle/CRM/ZBCRM/sysaux01.dbf (2)
Block: 1 Offsets: 140 to 159 Dba:0x00800001
-------------------------------------------------------
6a000000 d562fa30 69000000 00000000 l j...誦?i.......
00000000 l ....
<16 bytes per line>
BBED> dump /v dba 5,1 offset 140 count 20
File: /oracle/CRM/ZBCRM/sysaux02.dbf (5)
Block: 1 Offsets: 140 to 159 Dba:0x01400001
-------------------------------------------------------
01000000 00000000 01000000 00000000 l ................
00000000 l ....
<16 bytes per line>
BBED> modify /x 6a
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: /oracle/CRM/ZBCRM/sysaux02.dbf (5)
Block: 1 Offsets: 140 to 159 Dba:0x01400001
------------------------------------------------------------------------
6a000000 00000000 01000000 00000000 00000000
<32 bytes per line>
对@148的更改如下:
BBED> dump /v dba 2,1 offset 148 count 20
File: /oracle/CRM/ZBCRM/sysaux01.dbf (2)
Block: 1 Offsets: 148 to 167 Dba:0x00800001
-------------------------------------------------------
69000000 00000000 00000000 00000000 l i...............
00000000 l ....
<16 bytes per line>
BBED> dump /v dba 5,1 offset 148 count 20
File: /oracle/CRM/ZBCRM/sysaux02.dbf (5)
Block: 1 Offsets: 148 to 167 Dba:0x01400001
-------------------------------------------------------
01000000 00000000 00000000 00000000 l ................
00000000 l ....
<16 bytes per line>
BBED> modify /x 69
File: /oracle/CRM/ZBCRM/sysaux02.dbf (5)
Block: 1 Offsets: 148 to 167 Dba:0x01400001
------------------------------------------------------------------------
69000000 00000000 00000000 00000000 00000000
<32 bytes per line>
对@492的更改如下:
BBED> dump /v dba 2,1 offset 492 count 20
File: /oracle/CRM/ZBCRM/sysaux01.dbf (2)
Block: 1 Offsets: 492 to 511 Dba:0x00800001
-------------------------------------------------------
d762fa30 01000000 12000000 02000000 l 譩?............
10000000 l ....
<16 bytes per line>
BBED> dump /v dba 5,1 offset 492 count 20
File: /oracle/CRM/ZBCRM/sysaux02.dbf (5)
Block: 1 Offsets: 492 to 511 Dba:0x01400001
-------------------------------------------------------
065ffa30 01000000 01000000 c2530500 l ._?........耂..
10000000 l ....
<16 bytes per line>
BBED> modify /x d762fa30
BBED-00209: invalid number (d762fa30)
BBED> modify /x d762
File: /oracle/CRM/ZBCRM/sysaux02.dbf (5)
Block: 1 Offsets: 492 to 511 Dba:0x01400001
------------------------------------------------------------------------
d762fa30 01000000 01000000 c2530500 10000000
<32 bytes per line>
对@484的偏移量更改如下:
BBED> dump /v dba 2,1 offset 484 count 20
File: /oracle/CRM/ZBCRM/sysaux01.dbf (2)
Block: 1 Offsets: 484 to 503 Dba:0x00800001
-------------------------------------------------------
54fd0f00 00000000 d762fa30 01000000 l T?.....譩?....
12000000 l ....
<16 bytes per line>
BBED> dump /v dba 5,1 offset 484 count 20
File: /oracle/CRM/ZBCRM/sysaux02.dbf (5)
Block: 1 Offsets: 484 to 503 Dba:0x01400001
-------------------------------------------------------
6eab0f00 00000000 d762fa30 01000000 l n?.....譩?....
01000000 l ....
<16 bytes per line>
BBED> modify /x 54fd
File: /oracle/CRM/ZBCRM/sysaux02.dbf (5)
Block: 1 Offsets: 484 to 503 Dba:0x01400001
------------------------------------------------------------------------
54fd0f00 00000000 d762fa30 01000000 01000000
<32 bytes per line>
5 对比2号文件和5号文件的相关偏移量值是否相等如下:
BBED> dump /v dba 2,1 offset 140 count 20
File: /oracle/CRM/ZBCRM/sysaux01.dbf (2)
Block: 1 Offsets: 140 to 159 Dba:0x00800001
-------------------------------------------------------
6a000000 d562fa30 69000000 00000000 l j...誦?i.......
00000000 l ....
<16 bytes per line>
BBED> dump /v dba 5,1 offset 140 count 20
File: /oracle/CRM/ZBCRM/sysaux02.dbf (5)
Block: 1 Offsets: 140 to 159 Dba:0x01400001
-------------------------------------------------------
6a000000 00000000 69000000 00000000 l j.......i.......
00000000 l ....
<16 bytes per line>
BBED> dump /v dba 2,1 offset 148 count 20
File: /oracle/CRM/ZBCRM/sysaux01.dbf (2)
Block: 1 Offsets: 148 to 167 Dba:0x00800001
-------------------------------------------------------
69000000 00000000 00000000 00000000 l i...............
00000000 l ....
<16 bytes per line>
BBED> dump /v dba 5,1 offset 148 count 20
File: /oracle/CRM/ZBCRM/sysaux02.dbf (5)
Block: 1 Offsets: 148 to 167 Dba:0x01400001
-------------------------------------------------------
69000000 00000000 00000000 00000000 l i...............
00000000 l ....
<16 bytes per line>
BBED> dump /v dba 2,1 offset 492 count 20
File: /oracle/CRM/ZBCRM/sysaux01.dbf (2)
Block: 1 Offsets: 492 to 511 Dba:0x00800001
-------------------------------------------------------
d762fa30 01000000 12000000 02000000 l 譩?............
10000000 l ....
<16 bytes per line>
BBED> dump /v dba 5,1 offset 492 count 20
File: /oracle/CRM/ZBCRM/sysaux02.dbf (5)
Block: 1 Offsets: 492 to 511 Dba:0x01400001
-------------------------------------------------------
d762fa30 01000000 01000000 c2530500 l 譩?........耂..
10000000 l ....
<16 bytes per line>
BBED> dump /v dba 2,1 offset 484 count 20
File: /oracle/CRM/ZBCRM/sysaux01.dbf (2)
Block: 1 Offsets: 484 to 503 Dba:0x00800001
-------------------------------------------------------
54fd0f00 00000000 d762fa30 01000000 l T?.....譩?....
12000000 l ....
<16 bytes per line>
BBED> dump /v dba 5,1 offset 484 count 20
File: /oracle/CRM/ZBCRM/sysaux02.dbf (5)
Block: 1 Offsets: 484 to 503 Dba:0x01400001
-------------------------------------------------------
54fd0f00 00000000 d762fa30 01000000 l T?.....譩?....
01000000 l ....
<16 bytes per line>
BBED> sum apply
Check value for File 5, Block 1:
current = 0xc4ad, required = 0xc4ad
BBED> exit
[oracle@oracle ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Thu Jul 25 14:38:22 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> col name for a40
SQL> select file#,name,status from v$datafile;
FILE# NAME STATUS
---------- ---------------------------------------- -------
1 /oracle/CRM/ZBCRM/system01.dbf SYSTEM
2 /oracle/CRM/ZBCRM/sysaux01.dbf ONLINE
3 /oracle/CRM/ZBCRM/undotbs01.dbf ONLINE
4 /oracle/CRM/ZBCRM/users01.dbf ONLINE
5 /oracle/CRM/ZBCRM/sysaux02.dbf RECOVER
SQL> recover datafile 5;
ORA-00283: recovery session canceled due to errors
ORA-01122: database file 5 failed verification check
ORA-01110: data file 5: '/oracle/CRM/ZBCRM/sysaux02.dbf'
ORA-01207: file is more recent than control file - old control file
关于ora-01207的错误详细处理过程见:http://jiujian.blog.51cto.com/444665/1276674
SQL> alter database backup controlfile to trace;
Database altered.
SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name;
/oracle/app/diag/rdbms/zbcrm/ZBCRM/trace/ZBCRM_ora_8828.trc
SQL> exit
[oracle@oracle ~]$ vi /oracle/app/diag/rdbms/zbcrm/ZBCRM/trace/ZBCRM_ora_8828.trc 找到如下创建控制文件语句:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ZBCRM" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oracle/CRM/ZBCRM/redo01.log' SIZE 200M BLOCKSIZE 512,
GROUP 2 '/oracle/CRM/ZBCRM/redo02.log' SIZE 200M BLOCKSIZE 512,
GROUP 3 '/oracle/CRM/ZBCRM/redo03.log' SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/oracle/CRM/ZBCRM/system01.dbf',
'/oracle/CRM/ZBCRM/sysaux01.dbf',
'/oracle/CRM/ZBCRM/undotbs01.dbf',
'/oracle/CRM/ZBCRM/users01.dbf',
'/oracle/CRM/ZBCRM/sysaux02.dbf'
CHARACTER SET ZHS16GBK
;
app archive archive2 bbed.par bifile.bbd control.sql CRM data Desktop erp.dbf file log.bbd oraInventory redo01.log temp01.dbf test
[oracle@oracle ~]$ ls -l control.sql
-rw-r--r-- 1 oracle oinstall 623 Jul 25 14:42 control.sql
[oracle@oracle ~]$
[oracle@oracle ~]$
[oracle@oracle ~]$
[oracle@oracle ~]$ cat control.sql
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ZBCRM" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oracle/CRM/ZBCRM/redo01.log' SIZE 200M BLOCKSIZE 512,
GROUP 2 '/oracle/CRM/ZBCRM/redo02.log' SIZE 200M BLOCKSIZE 512,
GROUP 3 '/oracle/CRM/ZBCRM/redo03.log' SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/oracle/CRM/ZBCRM/system01.dbf',
'/oracle/CRM/ZBCRM/sysaux01.dbf',
'/oracle/CRM/ZBCRM/undotbs01.dbf',
'/oracle/CRM/ZBCRM/users01.dbf',
'/oracle/CRM/ZBCRM/sysaux02.dbf'
CHARACTER SET ZHS16GBK
;
[oracle@oracle ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Thu Jul 25 14:43:26 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> @/oracle/control.sql
ORACLE instance started.
Total System Global Area 1152450560 bytes
Fixed Size 2225832 bytes
Variable Size 704645464 bytes
Database Buffers 436207616 bytes
Redo Buffers 9371648 bytes
Control file created.
SQL> col name for a40
SQL> /
FILE# NAME STATUS
---------- ---------------------------------------- -------
1 /oracle/CRM/ZBCRM/system01.dbf SYSTEM
2 /oracle/CRM/ZBCRM/sysaux01.dbf ONLINE
3 /oracle/CRM/ZBCRM/undotbs01.dbf ONLINE
4 /oracle/CRM/ZBCRM/users01.dbf ONLINE
5 /oracle/CRM/ZBCRM/sysaux02.dbf RECOVER
SQL> recover datafile 5;
Media recovery complete.
SQL> alter database open;
Database altered.