每一个数据库应该至少有两份控制文件,并且存放在不同的磁盘上。当发现其中的一个控制文件所在
的磁盘出现故障的时候或者其中的一份控制文件不可用应该马上shutdown abort实例。
我先把我的数据库中的一个控制文件mv到其他位置。再执行下面的命令。
SQL> shutdown immediate
Database closed.
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/opt/oracle11g/oradata/oracl/control01.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
SQL> shutdown abort
ORACLE instance shut down.
SQL> shutdown abort
ORACLE instance shut down.
关闭实例后尝试打开数据库失败。
SQL> startup
ORACLE instance started.
Total System Global Area 418484224 bytes
Fixed Size 1336932 bytes
Variable Size 222300572 bytes
Database Buffers 188743680 bytes
Redo Buffers 6103040 bytes
ORA-00205: error in identifying control file, check alert log for more info
出现上面的错误的原因是实例根据control_files初始化参数找不到与初始化参数规定的一致的
控制文件。此时数据库将不能够被open。我在把缺失的控制文件mv回去。使用下面的命令打开数据库。
SQL> alter database mount;
Database altered.
SQL> alter database open;
Database altered.
oracle对多个控制文件的维护:
1、oracle将会把数据文件信息,重做日志信息等写入control_files指定的所有的控制文件中。
保证多份控制文件的一致性。
2、在数据库运行期间只会读control_files指定的数据文件中的第一个。因为多份控制文件都是一致的。
3、如果任何一个数据文件不可用,实例将不能操作应该shutdown abort。
维护控制文件的多个副本的意义就在于,如果其中一个损坏或者丢失,可以通过其他的副本来还原回来。
并且这些副本应该分布在不同的磁盘上,提高可用性。