转: https://blog.csdn.net/killvoon/article/details/46913183
-----------------------2015-07-16---------------------------------------------
发现记忆力确实不如以前了,一些东西总是记不住,不出三天便忘得一干二净。
关于alter database datafile offline和alter database datafile offline drop
之前遇到了几次,也专门看了下,不久又忘了啥区别。
只好专门列个文档,再次记录一番:
对于归档模式:
alter database datafile 'file_name' offline 和 offline drop 没有什么区别。
对于非归档模式:
如果是非归档模式,只能是offline drop.
如果对于非归档模式下,进行offline将会报错:
SQL> alter database datafile 'c:\test.dbf' offline;
alter database datafile 'c:\test.dbf' offline
*
第 1 行出现错误:
ORA-01145: 除非启用了介质恢复, 否则不允许立即脱机
SQL> alter database datafile 'c:\test.dbf' offline drop;
数据库已更改。
SQL>
----查看下数据文件的状态
SQL> select file#,status from v$datafile;
FILE# STATUS
---------- -------
1 SYSTEM
2 ONLINE
3 ONLINE
4 ONLINE
5 ONLINE
6 RECOVER
已选择6行。
文件6就是我刚刚offline drop的数据文件,现在状态是recover,说明我online之前需要进行恢复么?
实验来说明:
SQL> alter database datafile 6 online;
alter database datafile 6 online
*
第 1 行出现错误:
ORA-01113: 文件 6 需要介质恢复
ORA-01110: 数据文件 6: 'C:\TEST.DBF'
果然需要先进行恢复:
SQL> recover datafile 6;
完成介质恢复。
SQL> alter database datafile 6 online;
数据库已更改。
这样看是不是很完美,那么问题来了,现在之所以能够恢复过来是因为当前的redo log仍然存在,如果redo log切换后且木有归档日志存在,
那么这个数据文件则无法online
-----------------------------------------------------
再次实验:
---查看当前日志文件:日志组3
SQL> select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 INACTIVE
2 INACTIVE
3 CURRENT
----再次offline 然后再切换日志,接着进行recover操作
SQL> alter database datafile 6 offline drop;
数据库已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL>
---切换了三次日志后,再次进行介质恢复:
SQL> recover datafile 6;
ORA-00279: 更改 1294577 (在 07/16/2015 15:31:12 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ARCHIVE\ARC00078_0880122604.001
ORA-00280: 更改 1294577 (用于线程 1) 在序列 #78 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
--看看,完蛋了吧,对于这种没有归档日志的情况,只能靠之前的冷备份来解决了,数据将面临丢失。
---------------------------------------------------------------------------------------------------
下面来看下在归档模式下,offline和offline drop的区别
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 585879552 bytes
Fixed Size 1348844 bytes
Variable Size 218106644 bytes
Database Buffers 360710144 bytes
Redo Buffers 5713920 bytes
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL>
----创建个表空间
SQL> create tablespace test datafile 'c:\test.dbf' size 2m;
表空间已创建。
---offline
SQL> alter database datafile 6 offline;
数据库已更改。
SQL> select file#,status from v$datafile;
FILE# STATUS
---------- -------
1 SYSTEM
2 ONLINE
3 ONLINE
4 ONLINE
5 ONLINE
6 RECOVER
已选择6行。
SQL> recover datafile 6;
完成介质恢复。
SQL> alter database datafile 6 online;
数据库已更改。
---offline drop
SQL> alter database datafile 6 offline drop;
数据库已更改。
SQL> select file#,status from v$datafile;
FILE# STATUS
---------- -------
1 SYSTEM
2 ONLINE
3 ONLINE
4 ONLINE
5 ONLINE
6 RECOVER
已选择6行。
SQL> recover datafile 6;
完成介质恢复。
SQL> alter database datafile 6 online;
数据库已更改。
----------------------------------------------------------------------------------------------------------------------------------------------
可以看出,在归档模式下面,offline和offline drop是没啥区别的,在offline后都需要进行recover才能online。
----------------------------------------------------------------------------------------------------------------------------------------------
---测试下offline后,多次切换归档日志,看看recover命令是否能够自动读取归档日志?
SQL> alter database datafile 6 offline;
数据库已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
----日志切换三次后,进行recover
SQL> recover datafile 6;
ORA-00279: 更改 1295761 (在 07/16/2015 15:44:40 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ARCHIVE\ARC00081_0880122604.001
ORA-00280: 更改 1295761 (用于线程 1) 在序列 #81 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
已应用的日志。
完成介质恢复。
SQL>
SQL> alter database datafile 6 online;
数据库已更改。
oracle还是可以自动找到归档日志进行recover。
---------------------
作者:killvoon
来源:CSDN
原文:https://blog.csdn.net/killvoon/article/details/46913183
版权声明:本文为博主原创文章,转载请附上博文链接!