1. 概述
- 控制文件是记录数据库结构信息的重要的二进制文件。
- 控制文件记录的信息有:数据库建立日期、数据库名、数据库中所有数据文件和日志文件的文件名及路径、恢复数据库时所需的同步信息。
- 用途:①在装载和存取数据库时都要访问该文件。②数据库恢复所需的同步信息存储在控制文件中。
- 数据库的物理组成与控制文件中的记录不同时,系统则不能正常启动或发生down机现象。
- 查看控制文件:
- 方式1:SQL> select name from v$controlfile;
- 方式2 :SQL> show parameter control_files
- 方式3 :SQL> show parameter control
- 注:处于nomount状态上面语句查不到控制文件。
- 建议设置:
- 至少使用两个控制文件,并存放于不同磁盘。(虽然只有一个也可以启动)
- 控制文件的镜像可以在数据库创建或创建完成后进行。
2. 创建镜像控制文件
以服务器端参数文件为例(当前控制文件为CONTROL.DBF、CONTROL01.DBF,再添加一个CONTROL02.DBF),步骤如下:
Step1 查询当前控制文件的存储位置并规划控制文件的存储位置
show parameter control_files
- 注意:处于nomount状态上面语句查不到控制文件,所以现在数据库是打开状态。
- 当前控制文件所在目录为'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\',镜像控制文件可以存放在同一目录下,也可以自己放在自己规划的其他目录。
Step2 修改初始化参数
SQL> ALTER SYSTEM SET CONTROL_FILES=
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL.DBF',
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL01.DBF',
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL02.DBF'
SCOPE=SPFILE;
- 注意是 CONTROL_FILES ,可以有多个控制文件,所以是有s的。
- 注意标点符号,多个控制文件之间用“,”分隔,SCOPE前是空格。
- 注意不要忘记 SCOPE=SPFILE ,因为是修改静态参数。
Step3 关闭数据库
shutdown immediate
-
注意一定要先关闭数据库再复制,确保在复制过程中数据库不会发生任何更改。
Step4 复制控制文件到规划好的目录(操作系统级)
HOST COPY C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL.DBF C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL02.DBF
- 注意路径不能加 ''
- 也可手动复制
Step5 启动数据库
STARTUP
3. 删除控制文件
为了防止控制文件被损坏,应该启用镜像控制文件。但是, 当多个镜像控制文件中任意一个被损坏后,都将导致无法装载Oracle数据库。这时为了使得数据库可以正常工作,只需要删除损坏的控制文件即可。
例如删除CONTROL.DBF01,步骤如下:
--Step1.查询当前控制文件的存储位置
SQL> show parameter control_files
--Step2.修改初始化参数(静态参数)
SQL> ALTER SYSTEM SET CONTROL_FILES=
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL.DBF',
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL02.DBF'
SCOPE=SPFILE;
--Step3.关闭数据库
SQL> shutdown immediate
--Step4.操作系统级删除控制文件
SQL> HOST DEL C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL02.DBF
--也可手动删除
--Step5.启动数据库
SQL> STARTUP
4. 备份控制文件
4.1 二进制备份文件
以二进制形式备份文件控制文件,在数据库控制文件损坏时,可以直接用于控制文件的恢复。
Alter database backup controlfile to 'd:\backup_controlfile\control_20231219.bkp ';
-
前提是有这个文件夹 backup_controlfile。
-
即使有多个控制文件,备份后得到的也是一个,因为多个控制文件是一样的,因此是controlfile,只备份一个。
-
注意:alter system/session 一般是修改参数,alter database 一般是对文件进行操作。
4.2 脚本备份文件
将控制文件以文本方式备份到跟踪文件中,可利用记事本打开跟踪文件查看控制文件信息,并可以利用该文本信息重建控制文件。
Step1 设置文件名标识
alter session set tracefile_identifier='back_control';
- 文件名标识可以自定义,便于后面找到自己备份的文件。
- 注意是 alter session ,因为是会话级别的操作。
Step2 执行备份文件命令
alter database backup controlfile to trace;
Step3 查看脚本文件的存放位置
show parameter user_dump_dest;
select tracefile from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat));
-
按照路径找到备份的控制文件,再复制到其他地方保存起来。
5. 恢复控制文件
在一般情况下,如果使用了复合控制文件,并且将各个控制文件分别存储在不同的磁盘中,则丢失全部控件文件的可能性将非常小。但是,如果数据库的所有控制文件全部丢失,这时惟一的补救方法就是以手动方式重新创建控制文件。
根据前面得到的脚本备份文件进行创建:
建立控制文件的要点(脚本文件未注释部分的含义分析):
--NORESTLOGS方式
1.数据文件和重做日志文件的名称和路径
SQL> SELECT NAME FROM V$DATAFILE;
SQL> SELECT MEMBER FROM V$LOGFILE;
2.启动实例,不加载数据库(nomount)
SQL> startup nomount
3.建立控制文件 create controlfile
--RESTLOGS方式:CREATE CONTROLFILE REUSE DATABASE "XE" RESETLOGS NOARCHIVELOG
CREATE CONTROLFILE REUSE DATABASE "XE" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1
'C:\ORACLEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\ONLINELOG\O1_MF_1_LH3LPC1C_.LOG'
SIZE 50M BLOCKSIZE 512,
GROUP 2
'C:\ORACLEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\ONLINELOG\O1_MF_2_LH3LPC44_.LOG'
SIZE 50M BLOCKSIZE 512
DATAFILE
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF',
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSAUX.DBF',
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\UNDOTBS1.DBF',
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\USERS.DBF'
CHARACTER SET AL32UTF8
;
4.初始化参数 control_files 指向新建控制文件
SQL> ALTER SYSTEM SET CONTROL_FILES=
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL.DBF'
SCOPE=SPFILE;
5.备份
SQL> Alter database backup controlfile to 'd:\backup_controlfile\control_20231219.bkp ';
6.数据库恢复
--RESTLOGS方式:RECOVER DATABASE USING BACKUP CONTROLFILE
SQL> RECOVER DATABASE
7.打开数据库
--RESTLOGS方式:ALTER DATABASE OPEN RESETLOGS;
SQL> ALTER DATABASE OPEN;