本文主要介绍Oracle中控制文件,目录如下:
1. 控制文件存放了哪些信息?
2. 控制文件的存放位置是什么?
3. Oracle什么时候读取控制文件?
4. 控制文件这么重要,能不能增加一个以防万一?
例如,查看数据库的信息:
sql> select name,open_mode,created,current_scn from v$database;
NAME OPEN_MODE CREATED CURRENT_SCN
--------- -------------------- --------- -----------
ORCL READ WRITE 12-FEB-18 1651963
[oracle@node01 dbs]$ grep -ia "control" $ORACLE_HOME/dbs/spfileorcl.ora
*.control_files='/home/oracle/app/oracle/oradata/orcl/control01.ctl','/home/oracle/app/oracle/oradata/orcl/control02.ctl'
还可以在sqlplus里通过show parameter control_files查看
sql> show parameter control_files
NAME TYPE VALUE
------------------------------------ ----------- ---------------
control_files string /home/oracle/app/oracle/oradat
a/orcl/control01.ctl,/home/or
acle/app/oracle/oradata/orcl/c
ontrol02.ctl
sql>
startup nomount -> 这个阶段会打开并读取配置文件,从配置文件中获取控制文件的位置信息
alter database mount -> 这个阶段会打开并读取控制文件,从控制文件中获取数据文件和联机重做日志文件的位置信息
alter database open -> 这个阶段会打开数据文件和联机重做日志文件
NAME TYPE VALUE
-------- ----------- ------------------------------
spfile string /home/oracle/app/oracle/product/
12.2.0/dbhome_1/dbs/spfileorcl.ora
System altered.
sql> show parameter control_files NAME TYPE VALUE --------------------- ----------- ------------------------------ control_files string /home/oracle/app/oracle/oradat a/orcl/control01.ctl,/home/or acle/app/oracle/oradata/orcl/c ontrol02.ctl,/home/oracle/app /oracle/oradata/orcl/control03 .ctl 参考资料: 《深入理解Oracle 12c数据库管理》
1. 控制文件存放了哪些信息?
2. 控制文件的存放位置是什么?
3. Oracle什么时候读取控制文件?
4. 控制文件这么重要,能不能增加一个以防万一?
1. 控制文件存放了哪些信息?
数据库的名称、数据文件的名称和位置、联机重做日志的名称和位置、当前联机重做日志的序列号、检查点、RMAN备份文件的名称和位置例如,查看数据库的信息:
sql> select name,open_mode,created,current_scn from v$database;
NAME OPEN_MODE CREATED CURRENT_SCN
--------- -------------------- --------- -----------
ORCL READ WRITE 12-FEB-18 1651963
2. 控制文件的存放位置是什么?
第一种方法就是grep命令查找spfile[oracle@node01 dbs]$ grep -ia "control" $ORACLE_HOME/dbs/spfileorcl.ora
*.control_files='/home/oracle/app/oracle/oradata/orcl/control01.ctl','/home/oracle/app/oracle/oradata/orcl/control02.ctl'
还可以在sqlplus里通过show parameter control_files查看
sql> show parameter control_files
NAME TYPE VALUE
------------------------------------ ----------- ---------------
control_files string /home/oracle/app/oracle/oradat
a/orcl/control01.ctl,/home/or
acle/app/oracle/oradata/orcl/c
ontrol02.ctl
sql>
3. Oracle什么时候读取控制文件?
数据库启动的三个阶段:startup nomount -> 这个阶段会打开并读取配置文件,从配置文件中获取控制文件的位置信息
alter database mount -> 这个阶段会打开并读取控制文件,从控制文件中获取数据文件和联机重做日志文件的位置信息
alter database open -> 这个阶段会打开数据文件和联机重做日志文件
4. 控制文件这么重要,能不能增加一个以防万一?
可以,目前看到上面有2个,我再增加一个,名子为 /home/oracle/app/oracle/oradata/orcl/control03.ctl,步骤如下:4.1 确认在使用spfile
sql> show parameter spfileNAME TYPE VALUE
-------- ----------- ------------------------------
spfile string /home/oracle/app/oracle/product/
12.2.0/dbhome_1/dbs/spfileorcl.ora
4.2 修改control_files参数
sql> alter system set control_files='/home/oracle/app/oracle/oradata/orcl/control01.ctl',
'/home/oracle/app/oracle/oradata/orcl/control02.ctl',
'/home/oracle/app/oracle/oradata/orcl/control03.ctl' scope=spfile;
System altered.
4.3 关闭数据库
sql> shutdown immediate4.4 复制控制文件(OS命令)
[oracle@node01 ~]$ cp /home/oracle/app/oracle/oradata/orcl/control01.ctl /home/oracle/app/oracle/oradata/orcl/control03.ctl
4.5 启动数据并验证
sql> startupsql> show parameter control_files NAME TYPE VALUE --------------------- ----------- ------------------------------ control_files string /home/oracle/app/oracle/oradat a/orcl/control01.ctl,/home/or acle/app/oracle/oradata/orcl/c ontrol02.ctl,/home/oracle/app /oracle/oradata/orcl/control03 .ctl 参考资料: 《深入理解Oracle 12c数据库管理》