您的位置:首页 > 运维架构

使用alter database datafile 'XXX' offline drop 是否能够恢复(非归档模式下)

2012-07-11 16:16 471 查看
今天在群里面听到一位网友在说使用了alterdatabasedatafile'XXX'offlinedrop命令是否能够恢复数据,在非归档模式下,下面是用一个实验来验证一下
SQL>createtablespacetestdatafile'/u01/app/oracle/oradata/orcl/test01.dbf'size10Mautoextendonnext1M;

Tablespacecreated.

SQL>createtabletest(idnumber,namevarchar2(12))tablespacetest;

Tablecreated.

SQL>insertintotestvalues(1,'colin');

1rowcreated.

SQL>insertintotestvalues(2,'janey');

1rowcreated.

SQL>insertintotestvalues(3,'tom');

1rowcreated.

SQL>insertintotestvalues(4,'adele');

1rowcreated.

SQL>commit;

Commitcomplete.

SQL>select*fromtest;

IDNAME
----------------------
1colin
2janey
3tom
4adele

SQL>alterdatabasedatafile'/u01/app/oracle/oradata/orcl/test01.dbf'offlinedrop;

Databasealtered.

SQL>commit;

Commitcomplete.

SQL>select*fromtest;
select*fromtest
*
ERRORatline1:
ORA-00376:file2cannotbereadatthistime
ORA-01110:datafile2:'/u01/app/oracle/oradata/orcl/test01.dbf'

SQL>selectLOG_MODE,OPEN_MODEfromv$database;

LOG_MODEOPEN_MODE
----------------------
NOARCHIVELOGREADWRITE

SQL>alterdatabasedatafile'/u01/app/oracle/oradata/orcl/test01.dbf'online;
alterdatabasedatafile'/u01/app/oracle/oradata/orcl/test01.dbf'online
*
ERRORatline1:
ORA-01113:file2needsmediarecovery
ORA-01110:datafile2:'/u01/app/oracle/oradata/orcl/test01.dbf'

SQL>recoverdatafile'/u01/app/oracle/oradata/orcl/test01.dbf';
Mediarecoverycomplete.
SQL>alterdatabasedatafile'/u01/app/oracle/oradata/orcl/test01.dbf'online;

Databasealtered.

SQL>select*fromtest;

IDNAME
----------------------
1colin
2janey
3tom
4adele

恢复成功。那是因为日志还米有切换,使用了online日志。
切换日志来测试:

SQL>alterdatabasedatafile'/u01/app/oracle/oradata/orcl/test01.dbf'offlinedrop;

Databasealtered.

SQL>select*fromtest;
select*fromtest
*
ERRORatline1:
ORA-00376:file2cannotbereadatthistime
ORA-01110:datafile2:'/u01/app/oracle/oradata/orcl/test01.dbf'

SQL>altersystemswitchlogfile;

Systemaltered.

SQL>/

Systemaltered.

SQL>/
/

Systemaltered.

SQL>
Systemaltered.

SQL>recoverdatafile'/u01/app/oracle/oradata/orcl/test01.dbf';
ORA-00279:change654004generatedat07/09/201221:07:18neededforthread1
ORA-00289:suggestion:/u01/app/oracle/arch/1_32_777559117.arc
ORA-00280:change654004forthread1isinsequence#32

Specifylog:{<RET>=suggested|filename|AUTO|CANCEL}
cancel
Mediarecoverycancelled.
SQL>/

Systemaltered.

SQL>recoverdatafile'/u01/app/oracle/oradata/orcl/test01.dbf';
ORA-00279:change654004generatedat07/09/201221:07:18neededforthread1
ORA-00289:suggestion:/u01/app/oracle/arch/1_32_777559117.arc
ORA-00280:change654004forthread1isinsequence#32

Specifylog:{<RET>=suggested|filename|AUTO|CANCEL}
auto
ORA-00308:cannotopenarchivedlog'/u01/app/oracle/arch/1_32_777559117.arc'
ORA-27037:unabletoobtainfilestatus
LinuxError:2:Nosuchfileordirectory
Additionalinformation:3

ORA-00308:cannotopenarchivedlog'/u01/app/oracle/arch/1_32_777559117.arc'
ORA-27037:unabletoobtainfilestatus
LinuxError:2:Nosuchfileordirectory
Additionalinformation:3


通过以上测试表明,在非归档模式下使用了alterdatabasedatafile'XXX'offlinedrop命令是不能被恢复的,虽然我上面的第一次实验成功了,那是因为online日志还没有切换,在日志中还能够找到相应的反操作。在第二个实验中,手工切换日志,会提示不能打开归档日志,因为我根本就没有归档,肯定找不到啊,所以不能够恢复的。切记,在非归档模型下不要随意使用一些drop命令,在实际生产环境中日志的切换是很频繁且快的,否则只有掏钱找oracle了。当然,如果在业务不繁忙的系统可以及时的通过online日志进行恢复,这种几率比较小。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐