控制文件
-
控制文件(Control File)
控制文件是一个比较小的二进制文件,记录了物理数据库的当前状态。
每一个控制文件只属于一个数据库。
一个数据库一般至少需要2个(一般是3个)控制文件,这些文件的内容完全一样,最好放在不同的物理磁盘上,而且最好放在不同的物理磁盘控制器上。
如果所有控制文件都出了问题,那么数 据库就需要进行恢复。 -
在数据库装载或打开之前,Oracle服务器必须能够访问控制文件 。
-
当数据库在打开状态下,Oracle服务器会随时修改控制文件的内容。
-
任何用户,包括数据库管理员都不能修改控制文件中的数据。
控制文件的内容
- 控制文件内容包括:
数据库名称和标识符
数据库创建的时间戳
表空间的信息
数据文件和联机重做日志的名字和位置
当前日志的序列号
检查点信息
日志的历史信息
重做日志归档/存档(archive)信息
备份的准确位置和状态
获得控制文件的信息
- v$CONTROLFILE:列出所有与当前实例相关的控制文件的名称和状态。
- v$PARAMETER:列出所有参数的名称、类型和值。
- v$CONTROLFILE_RECORD_SECTION:列出控制文件中记录的相关信息。
- SHOW PARAMETER CONTROL_FILES:列出控制文件的名称和位置。
--查看控制文件的名字和准确位置。
--【方法一】
SELECT name FROM v$controlfile;
--【方法二】
SELECT value FROM v$parameter
WHERE name = 'control_files';
--【方法三】
SHOW PARAMETER control_files
--查看控制文件中的所有数据文件、表空间和重做日志文件所使用的记录情况。
SELECT type, record_size, records_total, records_used
FROM v$controlfile_record_section
WHERE type IN ('DATAFILE', 'TABLESPACE', 'REDO LOG');
-- record_size:每个记录的字节数
records_total:该段所分配的记录个数
Records_used:该段所使用的记录个数
- v$archived_log:包含所有已归档日志的信息。
- v$backup:包含所有联机数据文件的备份状态。
- v$database:包含有关数据库的信息。
- v$datafile:包含所有数据文件的信息。
- v l o g 、 v log、v log、vlogfile、v$loghist:包含有关重做日志文件的信息。
- v$tablespace:包含有关表空间的信息。
- v$tempfile:包含有关临时文件的信息。
限定控制文件的大小
- 控制文件由两部分组成:可重用部分和不可重用部分。
- 可重用部分:
大小可用CONTROL_FILE_RECORD_KEEP_TIME参数来控制,默认值为7天
供恢复管理器使用
内容可自动扩展 - 不可重用部分:
可用CREATE DATABASE或CREATE CONTROLFILE语句的下列参数来间接影响其大小:
MAXDATAFILES
MAXINSTANCES
MAXLOGFILES
MAXLOGHISTORY
MAXLOGMEMBERS
使用PFILE添加或移动控制文件
-
利用数据字典v$controlfile来获取现有控制文件名字。
-
正常关闭Oracle数据库,如shutdown immediate。
-
将新的控制文件添加到初始化参数文件的CONTROL_FILES参数中。
-
将现有控制文件复制到指定位置。
-
重新启动数据库,如startup。
-
利用v$controlfile来验证新的控制文件是否正确。
-
如果有误,重做上述操作;如果无误,删除无用的控制文件。
使用SPFILE添加或移动控制文件
- 利用数据字典v$controlfile来获取现有控制文件名字。
- 修改SPFILE,使用alter system set control_file命令来改变控制文件的位置。
- 正常关闭Oracle数据库,如shutdown immediate。
- 将现有控制文件复制到指定位置。
- 重新启动数据库,如startup。
- 利用v$controlfile来验证新的控制文件是否正确。
- 如果有误,重做上述操作;如果无误,删除无用的控制文件。
使用SPFILE添加控制文件示例
- 利用数据字典v$controlfile来获取现有控制文件名字。
select * from v$controlfile;
- 修改SPFILE,改变控制文件的位置。
alter system set control_files =
'D:\ORACLE\ORADATA\ORCL\CONTROL01.CTL',
'D:\ORACLE\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL',
'D:\d03\CONTROL03.CTL'
scope=spfile;
- 正常关闭Oracle数据库
shutdown immediate
- 将现有控制文件复制到指定位置。
- 重新启动数据库。
startup
- 利用show parameter来验证新的控制文件是否正确。
show parameter control_files
控制文件备份
- 注意:
在数据库结构变化后,建议立即对控制文件进行备份。
使用备份控制文件进行的恢复是不完全恢复。
应尽可能使用当前的控制文件而不是备份控制文件进行数据库的恢复,以免造成数据丢失。 - 【方法一】将控制文件备份至指定的目录下。
- 【方法二】将创建控制文件的命令备份到一个追踪文件中。该追踪文件包含重建控制文件所需的SQL语句,应尽快将该文件复制到其他目录下,并将文件名改为有意义的文件名。
--将控制文件备份至D:\Backup目录中
alter database backup controlfile to
'D:\Backup\control.bak';
--将控制文件备份到追踪文件中。
alter database backup controlfile to trace;