控制文件的多元化
(1)控制文件记录了整个数据库的物理结构
(2)通过控制文件所记录的检查点来保证数据库的一致性
所以控制文件对整个oracle来说是非常重要的,如果在建库的时候只创建了一个控制文件,那么就需要控制文件的多元化来保证数据库的高可用性。
如果实例是通过pfile启动,先将实例关闭,然后修改pfile里面控制文件的路径,然后通过旧的控制文件去复制新控制文件,复制后新的控制文件和旧的控制文件里面内容都是一样的,最后启动实例。(对控制文件多元化的时候要保证所有的控制文件不要在同一个存储上,如果放在同一个存储上多元化就没有意义了)。
SQL> show parameter spfile; --可以看到数据库启动是使用了pfile文件启动的
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> show parameter control; --可以看到当前数据库只有一个控制文件
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string /u01/app/oracle/oradata/oradb/
control01.ctl
[root@Database2 ~]# mkdir -p /disk2/oradata/oradb --模拟出一块盘来存储控制文件
[root@Database2 ~]# chown -R oracle:dba /disk2/
SQL> shutdown immediate; --将数据库关闭
Database closed.
Database dismounted.
ORACLE instance shut down.
[oracle@Database2 oradb]$ cd $ORACLE_HOME/dbs
[oracle@Database2 dbs]$ ls
hc_oradb.dat init.ora initoradba.ora initoradb.ora lkORADB orapworadb
[oracle@Database2 dbs]$ vi initoradb.ora --修改pfile文件里面控制文件的路径
control_files='/u01/app/oracle/oradata/oradb/control01.ctl','/disk2/oradata/oradb/control02.ctl'
[oracle@Database2 dbs]$ cp /u01/app/oracle/oradata/oradb/control01.ctl /disk2/oradata/oradb/control02.ctl --控制文件多元化,创建新的控制文件
SQL> startup;
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2260088 bytes
Variable Size 671089544 bytes
Database Buffers 390070272 bytes
Redo Buffers 5517312 bytes
Database mounted.
Database opened.
SQL> show parameter control; --可以看到控制文件多元化成功
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string /u01/app/oracle/oradata/oradb/
control01.ctl, /disk2/oradata/
oradb/control02.ctl
一般情况下,三个控制文件就足够了,如果控制文件比较多,在往控制文件里面写入内容的时候生成检查点,或者日志切换,数据库结构发生变化,生成归档都得对控制文件产生I/O。关键还是将控制文件放在不同的存储上。
最后模拟一下控制文件的损坏
[oracle@Database2 dbs]$ vi /disk2/oradata/oradb/control02.ctl
SQL> startup force;
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2260088 bytes
Variable Size 671089544 bytes
Database Buffers 390070272 bytes
Redo Buffers 5517312 bytes
ORA-00205: error in identifying control file, check alert log for more info
这个报错查看数据库的后台日志
[oracle@Database2 trace]$ tail -30f alert_oradb.log
ORACLE_BASE from environment = /u01/app/oracle
Thu May 24 10:59:16 2018
ALTER DATABASE MOUNT
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/disk2/oradata/oradb/control02.ctl'
ORA-27046: file size is not a multiple of logical block size
Additional information: 1
ORA-205 signalled during: ALTER DATABASE MOUNT...
Thu May 24 10:59:16 2018
Checker run found 1 new persistent data failures
解决办法还是使用上面复制新的控制文件,如果数据库启动办不到mount状态下,查看数据库后台日志定位原因。