控制文件记录了整个数据库的物理结构,其次通过控制文件保证数据库的一致性。控制文件就像人体大脑的存储体,如果数据库没有了控制文件,虽然数据还在,但是无法访问了。

 

Oracle数据库可以创建多个数据文件,当往控制文件里面写入内容的时候同时会更新这几个控制文件,所以每个控制文件记录的内容是一致的,所以当一个控制文件损坏了可以通过另外一个控制文件恢复,通过拷贝的方式。所以控制文件多元化对于数据库来说非常重要。

 

Spfile当中控制文件的多元化

 

SQL> show parameter spfile;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/app/oracle/product/11.2.0
/db_1/dbs/spfileoradb.ora


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


[root@Database2 ~]# mkdir -p /disk3/oradata/oradb
[root@Database2 ~]# chown -R oracle:dba /disk3

SQL> alter system set control_files='/u01/app/oracle/oradata/oradb/control01.ctl','/disk2/oradata/oradb/control02.ctl','/disk3/oradata/oradb/control03.ctl' scope=spfile;


SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.


[oracle@Database2 ~]$ cp /disk2/oradata/oradb/control02.ctl /disk3/oradata/oradb/control03.ctl

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/
/disk3/or
adata/oradb/control03.ctl


SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/oradb/control01.ctl
/disk2/oradata/oradb/control02.ctl
/disk3/oradata/oradb/control03.ctl