控制文件及其创建
一、控制文件
控制文件是一个小型的二进制文件,可以记录数据库的物理结构。包括:
* 数据库名称
* 数据文件和联机重做日志文件的名称和位置
* 数据库创建的时标
* 当前日志的序号
* 检验点信息
一般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 DATABASE prod
LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log',
'/u01/oracle/prod/redo01_02.log'),
GROUP 2 ('/u01/oracle/prod/redo02_01.log',
'/u01/oracle/prod/redo02_02.log'),
GROUP 3 ('/u01/oracle/prod/redo03_01.log',
'/u01/oracle/prod/redo03_02.log')
NORESETLOGS
DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
'/u01/oracle/prod/rbs01.dbf' SIZE 5M,
'/u01/oracle/prod/users01.dbf' SIZE 5M,
'/u01/oracle/prod/temp01.dbf' SIZE 5M
MAXLOGFILES 50
MAXLOGMEMBERS 3
MAXDATAFILES 200
MAXINSTANCES 6
ARCHIVELOG;
注:CREATE CONTROLFILE 语句可能会损坏数据文件和联机重做日志文件,省略文件名会引起文件中数据的丢失,或失去访问完整数据库的能力,所以在使用这条语句时需要特别小心。
5、创建步骤(严格遵守)
① 制作包括数据库所有数据文件和联机重做日志文件的列表,可以使用以下SQL列出清单
selectmemberfrom v$logfile; --联机重做日志文件
select name from v$datafile; -- 数据文件
select value from v$parameter where name = 'control_files' ; -- 控制文件
② 关闭数据库(IMMEDIATE、ABORT)
③ 备份数据库的所有数据文件和联机重做日志文件
④ 启动一个新的实例,但不要装载和打开数据库(NOMOUNT)
⑤ 使用CREATE CONTROLFILE语句创建一个新的控制文件
注:若重命名数据库,或联机重做日志文件丢失,可使用RESETLOGS子句
⑥ 在离线存储设备上存储新的控制文件备份
⑦ 编辑CONTROL_FILES初始化参数,若重命名数据库,则编辑DB_NAME参数
⑧ 进行数据库恢复(如果需要的话
)
注:若指定RESETLOGS,则需要加入USING BACKUP CONTROL FILE来恢复数据库
⑨ 打开数据库(ALTER DATABASE OPEN;)
-The End-