1. 控制文件概述
(1)控制文件的性质
✧控制文件是一个很小的二进制文件。
✧控制文件描述了整个数据库的结构。
✧在加载数据库时,实例必须首先通过初始化参数文件找到数据库的控制文件。
✧在数据库运行期间,控制文件始终在不断更新,以便记录数据文件和重做日志文件的变化
✧每个数据库至少拥有一个控制文件。一个数据库也可以同时拥有多个控制文件。分配在不同的物理硬盘中,以免数据库或硬盘损坏时,能够利用备份的控制文件启动数据库实例,可以提高数据库的可靠性。
(2)控制文件的内容
✧数据库名称和标识;
✧数据库创建的时间;
✧表空间名称;
✧数据文件和重做日志文件的名称和位置;
✧当前重做日志文件序列号;
✧数据库检查点的信息;
✧回退段的开始和结束;
✧重做日志的归档信息;
✧备份信息;
✧数据库恢复所需要的同步信息。
(3)控制文件中的最大化参数包括:
✧MAXLOGFILES:最大重做日志文件组数量;
✧MAXLOGMEMBERS:重做日志文件组中最大成员数量;
✧MAXLOGHISTORY:最大历史重做日志文件数量;
✧MAXDATAFILES:最大数据文件数量;
✧MAXINSTANCES:可同时访问的数据库最大实例个数。
(4)控制文件管理策略
✧Oracle建议最少有两个控制文件,通过多路镜像技术,将多个控制文件分散到不同的磁盘中。
✧在数据库运行过程中,始终读取CONTROL_FILES参数指定的第一个控制文件,并同时写CONTROL_FILES参数指定的所有控制文件。如果其中一个控制文件不可用,则必须关闭数据库并进行恢复。
✧每次对数据库结构进行修改后(添加、修改、删除数据文件、重做日志文件),应该及时备份控制文件。
2. 控制文件的管理
✧创建控制文件
✧实现多路镜像控制文件
✧备份控制文件
✧删除控制文件
(1)创建控制文件的情形
✧控制文件全部丢失或损坏;
✧需要修改数据库名称;
✧在Oracle 10.2.0之前的版本中,需要修改某个最大化参数。
(2)CREATE CONTROLFILE语句
CREATE CONTROLFILE [REUSE]
[SET] DATABASE database
[LOGFILE logfile_clause]
RESETLOGS|NORESETLOGS
[DATAFILE file_specification]
[MAXLOGFILES]
[MAXLOGMEMBERS]
[MAXLOGHISTORY]
[MAXDATAFILES]
[MAXINSTANCES]
[ARCHIVELOG|NOARCHIVELOG]
[FORCE LOGGING]
| [CHARACTER SET character_set] |
制作数据库中所有的数据文件和重做日志文件列表
SELECT MEMBER FROM V$LOGFILE;
SELECT NAME FROM V$DATAFILE;
| SELECT VALUE FROM V$PARAMETER WHERE NAME ='CONTROL_FILS'; |
| SHUTDOWN |
启动实例到NOMOUNT状态
| STARTUP NOMOUNT |
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'C:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\REDO01.LOG' SIZE 50M,
GROUP 2 'C:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\REDO02.LOG' SIZE 50M,
GROUP 3 'C:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\REDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'C:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\SYSTEM01.DBF',
'C:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\UNDOTBS01.DBF',
'C:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\SYSAUX01.DBF',
'C:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\USERS01.DBF',
'C:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\USERS02.DBF',
'C:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\USERS03.DBF'
| CHARACTER SET ZHS16GBK |
如果数据库重命名,则编辑DB_NAME参数来指定新的数据库名称
如果数据库需要恢复,则进行恢复数据库操作
如果创建控制文件时指定了NORESTLOGS,可以完全恢复数据库。
| RECOVER DATABASE ; |
| 如果创建控制文件时指定了RESETLOGS,则必须在恢复时指定 USING BACKUP CONTROLFILE。 RECOVER DATABASE USING BACKUP CONTROLFILE; |
如果数据库不需要恢复或已经对数据库进行了完全恢复,则可以正常打开数据库
| ALTER DATABASE OPEN; |
| 如果在创建控制文件时使用了RESETLOGS参数,则必须指定以RESETLOGS方式打开数据库。 ALTER DATABASE OPEN RESETLOGS |
编辑初始化参数CONTROL_FILES
| ALTER SYSTEM SET CONTROL_FILES=… SCOPE=SPFILE; |
| SHUTDOWN IMMEDIATE; |
重新启动数据库
| STARTUP |
编辑初始化参数CONTROL_FILES。
ALTER SYSTEM SET CONTROL_FILES=
'C:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\CONTROL01.CTL',
'C:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\CONTROL02.CTL',
'C:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\ORCL\\CONTROL03.CTL',
'C:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\CONTROL04.CTL'
| SCOPE=SPFILE |
关闭数据库
| SHUTDOWN IMMEDIATE; |
| 拷贝D:\\ORACLE\\ORADATA\\CONTROL01.CTL到D:\\ORACLE\\ORADATA目录下,并重命名为CONTROL04.CTL。 |
| STARTUP |
将控制文件备份为二进制文件
| ALTER DATABASE BACKUP CONTROLFILE TO … |
| ALTER DATABASE BACKUP CONTROLFILE TO TRACE |
✧将控制文件备份为二进制文件。
| ALTER DATABASE BACKUP CONTROLFILE TO 'D:\\ORACLE\\CONTROL.BKP'; |
| ALTER DATABASE BACKUP CONTROLFILE TO TRACE; |
(1)编辑CONTROL_FILES初始化参数,使其不包含要删除的控制文件;
(2)关闭数据库;
(3)在操作系统中删除控制文件;
(4)重新启动数据库。
(7)查询控制文件的信息
✧V$DATABASE:从控制文件中获取的数据库信息;
✧V$CONTROLFILE:包含所有控制文件名称与状态信息;
✧V$CONTROLFILE_RECORD_SECTION:包含控制文件中各记录文档段信息;
✧V$PARAMETER:可以获取初始化参数CONTROL_FILES的值。
(8)利用OEM管理控制文件
✧查看控制文件信息
✧备份控制文件