Oracle控制文件管理
每一个Oracle数据库都有一个二进制文件记录着数据库的物理结构,包括如下信息。
1.数据库名称
2.相关数据文件和redo log文件的名称和位置。
3.数据库创建的时间
4.当前日志序列号(current log sequence number)
5.检查点信息
控制文件的名称
在数据库参数化参数文件中CONTROL_FILES记录文件的名称。
控制文件的多路径
每一个数据库至少有一个控制文件,并且存放在不同的磁盘。
1.数据库将向初始化参数文件中参数control_files列表中各个文件写信息。
2.数据库读控制文件只读control_file列表中第一个文件。
什么时候备份控制文件
每次数据库物理结构变化时候必须备份控制文件。
1.添加删除,重命名数据文件。
2.添加删除表空间,修改表空间的读写状态。
3.添加删除重做日志文件或文件组。
控制文件的大小
The size of the control file changes between some releases of Oracle Database, as well as when the number
of files specified in the control file changes. Configuration parameters such as MAXLOGFILES, MAXLOGMEMBERS,
MAXLOGHISTORY, MAXDATAFILES, and MAXINSTANCES affect control file size.
主要的控制因素: 由create database时候的MAXDATAFILES,MAXLOGFILES,MAXLOGMEMBERS,MAXLOGHISTORY,MAXINSTANCES。
手动创建控制文件
步骤:
1.获取数据文件和日志文件列表
select member from v$logfile;
select name from v$datafile;
select value from v$parameter where name='CONTROL_FILES'
2.关闭数据库
3.备份所有的数据文件和重做日志文件。
4.启动一个新实例是指处于nomount状态,但是not mount或者open db。
5.使用create controlfile创建控制文件。
如果redolog丢失,需要resetlogs.
6.存储一个控制文件的备份在离线存储设备上。
7.编辑控制文件的control_files修改文件的位置或者数据库的名称。
8.如果需要备份数据库,如果不需要跳过第九步。
如果创建控制文件使用RESETLOGS子句,你需要使用USING BACKUP CONTROL FILE.
9.打开数据库
A.如果你操作完毕,关闭备份之后的数据库,重新打开
ALTER DATABASE OPEN;
B.如果创建控制文件使用RESETLOGS。
ALTER DATABASE OPEN RESETLOGS;
检查是否缺少或者额外的文件
1.创建数据库控制文件,并打开数据库,要检查alert log文件。
2.如果数据文件在数据字典中存在,但是在控制文件没有,控制文件名称为MISSINGnnn.
备份控制文件:
使用ALTER DATABASE BACKUP CONTROLFILE语句备份控制文件。
1.备份控制文件到二进制文件
ALTER DATABASE BACKUP CONTROLFILE TO '/oracle/backup/control.bkp';
2.生成SQL语句到跟踪文件用于创建控制文件。查看Alert log中现在执行控制文件备份记录的文件名称。
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
使用控制文件的文件拷贝恢复控制文件(数据库无论何时保持控制文件两份)
在控制文件多路径服用中或者其他控制文件缺失或删除控制文件的情况下操作。
1.cp 拷贝文件并修改名称
2.编辑控制文件列表
CONTROL_FILES = (/u01/oracle/prod/control01.ctl,
/u02/oracle/prod/control02.ctl,
/u04/oracle/prod/control03.ctl)
3.启动数据库。
控制文件的数据字典
v$database
v$controlfile
v$controlfile_record_section
v$parameter
查看控制文件列表
select name from v$controlfile;
通过create controlfile 语句创建控制文件
源自官方文档:
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