控制文件破坏时数据库的恢复方法
一 控制文件有镜像时数据库恢复
SQL>startup
2 ;
startup ;
*
ERROR at line 1:
ORA-00205: error in identifying controlfile, check alert log for more info
在数据库启动的时候出现了以上错误信息,在识别控制文件时出错,并将错误信息记录在跟踪日值文件里面。
查看跟踪文件如下:
Tue Dec 06 15:25:42 2005
ORA-00202: controlfile: 'D:/oracle/oradata/oracle/CONTROL02.CTL'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
可以确定,控制文件'D:/oracle/oradata/oracle/CONTROL02.CTL'损坏了或者不存在了。
控制文件恢复:
关闭数据库
SQL> shutdown
ORA-01507: database not mounted
ORACLE instance shut down.
就控制文件的恢复有两种方法可以选择
第一种:控制文件有镜像CONTROL0.CTL和CONTROL03.CTL,将这两个镜像文件中的一个复制,拷贝到CONTROL02.CTL
所在的目录中,然后将文件名称改成CONTROL02.CTL。
启动数据库就ok了。
第二种:因为为控制文件做了镜像了,所以关闭数据库后,在数据库的参数文件INITorcl.ORA参数control_files中将
CONTROL02.CTL这一镜像去掉。
然后根据参数文件创建服务器参数文件
SQL> conn / as sysdba
Connected to an idle instance.
SQL> create spfile from pfile;
文件已创建。
启动数据库到nomount状态,查看控制文件参数是否已经改表
SQL> show parameter control
ORA-01034: ORACLE not available
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> show parameter control
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
control_file_record_keep_time integer
7
control_files string
D:/oracle/oradata/oracle/CONTR
OL01.CTL, D:/oracle/oradata/or
acle/CONTROL03.CTL
SQL> alter database mount;
数据库已更改。
打开数据库
SQL> alter database open
2 ;
数据库已更改。
二 控制文件没有镜像的情况下数据库的恢复
如果被损坏的控制文件没有镜像,单数据库的结构还存在,则只能重新创建数据库。
第一步准备参数文件的路径;
将损坏的控制文件删掉,然后在参数文件中设置control_files参数,多配置几个控制文件的镜像
control_files='D:/oracle/oradata/oracle/CONTROL01.CTL',
'D:/oracle/oradata/oracle/CONTROL02.CTL',
'D:/oracle/oradata/oracle/CONTROL03.CTL'
然后启动数据库到nomount状态,
执行create controlfile database database_name命令创建控制文件。
create controlfile database orcl
logfile
--全部日值组和日值文件,及大小
NORESETLOGS
DATAFILES
--数据库全部数据文件路径及名称
maxloghistory 2000 --最大历史日志数
maxdatafiles 2000 --设置最大数据文件数
maxlogmembers 5 --最大日值成员数
character set ZHS16GBK; --设置数据库字符集
运行上述命令后系统自动在control_files指定的目录中创建三个控制文件,3个文件之间为镜像关系。控制文件创建后从新启动数据库即可。
成功后,关闭数据库,进行一下冷备份。