分类: Oracle
2008-05-19 15:46:04
丢失了一个或更多的专用文件
专用文件包括:控制文件、在线重做日志、归档重做日志和数据文件。我们假设你有多个控制文件,在初始化参数文件中标识出来了(本文我将使用pfile以便于快速编辑),你已经阅读了很多次:如果你丢失了一个控制文件,恢复或修复一个好的控制文件拷贝到错误文件的位置,或者从参数文件中移除涉及的文件,在一个控制文件丢失后(无论什么原因),对数据库有什么影响呢?
1、操作仍然可以继续,有其他的控制文件“在线”意味着你可以承受一个或更多控制文件的丢失。
2、你(DBA)不得不关闭系统,恢复文件(或从init.ora文件中移除)并重新启动。
3、Oracle关闭实例(如你不能控制,无论你想不想它都会发生)。
我问这个的原因是:控制文件之间以及在线重做日志多路复用之间有什么不同?例如:如果一个活动组的成员丢失了数据库(或实例)将发生什么?Oracle继续保持运转还是停止运转?在下面的实验中,我将control01.ctl文件放在闪存盘里,然后将闪存盘从USB端口拔出来模拟介质失效。
当前控制文件清单 |
*.control_files='D:\oracle\product\ 'D:\oracle\product\ 'D:\oracle\product\ |
新的控制文件清单 |
*.control_files='D:\oracle\product\ 'D:\oracle\product\ 'F:\oracle\control03.ctl' |
确认新的控制文件:
SQL> startup
ORACLE instance started.
Total System Global Area 289406976 bytes
Fixed Size 1290184 bytes
Variable Size 104857656 bytes
Database Buffers 176160768 bytes
Redo Buffers 7098368 bytes
Database mounted.
Database opened.
SQL> col name for a52
SQL> select name from v$controlfile;
NAME
----------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\DB10\CONTROL01.CTL
D:\ORACLE\PRODUCT\10.2.0\ORADATA\DB10\CONTROL02.CTL
F:\ORACLE\CONTROL03.CTL
现在已经准备好断开闪存盘的连接,没有直接的警告(用户界面没有任何提示信息,直到尝试一个操作时),实例崩溃了。
SQL> select name from v$controlfile;
select name from v$controlfile
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel