一、控制文件(Control File):保存有关数据库的结构信息!
控制文件是一个小型的二进制文件,可以记录数据库的物理结构。包括:
* 数据库名称
* 数据文件和日志文件的名称和位置
* 数据库创建的时标
* 当前日志的序号
* 检验点信息
一般Oracle数据库创建时都会创建至少两个或两个以上的控制文件。
二、控制文件的标准
1、控制文件的文件名
由control_files参数来指定控制文件名。
若没有指定该参数,则生成默认文件名,默认文件名在各个操作系统中各不相同
2、控制文件的复用
一般不同的控制文件都存放在不同的磁盘,当某个磁盘损坏时可以通过在其他磁盘上的控制文件进行复用,不需要任何的介质恢复。
* 找到control_files参数列出所有文件名,将相应内容写入所有控制文件
* control_files中列出的第一个文件是Oracle数据库运行期间唯一可以读取的文件
* 数据库运行期间,任何控制文件变为不可用,则实例不能继续运行
3、备份控制文件
进行以下数据库物理结构改变之后,需要备份控制文件
* 添加、取消或重命名数据文件
* 添加或撤销表空间,或更改表空间读写状态
* 添加或取消重做日志文件
4、控制文件大小管理
MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES参数控制
三、创建控制文件
1、创建初始化控制文件
control_files = (/u01/oracle/prod/control01.ctl,
/u02/oracle/prod/control02.ctl,
/u03/oracle/prod/control03.ctl)
注:若已经存在与指定名同名的文件,则在create database语句中指定controlfile reuse子句。而且新控制文件与原先控制文件的size必须相同。
2、创建额外副本、重命名和重定位控制文件
① 关闭数据库
② 在操作系统中复制、修改原控制文件
③ 修改control_files,添加或修改新的控制文件名
④ 重新启动数据库
3、创建新的控制文件
以下情况可能会需要重新创建新的控制文件:
* 数据库所有控制文件都收到永久性损坏,且无任何备份
* 希望修改数据库参数的永久性设置,例如:SID、MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES等参数
4、创建语句示例
create controlfile
set databse april
LOGFILE GROUP 1 ('/export/home/oracle/oradata/april/redo01_01.log',
'/export/home/oracle/oradata/april/redo01_02.log'),
GROUP 2 ('/export/home/oracle/oradata/april/redo02_01.log',
'/export/home/oracle/oradata/april/redo02_02.log'),
GROUP 3 ('/export/home/oracle/oradata/april/redo03_01.log',
'/export/home/oracle/oradata/april/redo03_02.log')
noresetlogs
datafile '/export/home/oracle/oradata/april/system01.dbf' size 3M,
'/export/home/oracle/oradata/april/rbs01.dbf' SIZE 5M,
'/export/home/oracle/oradata/april/users01.dbf' SIZE 5M,
'/export/home/oracle/oradata/april/temp01.dbf' SIZE 5M
MAXLOGFILES 50
MAXLOGMEMBERS 3
MAXDATAFILES 200
MAXINSTANCES 6
ARCHIVELOG;
注:create controlfile 语句可能会损坏数据文件和联机重做日志文件,省略文件名会引起文件中数据的丢失,或失去访问完整数据库的能力,所以在使用这条语句时需要特别小心。
5、创建步骤(严格遵守)
① 制作包括数据库所有数据文件和联机重做日志文件的列表,可以使用以下SQL列出清单
select member from v$logfile; --日志文件
select name from v$datafile; -- 数据文件
select value from v$parameter where name = 'control_files' ; -- 控制文件
② 关闭数据库(immediate、abort)
③ 备份数据库的所有数据文件和联机重做日志文件
④ 启动一个新的实例,但不要装载和打开数据库(nomount)
⑤ 使用create controlfile语句创建一个新的控制文件
注:若重命名数据库,或联机重做日志文件丢失,可使用resetlogs子句
⑥ 在离线存储设备上存储新的控制