1、查看现有数据库文件

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
+DATA/rac/datafile/system.259.866566403
+DATA/rac/datafile/undotbs1.260.866566407
+DATA/rac/datafile/sysaux.261.866566407
+DATA/rac/datafile/undotbs2.263.866566409
+DATA/rac/datafile/users.264.866566409

2、做一个完全备份

RMAN> backup as copy database ;

 

3、创建表空间

SQL> create tablespace zxm datafile size 2m;

Tablespace created.
SQL> create tablespace user01 datafile '+DATA' size 1M;

Tablespace created.
SQL> alter tablespace user01 add datafile size 1m;

Tablespace altered.

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
+DATA/rac/datafile/system.259.866566403
+DATA/rac/datafile/undotbs1.260.866566407
+DATA/rac/datafile/sysaux.261.866566407
+DATA/rac/datafile/undotbs2.263.866566409
+DATA/rac/datafile/users.264.866566409
+DATA/rac/datafile/zxm.287.866732569
+DATA/rac/datafile/user01.284.866732649
+DATA/rac/datafile/user01.288.866732733

8 rows selected.

4、创建示例数据

SQL> create table test as select * from user_tables;

Table created.

SQL> create table test2 as select * from test;

Table created.

SQL> col TABLESPACE_NAME format a30
SQL> col SEGMENT_NAME format a30
SQL> select tablespace_name,segment_name from user_segments;

TABLESPACE_NAME                SEGMENT_NAME
------------------------------ ------------------------------
USER01                         TEST
USER01                         TEST2

5、关闭数据库删除文件,模拟灾难场景

[oracle@rac1 admin]$ srvctl stop database -d rac
[oracle@rac1 admin]$ export ORACLE_SID=+ASM1
[oracle@rac1 admin]$ asmcmd -p
ASMCMD [+] > ls
DATA/
RECV/
ASMCMD [+] > cd DATA
ASMCMD [+DATA] > ls
RAC/
TEST/
ASMCMD [+DATA] > cd RAC
ASMCMD [+DATA/RAC] > ls
ARCHIVELOG/
CONTROLFILE/
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
spfilerac.ora
ASMCMD [+DATA/RAC] > cd DATAFILE
ASMCMD [+DATA/RAC/DATAFILE] > ls
SYSAUX.261.866566407
SYSTEM.259.866566403
TEST.282.866646695
UNDOTBS1.260.866566407
UNDOTBS2.263.866566409
USER01.284.866732649
USER01.288.866732733
USERS.264.866566409
ZXM.287.866732569
ASMCMD [+DATA/RAC/DATAFILE] > rm USER01.284.866732649
ASMCMD [+DATA/RAC/DATAFILE] > rm USER01.288.866732733
ASMCMD [+DATA/RAC/DATAFILE] > rm ZXM.287.866732569
[oracle@rac1 admin]$ export ORACLE_SID=rac1
[oracle@rac1 admin]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Dec 19 15:31:22 2014

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to an idle instance.

SQL> startup;
ORACLE instance started.

Total System Global Area 1610612736 bytes
Fixed Size                  2280840 bytes
Variable Size             416100984 bytes
Database Buffers         1157627904 bytes
Redo Buffers               34603008 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '+DATA/rac/datafile/zxm.287.866732569'

6、recover命令只能在已有的物理文件上进行恢复,所以需要先创建数据文件

SQL> alter database create datafile 6;

Database altered.

SQL> recover datafile 6;             
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 6: '+DATA/rac/datafile/zxm.287.866732569'
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '+DATA/rac/datafile/zxm.287.866732569'
进入目录中看新创建的文件是:ZXM.287.866734565
ASMCMD [+DATA/RAC] > cd DATAFILE
ASMCMD [+DATA/RAC/DATAFILE] > ls
SYSAUX.261.866566407
SYSTEM.259.866566403
TEST.282.866646695
UNDOTBS1.260.866566407
UNDOTBS2.263.866566409
USERS.264.866566409
ZXM.287.866734565

而控制中的文件为:
SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
+DATA/rac/datafile/system.259.866566403
+DATA/rac/datafile/undotbs1.260.866566407
+DATA/rac/datafile/sysaux.261.866566407
+DATA/rac/datafile/undotbs2.263.866566409
+DATA/rac/datafile/users.264.866566409
+DATA/rac/datafile/zxm.287.866732569
+DATA/rac/datafile/user01.284.866732649
+DATA/rac/datafile/user01.288.866732733

8 rows selected.
需要对数据文件进行改名,其实就是修改控制文件
SQL> alter database rename file '+DATA/rac/datafile/zxm.287.866732569' to '+DATA/rac/datafile/ZXM.287.866734565';

Database altered.

再次操作,这次恢复成功了
SQL> recover datafile 6;
Media recovery complete.

7、恢复其他的数据文件

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '+DATA/rac/datafile/user01.284.866732649'
只恢复了一个文件,刚总共删除了3个,那现在重新再将剩下的两个创建了
SQL> alter database create datafile '+DATA/rac/datafile/user01.284.866732649';

Database altered.



SQL> recover datafile 7;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 7: '+DATA/rac/datafile/user01.284.866732649'
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '+DATA/rac/datafile/user01.284.866732649'

进入文件目录查看,发现文件名不是创建的那个
ASMCMD [+DATA/RAC/DATAFILE] > ls
SYSAUX.261.866566407
SYSTEM.259.866566403
TEST.282.866646695
UNDOTBS1.260.866566407
UNDOTBS2.263.866566409
USER01.288.866735415
USERS.264.866566409
ZXM.287.866734565


SQL> alter database rename file '+DATA/rac/datafile/user01.284.866732649' to '+DATA/rac/datafile/USER01.288.866735415';

Database altered.

SQL> recover datafile 7;
Media recovery complete.



SQL> alter database create datafile '+DATA/rac/datafile/user01.288.866732733';

ASMCMD [+DATA/RAC/DATAFILE] > ls
SYSAUX.261.866566407
SYSTEM.259.866566403
TEST.282.866646695
UNDOTBS1.260.866566407
UNDOTBS2.263.866566409
USER01.284.866736519
USER01.288.866735415
USERS.264.866566409
ZXM.287.866734565

SQL> alter database rename file '+DATA/rac/datafile/user01.288.866732733' to '+DATA/rac/datafile/USER01.284.866736519';


SQL> alter database rename file '+DATA/rac/datafile/user01.288.866732733' to '+DATA/rac/datafile/USER01.284.866736519';

Database altered.
SQL> recover datafile 8;
Media recovery complete.

打开数据
SQL> alter database open;

Database altered.

 

posted on 2014-12-20 10:40  充实自己  阅读(346)  评论(0编辑  收藏  举报