异常断电导致Oracle控制文件等受到破坏的处理(一)

2014-11-24 18:33:10 · 作者: · 浏览: 0

一、处理控制文件异常故障


方法:直接拷贝CONTROL03.CTL到CONTROL01.CTL,保险起见可以拷贝一个备份放


二、尝试启动


1、startup,碰到ORA-01172、ORA-01151错误


SQL> startup;


ORACLE 例程已经启动。



Total System Global Area 612368384 bytes


Fixed Size 1250428 bytes


Variable Size 146803588 bytes


Database Buffers 457179136 bytes


Redo Buffers 7135232 bytes


数据库装载完毕。


ORA-01172: 线程 1 的恢复停止在块 89 (在文件 2 中)


ORA-01151: 如果需要, 请使用介质恢复以恢复块和还原备份



2、恢复介质后再次启动,碰到ORA-00607、ORA-00600,600问题一般是UNDO文件出问题


SQL> recover database;


完成介质恢复。


SQL> shutdown immediate;


ORA-01109: 数据库未打开


已经卸载数据库。


ORACLE 例程已经关闭。


SQL> startup;


ORACLE 例程已经启动。



Total System Global Area 612368384 bytes


Fixed Size 1250428 bytes


Variable Size 146803588 bytes


Database Buffers 457179136 bytes


Redo Buffers 7135232 bytes


数据库装载完毕。


ORA-00607: 当更改数据块时出现内部错误


ORA-00600: 内部错误代码, 参数: [4194], [58], [19], [], [], [], [], []



3、利用数据库OPEN的时机执行如下语句(因为很快数据库即自动关闭)


SQL> SELECT SEGMENT_NAME FROM DBA_ROLLBACK_SEGS;



SEGMENT_NAME


------------------------------


SYSTEM


_SYSSMU1$


_SYSSMU2$


_SYSSMU3$


_SYSSMU4$


_SYSSMU5$


_SYSSMU6$


_SYSSMU7$


_SYSSMU8$


_SYSSMU9$


_SYSSMU10$



SEGMENT_NAME


------------------------------


_SYSSMU11$


_SYSSMU12$


_SYSSMU13$


_SYSSMU14$


_SYSSMU15$


_SYSSMU16$


_SYSSMU17$


_SYSSMU18$



已选择19行。



SQL>



4、创建PFILE


SQL> CREATE PFILE='D:\oracle\product\10.2.0\oradata\zjport\BACKFILE\ORACLEADMINORCLPFILEINITORCL.ORA' FROM SPFILE;



文件已创建。



5、修改PFILE


添加下面的参数:


undo_management='MANUAL'


_corrupted_rollback_segments=


(_SYSSMU1&,_SYSSMU2&,_SYSSMU3&,_SYSSMU4&,_SYSSMU5&,_SYSSMU6&,_SYSSMU7&,_SYSSMU8&,_SYSSMU9&,_SYSSMU10&,_SYSSMU11&,_SYSSMU12&,_SYSSMU13&,_SYSSMU14&,_SYSSMU15&,_SYSSMU16&,_SYS


SMU17&,_SYSSMU18&)



6、下面尝试用PFILE方式打开数据库


C:\Documents and Settings\Administrator>sqlplus / as sysdba



SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 9月 20 09:25:05 2012



Copyright (c) 1982, 2005, Oracle. All rights reserved.



已连接到空闲例程。



SQL> STARTUP PFILE=D:\oracle\product\10.2.0\oradata\zjport\BACKFILE\ORACLEADMINORCLPFILEINITORCL.ORA MOUNT


ORACLE 例程已经启动。



Total System Global Area 612368384 bytes


Fixed Size 1250428 bytes


Variable Size 146803588 bytes


Database Buffers 457179136 bytes


Redo Buffers 7135232 bytes


数据库装载完毕。



7、介质恢复


SQL> RECOVER DATABASE;


完成介质恢复。


SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL


ORA-00279: 更改 5520735 (在 09/20/2012 09:20:58 生成) 对于线程 1 是必需的


ORA-00289: 建议:


D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ZJPORT\ARCHIVELOG\2012_09_20\O1_MF_1_145_%U_.ARC


ORA-00280: 更改 5520735 (用于线程 1) 在序列 #145 中



指定日志: {=suggested | filename | AUTO | CANCEL}


cancel


介质恢复已取消。



8、RESETLOGS方式OPEN


SQL> ALTER DATABASE OPEN RESETLOGS;



数据库已更改。



SQL>


---------------------------------------------------


至此数据库恢复,后续执行数据备份并写入SPFILE


---------------------------------------------------


1、数据库备份


2、创建SPFILE


create spfile from pfile='D:\oracle\product\10.2.0\oradata\zjport\BACKFILE\ORACLEADMINORCLPFILEINITORCL.ORA';


---------------------------------------------------------------------------



至此数据库完全恢复、数据也备份完成,后续修改不归档方式为为归档方式


---------------------------------------------------------------------------



1、修改初试化参数,使能自动归档




--归档路径


SQL> alter system set log_archive_dest_1='LOCATION=D:\oracle\product\10.2.0\oradata\zjport\archivelog';


--归档命名格