数据库控制文件丢失后的恢复
数据库技术
我公司使用的数据库管理系统是Oracle9i。为了防止意外故障发生,我又安装了一台备用服务器,操作系统是Win2003 Server。本想第二天对备用服务器进行安全性设置,以及进行冷备份,但是当我第二天登录企业管理器时,发现再也无法打开数据库。系统出现如图错误信息:

看样子系统无法验证控制文件。是不是控制文件被人删除了?我查看bdump目录下的alert_moissbk.log文件(moissbk是数据库名),发现系统无法打开control01.ctl、control02.ctl和control03.ctl这三个控制文件。后来一问原来是同事在做控制文件的复用时,不小心把系统默认的三个控制文件全部删除了,连回收站都被清空。由于控制文件没做过冷备份,故无法用简单的操作系统拷贝命令恢复。只好重建控制文件了。
首先以用户名sys,权限sysdba登录到sql plus。然后以nomount方式不装载启动数据库:
SQL> startup nomount
输入重建控制文件的代码:
SQL> create controlfile reuse database "moissbk" noresetlogs archivelog
2 maxlogfiles 50
3 maxlogmembers 5
4 maxdatafiles 100
5 maxinstances 1
6 maxloghistory 113
7 LOGFILE
8 GROUP 1'E:\oracle\oradata\MOISSBK\REDO01.LOG' SIZE 100M,
9 GROUP 2'E:\oracle\oradata\MOISSBK\REDO02.LOG' SIZE 100M,
10 GROUP 3'E:\oracle\oradata\MOISSBK\REDO03.LOG' SIZE 100M
11 DATAFILE
12 'E:\oracle\oradata\MOISSBK\SYSTEM01.DBF',
13 'E:\oracle\oradata\MOISSBK\UNDOTBS01.DBF',
14 'E:\oracle\oradata\MOISSBK\CWMLITE01.DBF',
15 'E:\oracle\oradata\MOISSBK\DRSYS01.DBF',
16 'E:\oracle\oradata\MOISSBK\EXAMPLE01.DBF',
17 'E:\oracle\oradata\MOISSBK\INDX01.DBF',
18 'E:\oracle\oradata\MOISSBK\TOOLS01.DBF',
19 'E:\oracle\oradata\MOISSBK\USERS01.DBF',
20 'E:\oracle\oradata\MOISSBK\ODM01.DBF',
21 'E:\oracle\oradata\MOISSBK\TEMP01.DBF',
22 'E:\oracle\oradata\MOISSBK\XDB01.DBF'
23 ;
Control file created.
SQL> alter database open;
Database altered.
至此,重建控制文件成功,数据库打开成功。然后我们再检查一下当前可用的控制文件:
SQL> show parameter control_file;
NAME TYPE VALUE
-------------------------
control_file_record_keep_time integer 7
control_files string E:\oracle\oradata\MOISSBK\ CONTRO
L01.CTL, E:\oracle\oradata\MOISSBK
\CONTROL02.CTL, E:\oracle\oradata\
MOISSBK \CONTROL03.CTL
接着备份控制文件以便追踪:
SQL> alter database backup controlfile to trace;
这个功能可以将产生控制文件的相关信息存储在默认位于e:\oracle\admin\moissbk\udup目录下的文本文件中。下次如果还要重建控制文件,可以在这个文件中查找相关代码,拷贝到sql plus中运行就可以了。至此,工作顺利完成。
此次重建控制文件是在查阅有关Oracle技术资料的基础上,结合公司的实际网络环境完成的。重建控制文件需要知道日志文件和数据文件的位置和名称,以及常用的一些控制文件的配置参数。这些都记录在追踪文件中,你也可以打开Oracle安装目录查看具体文件的详细信息。
控制文件是一个二进制文件,记录了数据库所有文件的信息,它是由Oracle系统的有关进程自动维护更新的,管理员不能手工编辑其内容。控制文件对于数据库能否正常启动意义重大,建议管理员在新安装数据库系统以及数据库的物理结构改变后,一定要及时备份。