数据库控制文件丢失后的恢复

数据库技术

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

7-g15-1-2.jpg

看样子系统无法验证控制文件。是不是控制文件被人删除了?我查看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系统的有关进程自动维护更新的,管理员不能手工编辑其内容。控制文件对于数据库能否正常启动意义重大,建议管理员在新安装数据库系统以及数据库的物理结构改变后,一定要及时备份。