实验环境:red hat 5.8

oracle环境:11.2.0.3

实验情况:新建的表空间,来不及备份,就已经损坏的情况下。

新建的表空间,没有备份,无法转储,只能重建数据文件

1、查看一下现有的数据文件位置。


sys@TEST0910> select file#,name from v$datafile;


     FILE# NAME


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


         1 /u01/app/oracle/oradata/test0910/system01.dbf


         2 /u01/app/oracle/oradata/test0910/sysaux01.dbf


         3 /u01/app/oracle/oradata/test0910/undotbs01.dbf


         4 /u01/app/oracle/oradata/test0910/users01.dbf


         5 /u01/app/oracle/oradata/test0910/example01.dbf


         6 /u01/app/oracle/oradata/test0910/testtb.dbf


6 rows selected.


 

 

 

2、新建一个表空间和一个数据表。


sys@TEST0910> create tablespace lxtbs datafile '/u01/app/oracle/oradata/test0910/lxtb01.dbf' size 20m;


Tablespace created.


在新建的表空间中新建一个表。


sys@TEST0910> create table scott.lxtb tablespace lxtbs as select * from scott.emp;


Table created.


 

 

3、插入三次数据,分别为提交归档,提交不归档,不提交不归档。

1.提交归档


sys@TEST0910> insert into scott.lxtb select * from scott.emp;


14 rows created.


sys@TEST0910> commit;


Commit complete.


sys@TEST0910> alter system archive log current;


System altered.


sys@TEST0910> select count(*) from scott.lxtb;


  COUNT(*)


----------


        28


 

2.提交不归档


sys@TEST0910> insert into scott.lxtb select * from scott.emp;


14 rows created.


sys@TEST0910>  commit;


Commit complete.


sys@TEST0910> select count(*) from scott.lxtb;


  COUNT(*)


----------


        42


 

3.不提交,不归档


sys@TEST0910> insert into scott.lxtb select * from scott.emp;


14 rows created.


sys@TEST0910> select count(*) from scott.lxtb;


  COUNT(*)


----------


        56


 

 

4、模拟断电。


sys@TEST0910> shutdown abort;


ORACLE instance shut down.


 

 

5、删除新建的表空间上的数据文件


[oracle@rtest ~]$ rm /u01/app/oracle/oradata/test0910/lxtb01.dbf


[oracle@rtest ~]$ ls /u01/app/oracle/oradata/test0910/lxtb01.dbf


ls: /u01/app/oracle/oradata/test0910/lxtb01.dbf: No such file or directory


 

 

 

6、起库,报错,查询损坏的数据文件



sys@TEST0910> startup


ORACLE instance started.


Total System Global Area 2505338880 bytes


Fixed Size                  2230952 bytes


Variable Size             587203928 bytes


Database Buffers         1895825408 bytes


Redo Buffers               20078592 bytes


Database mounted.


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


ORA-01110: data file 7: '/u01/app/oracle/oradata/test0910/lxtb01.dbf'


查询哪个是坏的,这个数据文件没有备份。



sys@TEST0910> select file#,error from v$recover_file;


     FILE# ERROR


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


         7 FILE NOT FOUND


 

 

7、可先使用高可用模式先开库



sys@TEST0910> alter database datafile 7 offline;


Database altered.


sys@TEST0910> alter database open;


Database altered.


 

8、利用日志文件来恢复数据文件


新建一个空白的文件,用日志来恢复。这个就相当于转储。



sys@TEST0910> alter database create datafile '/u01/app/oracle/oradata/test0910/lxtb01.dbf';


Database altered.



sys@TEST0910> alter database datafile 7 online;


Database altered.



sys@TEST0910> select count(*) from scott.lxtb;


  COUNT(*)


----------


        42