手工完全恢复

1、完全恢复基于三个级别

recoverdatabase:所有数据文件损坏,或包括大部分datafile丢失(大面积丢失)

recovertablespace:非关键表空间损坏,表空间下某些数据文件不能访问recover datafile:单一或少数数据文件损坏 (如果是系统表空间损坏,可以在mount下,使用recover datafile恢复)


2、恢复过程可以查看的视图:

v$recover_file 查看需要恢复的datafile

v$recovery_log 查看recover需要的redo 日志

v$archvied_log 查看已经归档的日志


3、适用的场景

(1)recoverdatabase (所有或大部分数据文件损坏,mount或open下进行)

OS:使用cp 还原受损的dbf(不一定是全部,v$recover_file记录的都需要还原)

SQLPLUS:

①recover database;

②alter database open;


(2)recovertablespace (针对表空间的非关键数据文件损坏,一般是open下进行)

OS:使用cp 还原该表空间XXX下的所有数据文件

SQLPLUS:

①alter tablespace XXXoffline;

②recover tablespace XXX;

③alter tablespace XXXonline;


(3)recoverdatafile (单个或几个数据文件损坏,关键文件在mount下进行,非关键文件在open下进行)

第一种情形

OS:使用cp 还原相关的关键数据文件(mount)

SQLPLUS:

①recover datafile 6,8;

②alter database open;

第二种情形

OS:使用cp 还原相关的非关键数据文件(open)

SQLPLUS:

①alter database datafile6,8 offline;

②recover datafile 6,8;

③alter database datafile6,8 online;



目录

示例一:recoverdatabase

示例二:recovertablespace

示例三:recoverdatafile

情况1:关键数据文件

情况2:非关键数据文件




实验环境:

操作系统:CentOS7.1

数据库:Oracle 11.2.0.4



示例一:recover database(介质失败,丢失大量的数据文件)


1、模拟环境:

创建一个seiang表空间,在scott用户下创建一张表test


SYS@seiang11g>create tablespaceseiang datafile '/u01/app/oracle/oradata/OraDB11g/seiang01.dbf' size 20M;


Tablespacecreated.


SYS@seiang11g>conn scott

Enterpassword:

Connected.

SCOTT@seiang11g>create tabletest(id number,name varchar2(10)) tablespace seiang;

Tablecreated.


SCOTT@seiang11g>insert intotest values(1,'wjq');

1row created.


SCOTT@seiang11g>commit;

Commitcomplete.


SCOTT@seiang11g>select * from test;


ID NAME

----------------------------------------------------------------------

1 wjq


SYS@seiang11g>shutdown immediate

Databaseclosed.

Databasedismounted.

ORACLEinstance shut down


干净的关闭数据库之后,操作系统下对数据库中的Datafile做一个完全冷备

[oracle@seiang11gOraDB11g]$ cp./* /u01/app/oracle/UMAN_Backup/

[oracle@seiang11gOraDB11g]$ ll/u01/app/oracle/UMAN_Backup/

total2123572

-rw-r-----1 oracle oinstall 9748480 Jul 25 11:53control01.ctl

-rw-r-----1 oracle oinstall 363077632 Jul 25 11:54 example01.dbf

-rw-r-----1 oracle oinstall 52429312 Jul 25 11:54redo01.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 11:54redo02.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 11:54redo03.log

-rw-r-----1 oracle oinstall 31465472 Jul 25 11:54rman01.dbf

-rw-r-----1 oracle oinstall 20979712 Jul 25 11:54seiang01.dbf

-rw-r-----1 oracle oinstall 671096832 Jul 25 11:54 sysaux01.dbf

-rw-r-----1 oracle oinstall 796925952 Jul 25 11:54 system01.dbf

-rw-r-----1 oracle oinstall 30416896 Jul 25 11:54temp01.dbf

-rw-r-----1 oracle oinstall 110108672 Jul 25 11:54 undotbs01.dbf

-rw-r-----1 oracle oinstall 5251072 Jul 25 11:54users01.dbf


启动数据库

SYS@seiang11g>startup

ORACLEinstance started.


TotalSystem Global Area 1252663296 bytes

FixedSize 2252824 bytes

VariableSize 788533224 bytes

DatabaseBuffers 452984832 bytes

RedoBuffers 8892416 bytes

Databasemounted.

Databaseopened.

SYS@seiang11g>conn scott

Enterpassword:

Connected.

SCOTT@seiang11g>insert into testvalues(2,'wjq1'); //注意该条数据提交

1row created.


SCOTT@seiang11g>commit;

Commitcomplete.


SCOTT@seiang11g>insert into testvalues(3,'wjq2'); //注意该条数据未提交

1row created.


SCOTT@seiang11g>select * from test;


ID NAME

----------------------------------------------------------------------

1 wjq

2 wjq1

3 wjq2


查看当前日志,第二、三条数据的插入记录在redo2中;

SYS@seiang11g>selectgroup#,sequence#,members,status from v$log;


GROUP#SEQUENCE# MEMBERS STATUS

-------------------- ---------- ----------------

131 1 INACTIVE

2 32 1 CURRENT

3 30 1 INACTIVE


进行日志切换

SYS@seiang11g>alter system switchlogfile;


Systemaltered.


SYS@seiang11g>selectgroup#,sequence#,members,status from v$log;


GROUP#SEQUENCE# MEMBERS STATUS

-------------------- ---------- ----------------

1 31 1 INACTIVE

2 32 1 ACTIVE

3 33 1 CURRENT


SYS@seiang11g>conn scott

Enterpassword:

Connected.

SCOTT@seiang11g>insert into testvalues(4,'wjq3'); //注意该条记录也为提交

1row created.


SCOTT@seiang11g>select * from test;


ID NAME

----------------------------------------------------------------------

1 wjq

2 wjq1

3 wjq2

4 wjq3


2、模拟介质损坏

数据库在打开的情况下删除数据文件

[oracle@seiang11gOraDB11g]$ rm*.dbf

[oracle@seiang11gOraDB11g]$ ll

total163132

-rw-r-----1 oracle oinstall 9748480 Jul 25 12:06control01.ctl

-rw-r-----1 oracle oinstall 52429312 Jul 25 11:56 redo01.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 12:02 redo02.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 12:06 redo03.log


换一个session关闭数据库,然后重新启动,数据库只能启动到mount状态,open时报错

SYS@seiang11g>startup

ORACLEinstance started.


TotalSystem Global Area 1252663296 bytes

FixedSize 2252824 bytes

VariableSize 788533224 bytes

DatabaseBuffers 452984832 bytes

RedoBuffers 8892416 bytes

Databasemounted.

ORA-01157:cannot identify/lock data file 1 - see DBWR trace file

ORA-01110:data file 1: '/u01/app/oracle/oradata/OraDB11g/system01.dbf'


SYS@seiang11g>select file#,errorfrom v$recover_file;


FILE# ERROR

---------------------------------------------------------------------------

1 FILE NOT FOUND

2 FILE NOT FOUND

3 FILE NOT FOUND

4 FILE NOT FOUND

5 FILE NOT FOUND

6 FILE NOT FOUND

7 FILE NOT FOUND


查看控制文件和数据文件头中记录的SCN

SYS@seiang11g>selectfile#,checkpoint_change# from v$datafile;


FILE# CHECKPOINT_CHANGE#

----------------------------

1 1501761

21501761

3 1501761

4 1501761

5 1501761

6 1501761

7 1501761


SYS@seiang11g>selectfile#,checkpoint_change#from v$datafile_header;


FILE# CHECKPOINT_CHANGE#

----------------------------

1 0

2 0

3 0

4 0

5 0

6 0

7 0

由于没有数据文件,所以数据文件头的SCN为0


从冷备的Datafile中还原丢失的数据文件

[oracle@seiang11gOraDB11g]$ cp/u01/app/oracle/UMAN_Backup/*.dbf ./

[oracle@seiang11gOraDB11g]$ ll

total2123572

-rw-r-----1 oracle oinstall 9748480 Jul 25 12:15control01.ctl

-rw-r-----1 oracle oinstall 363077632 Jul 25 12:13 example01.dbf

-rw-r-----1 oracle oinstall 52429312 Jul 25 11:56redo01.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 12:02redo02.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 12:07redo03.log

-rw-r-----1 oracle oinstall 31465472 Jul 25 12:13rman01.dbf

-rw-r-----1 oracle oinstall 20979712 Jul 25 12:13seiang01.dbf

-rw-r-----1 oracle oinstall 671096832 Jul 25 12:14 sysaux01.dbf

-rw-r-----1 oracle oinstall 796925952 Jul 25 12:14 system01.dbf

-rw-r-----1 oracle oinstall 30416896 Jul 25 12:14temp01.dbf

-rw-r-----1 oracle oinstall 110108672 Jul 25 12:14 undotbs01.dbf

-rw-r-----1 oracle oinstall 5251072 Jul 25 12:14users01.dbf


再次查看控制文件和数据文件头的SCN,发现数据文件头的SCN比控制文件中记录的SCN要小

SYS@seiang11g>selectfile#,checkpoint_change# from v$datafile;


FILE# CHECKPOINT_CHANGE#

----------------------------

1 1501761

2 1501761

3 1501761

4 1501761

5 1501761

6 1501761

7 1501761


SYS@seiang11g>selectfile#,checkpoint_change# from v$datafile_header;


FILE# CHECKPOINT_CHANGE#

----------------------------

1 1501758

2 1501758

3 1501758

4 1501758

5 1501758

6 1501758

7 1501758


执行手工完全恢复,并比较控制文件和数据文件头的SCN,发现完全恢复后,控制文件和数据文件中记录的SCN一致;

SYS@seiang11g>recover database;

Mediarecovery complete.


SYS@seiang11g>selectfile#,checkpoint_change# from v$datafile;


FILE# CHECKPOINT_CHANGE#

----------------------------

1 1522474

2 1522474

3 1522474

4 1522474

5 1522474

6 1522474

7 1522474


SYS@seiang11g>selectfile#,checkpoint_change# from v$datafile_header;


FILE# CHECKPOINT_CHANGE#

----------------------------

1 1522474

2 1522474

3 1522474

4 1522474

5 1522474

6 1522474

7 1522474


SYS@seiang11g>select * fromv$recover_file;

norows selected

打开数据库,并进行验证

SYS@seiang11g>alter databaseopen;

Databasealtered.


SYS@seiang11g>select * from scott.test;


ID NAME

--------------------

1 wjq

2 wjq1

3 wjq2

4 wjq3



示例二:recover tablespace

针对的是非关键表空间的损坏恢复,基于表空间的完全恢复实际上还是对其下的datafile的恢复;模拟这种情形非常实用,通常某个非关键表空间下的数据文件受损,但并没有造成Oracle崩溃,我们只需针对个别有问题的tablespace去做单独的在线恢复操作,也就是说恢复时数据库整体是online的,而局部表空间是offline的,数据库不需要shutdown。


1、模拟环境

在scott用户下创建一个表test1,并插入相应的数据


SCOTT@seiang11g>create tabletest1(id number,name varchar2(10)) tablespace seiang;

Tablecreated.


SCOTT@seiang11g>

SCOTT@seiang11g>insert into test1values(100,'wjq');

1row created.


SCOTT@seiang11g>commit;

Commitcomplete.


查看当前redo信息

SYS@seiang11g>selectgroup#,sequence#,members,status from v$log;

GROUP#SEQUENCE# MEMBERS STATUS

-------------------- ---------- ----------------

1 34 1 CURRENT

2 32 1 INACTIVE

3 33 1 INACTIVE


进行日志的切换

SYS@seiang11g>alter system switchlogfile;

Systemaltered.


SYS@seiang11g>select group#,sequence#,members,statusfrom v$log;


GROUP#SEQUENCE# MEMBERS STATUS

-------------------- ---------- ----------------

1 34 1 ACTIVE

2 35 1 CURRENT

3 33 1 INACTIVE


以下插入的两条记录未提交

SCOTT@seiang11g>insert into test1values(200,'wjq2');

1row created.


SCOTT@seiang11g>insert into test1values(200,'wjq3');

1row created.


SCOTT@seiang11g>select * fromtest1;


ID NAME

--------------------

100 wjq

200 wjq2

200 wjq3

2、模拟表空间损坏

数据库open下,直接删除表空间下的数据文件


SYS@seiang11g>host rm/u01/app/oracle/oradata/OraDB11g/seiang01.dbf

SYS@seiang11g>host ls -l/u01/app/oracle/oradata/OraDB11g

total2103124

-rw-r-----1 oracle oinstall 9781248 Jul 25 14:14control01.ctl

-rw-r-----1 oracle oinstall 363077632 Jul 25 12:20 example01.dbf

-rw-r-----1 oracle oinstall 52429312 Jul 25 14:10redo01.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 14:14redo02.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 12:20redo03.log

-rw-r-----1 oracle oinstall 31465472 Jul 25 12:20rman01.dbf

-rw-r-----1 oracle oinstall 671096832 Jul 25 14:13 sysaux01.dbf

-rw-r-----1 oracle oinstall 796925952 Jul 25 14:13 system01.dbf

-rw-r-----1 oracle oinstall 30416896 Jul 25 12:20temp01.dbf

-rw-r-----1 oracle oinstall 110108672 Jul 25 14:13 undotbs01.dbf

-rw-r-----1 oracle oinstall 5251072 Jul 25 12:20users01.dbf


清除databuffer cache的记录

SYS@seiang11g>alter system flushbuffer_cache;

Systemaltered.


SCOTT@seiang11g>select * fromtest1;

select* from test1

*

ERRORat line 1:

ORA-03135:connection lost contact

ProcessID: 5524

SessionID: 42 Serial number: 91


重新启动数据库,在数据库open的时候出现报错

SYS@seiang11g>startup

ORACLEinstance started.


TotalSystem Global Area 1252663296 bytes

FixedSize 2252824 bytes

VariableSize 788533224 bytes

DatabaseBuffers 452984832 bytes

RedoBuffers 8892416 bytes

Databasemounted.

ORA-01157:cannot identify/lock data file 7 - see DBWR trace file

ORA-01110:data file 7: '/u01/app/oracle/oradata/OraDB11g/seiang01.dbf'


查看控制文件和数据文件头的SCN

SYS@seiang11g>selectfile#,checkpoint_change# from v$datafile;


FILE# CHECKPOINT_CHANGE#

----------------------------

1 1522477

2 1522477

3 1522477

4 1522477

5 1522477

6 1522477

7 1522477


SYS@seiang11g>selectfile#,checkpoint_change# from v$datafile_header;


FILE# CHECKPOINT_CHANGE#

----------------------------

1 1527707

2 1527707

3 1527707

4 1527707

5 1527707

6 1527707

7 0

丢失的数据文件7没有SCN


SYS@seiang11g>recover database;

ORA-00279:change 1501758 generated at 07/25/2017 11:52:18 needed for thread 1

ORA-00289:suggestion : /u01/app/oracle/arch/arch_1_949237404_32.log

ORA-00280:change 1501758 for thread 1 is in sequence #32


Specifylog: {=suggested | filename | AUTO | CANCEL}

auto

Logapplied.

Mediarecovery complete.


打开数据库,并进行验证控制文件和数据文件头的SCN一致

SYS@seiang11g>alter databaseopen;

Databasealtered.


SYS@seiang11g>selectfile#,checkpoint_change# from v$datafile;


FILE# CHECKPOINT_CHANGE#

----------------------------

1 1548052

2 1548052

3 1548052

4 1548052

5 1548052

6 1548052

7 1548052


SYS@seiang11g>select file#,checkpoint_change#from v$datafile_header;


FILE# CHECKPOINT_CHANGE#

----------------------------

1 1548052

2 1548052

3 1548052

4 1548052

5 1548052

61548052

7 1548052


SYS@seiang11g>select * fromscott.test1;


ID NAME

--------------------

100 wjqs


实验发现:未提交的两条数据被回滚掉了




示例三:recover datafile


情况1:关键数据文件损坏

1、模拟环境

同示例2不同的是模拟UNDO文件损坏: 因UNDO数据文件也是关键文件,所以只能在mount状态下恢复。


SCOTT@seiang11g>insert into test1values(200,'wjqgood');

1row created.


SCOTT@seiang11g>commit;

Commitcomplete.


SCOTT@seiang11g>select * fromtest1;


ID NAME

--------------------

100 wjq

200 wjqgood


SCOTT@seiang11g>select * fromtest1;


ID NAME

--------------------

100 wjq

200 wjqgood


删除test1中的数据,但是没有提交,老值记录在UNDO中

SYS@seiang11g>delete scott.test1;

2rows deleted.


在线备份UNDO数据文件

SYS@seiang11g>host cp/u01/app/oracle/oradata/OraDB11g/undotbs01.dbf /u01/app/oracle/backup_Temp

SYS@seiang11g>host ls -l/u01/app/oracle/backup_Temp

total107528

-rw-r-----1 oracle oinstall 110108672 Jul 25 15:21 undotbs01.dbf



2、模拟UNDO数据文件丢失

备份完成后,在线UNDO数据文件

SYS@seiang11g>host rm/u01/app/oracle/oradata/OraDB11g/undotbs01.dbf

SYS@seiang11g>host ls -l/u01/app/oracle/oradata/OraDB11g/

total2016084

-rw-r-----1 oracle oinstall 9781248 Jul 25 15:22control01.ctl

-rw-r-----1 oracle oinstall 363077632 Jul 25 14:27 example01.dbf

-rw-r-----1 oracle oinstall 52429312 Jul 25 14:27redo01.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 14:27redo02.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 15:21redo03.log

-rw-r-----1 oracle oinstall 31465472 Jul 25 14:27rman01.dbf

-rw-r-----1 oracle oinstall 20979712 Jul 25 15:21seiang01.dbf

-rw-r-----1 oracle oinstall 671096832 Jul 25 15:21 sysaux01.dbf

-rw-r-----1 oracle oinstall 796925952 Jul 25 15:20 system01.dbf

-rw-r-----1 oracle oinstall 30416896 Jul 25 12:20temp01.dbf

-rw-r-----1 oracle oinstall 5251072 Jul 25 14:27users01.dbf


干净的关闭数据库,并重新启动数据库

SYS@seiang11g>shutdown abort

ORACLEinstance shut down.


SYS@seiang11g>startup

ORACLEinstance started.


TotalSystem Global Area 1252663296 bytes

FixedSize 2252824 bytes

VariableSize 788533224 bytes

DatabaseBuffers 452984832 bytes

RedoBuffers 8892416 bytes

Databasemounted.

ORA-01157:cannot identify/lock data file 3 - see DBWR trace file

ORA-01110:data file 3: '/u01/app/oracle/oradata/OraDB11g/undotbs01.dbf'


从备份中还原UNDO数据文件

SYS@seiang11g>host cp/u01/app/oracle/backup_Temp/undotbs01.dbf /u01/app/oracle/oradata/OraDB11g/

SYS@seiang11g>host ls -l/u01/app/oracle/oradata/OraDB11g/

total2123612

-rw-r-----1 oracle oinstall 9781248 Jul 25 15:26control01.ctl

-rw-r-----1 oracle oinstall 363077632 Jul 25 14:27 example01.dbf

-rw-r-----1 oracle oinstall 52429312 Jul 25 14:27redo01.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 14:27redo02.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 15:22redo03.log

-rw-r-----1 oracle oinstall 31465472 Jul 25 14:27rman01.dbf

-rw-r-----1 oracle oinstall 20979712 Jul 25 15:21seiang01.dbf

-rw-r-----1 oracle oinstall 671096832 Jul 25 15:23 sysaux01.dbf

-rw-r-----1 oracle oinstall 796925952 Jul 25 15:23 system01.dbf

-rw-r-----1 oracle oinstall 30416896 Jul 25 12:20temp01.dbf

-rw-r-----1 oracle oinstall 110108672 Jul 25 15:26 undotbs01.dbf

-rw-r-----1 oracle oinstall 5251072 Jul 25 14:27users01.dbf


执行恢复操作

SYS@seiang11g>recover datafile 3;

Mediarecovery complete.


完成恢复操作后,打开数据库,会完成UNDO表空间的数据回滚操作,并验证恢复成功

SYS@seiang11g>alter databaseopen;

Databasealtered.


SYS@seiang11g>select * fromscott.test1;


ID NAME

--------------------

100 wjq

200 wjqgood



情况2:非关键数据文件损坏

1、模拟环境

模拟users和seiang表空间的数据文件损坏,这两个表空间的数据文件是非关键数据文件


SYS@seiang11g>selectFILE#,TS#,name,status from v$datafile;


FILE# TS# NAMESTATUS

-------------------- -------------------------------------------------- -------

10 /u01/app/oracle/oradata/OraDB11g/system01.dbf SYSTEM

2 1/u01/app/oracle/oradata/OraDB11g/sysaux01.dbf ONLINE

3 2/u01/app/oracle/oradata/OraDB11g/undotbs01.dbf ONLINE

4 4 /u01/app/oracle/oradata/OraDB11g/users01.dbf ONLINE

5 6/u01/app/oracle/oradata/OraDB11g/example01.dbf ONLINE

6 7/u01/app/oracle/oradata/OraDB11g/rman01.dbf ONLINE

7 8 /u01/app/oracle/oradata/OraDB11g/seiang01.dbf ONLINE


对这两个表空间的数据文件进行备份

SYS@seiang11g>host cp/u01/app/oracle/oradata/OraDB11g/users01.dbf /u01/app/oracle/backup_Temp

SYS@seiang11g>host cp/u01/app/oracle/oradata/OraDB11g/seiang01.dbf /u01/app/oracle/backup_Temp


SYS@seiang11g>host ls -l/u01/app/oracle/backup_Temp

total133144

-rw-r-----1 oracle oinstall 20979712 Jul 25 15:34seiang01.dbf

-rw-r-----1 oracle oinstall 110108672 Jul 25 15:21 undotbs01.dbf

-rw-r-----1 oracle oinstall 5251072 Jul 25 15:34users01.dbf


在scott用户下创建两张表,wjq1隶属于users表空间,wjq2隶属于seiang表空间

SCOTT@seiang11g>create tablewjq1(id number);

Tablecreated.


SCOTT@seiang11g>insert into wjq1values(111);

1row created.


SCOTT@seiang11g>insert into wjq1 values(222);

1row created.


SCOTT@seiang11g>commit;

Commitcomplete.


SCOTT@seiang11g>select * from wjq1;


ID

----------

111

222


SCOTT@seiang11g>create tablewjq2(name varchar2(10)) tablespace seiang;

Tablecreated.


SCOTT@seiang11g>insert into wjq2values('wjq100');

1row created.


SCOTT@seiang11g>insert into wjq2values('seiang200');

1row created.


SCOTT@seiang11g>commit;

Commitcomplete.


SCOTT@seiang11g>select * from wjq2;


NAME

----------

wjq100

seiang200


SYS@seiang11g>selecttable_name,tablespace_name,status from dba_tables

2where table_name in ('WJQ1','WJQ2');


TABLE_NAME TABLESPACE_NAME STATUS

------------------------------------------------------------ --------

WJQ1 USERS VALID

WJQ2 SEIANG VALID


2、模拟users和seiang多对应的数据文件丢失


SYS@seiang11g>host rm/u01/app/oracle/oradata/OraDB11g/users01.dbf

SYS@seiang11g>host rm/u01/app/oracle/oradata/OraDB11g/seiang01.dbf

SYS@seiang11g>host ls -l/u01/app/oracle/oradata/OraDB11g

total2097996

-rw-r-----1 oracle oinstall 9781248 Jul 25 15:44control01.ctl

-rw-r-----1 oracle oinstall 363077632 Jul 25 15:27 example01.dbf

-rw-r-----1 oracle oinstall 52429312 Jul 25 15:44redo01.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 15:27redo02.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 15:27redo03.log

-rw-r-----1 oracle oinstall 31465472 Jul 25 15:27rman01.dbf

-rw-r-----1 oracle oinstall 671096832 Jul 25 15:44 sysaux01.dbf

-rw-r-----1 oracle oinstall 796925952 Jul 25 15:44 system01.dbf

-rw-r-----1 oracle oinstall 30416896 Jul 25 15:27temp01.dbf

-rw-r-----1 oracle oinstall 110108672 Jul 25 15:44 undotbs01.dbf


清除databuffer cache的记录

SYS@seiang11g>alter system flushbuffer_cache;

Systemaltered.


SYS@seiang11g>select * fromscott.wjq1;

select* from scott.wjq1

*

ERRORat line 1:

ORA-01116:error in opening database file 4

ORA-01110:data file 4: '/u01/app/oracle/oradata/OraDB11g/users01.dbf'

ORA-27041:unable to open file

Linux-x86_64Error: 2: No such file or directory

Additionalinformation: 3


SYS@seiang11g>select * fromscott.wjq2;

select* from scott.wjq2

*

ERRORat line 1:

ORA-01116:error in opening database file 7

ORA-01110:data file 7: '/u01/app/oracle/oradata/OraDB11g/seiang01.dbf'

ORA-27041:unable to open file

Linux-x86_64Error: 2: No such file or directory

Additionalinformation: 3


还原介质,将users和seiang对应的数据文件还原

SYS@seiang11g>host cp /u01/app/oracle/backup_Temp/users01.dbf/u01/app/oracle/oradata/OraDB11g

SYS@seiang11g>host cp/u01/app/oracle/backup_Temp/seiang01.dbf /u01/app/oracle/oradata/OraDB11g

SYS@seiang11g>host ls -l/u01/app/oracle/oradata/OraDB11g

total2123612

-rw-r-----1 oracle oinstall 9781248 Jul 25 15:51control01.ctl

-rw-r-----1 oracle oinstall 363077632 Jul 25 15:27 example01.dbf

-rw-r-----1 oracle oinstall 52429312 Jul 25 15:51redo01.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 15:27redo02.log

-rw-r-----1 oracle oinstall 52429312 Jul 25 15:27redo03.log

-rw-r-----1 oracle oinstall 31465472 Jul 25 15:27rman01.dbf

-rw-r-----1 oracle oinstall 20979712 Jul 25 15:51seiang01.dbf

-rw-r-----1 oracle oinstall 671096832 Jul 25 15:48 sysaux01.dbf

-rw-r-----1 oracle oinstall 796925952 Jul 25 15:48 system01.dbf

-rw-r-----1 oracle oinstall 30416896 Jul 25 15:27temp01.dbf

-rw-r-----1 oracle oinstall 110108672 Jul 25 15:48 undotbs01.dbf

-rw-r-----1 oracle oinstall 5251072 Jul 25 15:51users01.dbf


offline这两个数据文件

SYS@seiang11g>alter databasedatafile 4 offline;

Databasealtered.


SYS@seiang11g>alter databasedatafile 7 offline;

Databasealtered.


SYS@seiang11g>selectfile_id,file_name,online_status from dba_data_files;


FILE_ID FILE_NAME ONLINE_

------------------------------------------------------------ -------

4/u01/app/oracle/oradata/OraDB11g/users01.dbf RECOVER

3/u01/app/oracle/oradata/OraDB11g/undotbs01.dbf ONLINE

2 /u01/app/oracle/oradata/OraDB11g/sysaux01.dbf ONLINE

1/u01/app/oracle/oradata/OraDB11g/system01.dbf SYSTEM

5/u01/app/oracle/oradata/OraDB11g/example01.dbf ONLINE

6/u01/app/oracle/oradata/OraDB11g/rman01.dbf ONLINE

7 /u01/app/oracle/oradata/OraDB11g/seiang01.dbf RECOVER


恢复这两个数据文件

SYS@seiang11g>recover datafile4,7;

Mediarecovery complete.

SYS@seiang11g>selectfile_id,file_name,online_status from dba_data_files;


FILE_ID FILE_NAME ONLINE_

------------------------------------------------------------ -------

4/u01/app/oracle/oradata/OraDB11g/users01.dbf OFFLINE

3/u01/app/oracle/oradata/OraDB11g/undotbs01.dbf ONLINE

2/u01/app/oracle/oradata/OraDB11g/sysaux01.dbf ONLINE

1/u01/app/oracle/oradata/OraDB11g/system01.dbf SYSTEM

5/u01/app/oracle/oradata/OraDB11g/example01.dbf ONLINE

6/u01/app/oracle/oradata/OraDB11g/rman01.dbf ONLINE

7/u01/app/oracle/oradata/OraDB11g/seiang01.dbf OFFLINE


online这两个数据文件

SYS@seiang11g>alter databasedatafile 4 online;

Databasealtered.


SYS@seiang11g>alter databasedatafile 7 online;

Databasealtered.


SYS@seiang11g>selectfile_id,file_name,online_status from dba_data_files;


FILE_ID FILE_NAMEONLINE_

------------------------------------------------------------ -------

4 /u01/app/oracle/oradata/OraDB11g/users01.dbf ONLINE

3/u01/app/oracle/oradata/OraDB11g/undotbs01.dbf ONLINE

2/u01/app/oracle/oradata/OraDB11g/sysaux01.dbf ONLINE

1/u01/app/oracle/oradata/OraDB11g/system01.dbf SYSTEM

5 /u01/app/oracle/oradata/OraDB11g/example01.dbf ONLINE

6/u01/app/oracle/oradata/OraDB11g/rman01.dbf ONLINE

7/u01/app/oracle/oradata/OraDB11g/seiang01.dbf ONLINE


验证恢复的正确性

SYS@seiang11g>select * from scott.wjq1;


ID

----------

111

222


SYS@seiang11g>select * fromscott.wjq2;


NAME

----------

wjq100

seiang200



相关链接:
Oracle手工不完全恢复(一):使用当前控制文件

作者:SEian.G(苦练七十二变,笑对八十一难)

ITPUB:http://blog.itpub.net/31015730/

51CTO:http://seiang.blog.51cto.com/