数据库控制文件损坏,有trace文件,在正常的shutdown情况下(操作前请先备份数据库)
1、创建测试数据
- SQL> create table tt (id number, name varchar2(100));
- SQL> insert into tt select rownum,'test..................' from dba_objects;
- 已创建52177行。
- SQL> commit;
2、backup controlfile to trace
- SQL> alter session set tracefile_identifier=kipos;
- 会话已更改。
- SQL> alter database backup controlfile to trace;
- 数据库已更改。
3、正常关闭数据库
- SQL> shutdown immediate
- 数据库已经关闭。
- 已经卸载数据库。
- ORACLE 例程已经关闭。
4、模拟破坏控制文件,或者直接将其删除
5、启动数据库,数据库无法启动到mount状态
- SQL> startup
- ORACLE 例程已经启动。
- Total System Global Area 167772160 bytes
- Fixed Size 1247900 bytes
- Variable Size 75498852 bytes
- Database Buffers 88080384 bytes
- Redo Buffers 2945024 bytes
- ORA-00205: ?????????, ??????, ???????
- SQL> alter session set nls_language=american;
- Session altered.
- SQL> alter database mount;
- alter database mount
- *
- ERROR at line 1:
- ORA-00205: error in identifying control file, check alert log for more info
6、根据trace文件重建控制文件
- SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
- 2 MAXLOGFILES 16
- 3 MAXLOGMEMBERS 3
- 4 MAXDATAFILES 100
- 5 MAXINSTANCES 8
- 6 MAXLOGHISTORY 292
- 7 LOGFILE
- 8 GROUP 1 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG' SIZE 50M,
- 9 GROUP 2 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG' SIZE 50M,
- 10 GROUP 3 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO03.LOG' SIZE 50M
- 11 -- STANDBY LOGFILE
- 12 DATAFILE
- 13 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSTEM01.DBF',
- 14 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDOTBS01.DBF',
- 15 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSAUX01.DBF',
- 16 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/USERS01.DBF',
- 17 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/EXAMPLE01.DBF',
- 18 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/MIS.DBF',
- 19 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDO_1',
- 20 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/INDEX_TBS.DBF'
- 21 CHARACTER SET ZHS16GBK;
- 控制文件已创建。
- SQL> alter database open;
- 数据库已更改。
- SQL> select count(*) from tt;
- COUNT(*)
- ----------
- 52177
- SQL>
总结:数据库正常down机的,即使丢失了全部的控制文件,在重建数控制文件后,数据库可以正常打开且不会丢失数据。注意,重建控制文件后会丢失数据库的临时文件。