还剩6页未读,继续阅读
文本内容:
一.非归档模式的数据库,丢失数据文件•故障现象》丢失某个数据库文件,造成了数据库无法启动,同时数据库处于非归档模式,也没有冷备份,启动时的错误信息如下ORA-Ol157:cannot identify/lock dciAfile3-see DBWRtrace fileORA-01110:data file3:D:\ORACLE\ORADATA\TEST\USERS
01.DBF•解决方法a将数据库启动到mount状态下sqlplus7as sysdba55startup mountA从数据库中删除该数据文件alter dotcibcisedatafile xxoffline drop;A打开数据库alter databaseopen;A备注»该方法可正常打开数据库,但该dotcifile中的数据将丢失A如果误删除了system表空间的dotcifie则该方法不奏效A如果该表空间还包含其它数据文件,用EXP把数据备份出来,然后删除表空间,重建表空间,将数据导入如果不包含其它数据文件,则直接删除表空间就可以了二.归档模式数据库丢失某数据文件,无备份,但有该数据文件创建以来的归档日志•故障现象A归档模式的数据库,丢失了某个数据库文件,造成了数据库无法启动,同时没有数据库的全备份,但有该数据文件创建以来的归档日志,数据库无法启动ORA-Ol157:cannot identify/lock data file3-see DBWRtrace fileORA-Ol110:data file3:D:\ORACLE\ORADATA\TEST\USERS
01.DBF•解决方法»启动数据库到mount状态startup mountA手工创建丢失的数据文件alter databasecreate datafileoldfname asnewfname size xxx reuse;》利用归档日志对数据文件进行醺recover datafile newfname;或者recover datafilen;A打开数据库alter databaseopen;A备注A该方法可正常打开数据库,而且不会丢失数据A该方法有两个前提A丢失的数据文件不能是系统文件A不能丢失或损坏控制文件三.非current和active的redo log损坏故障现象A误删除了redo log,或者redo log被损坏,数据库能mount,不能open:ORA-00313:open failedfor membersof loggroup3of thread1ORA-00312:online log3thread1:7oraclel0/oradata/oral0g/redo
03.log•解决方法»查询v$log视图,确认损坏的redo loggroup是非current和active SQLselectgroup#,thread#,sequence#,archived,status fromv$log;GROUP#THREAD#SEQUENCE#ARCHIVED STATUS11103YES INACTIVE21104NO CURRENT31102YES INACTIVEA如果该日志已经归档,用下面的命令清除日志内容Alter databaseclear logfile group3;A如果该日志没有归档,用下面的命令清除日志内容Alter databaseclear unarchivedlogfile group3;A打开数据库Alter databaseopen;»尽快做一个数据库全备份四.current或active的redo log损坏•故障现象A误删除了redo log,或者redo log被损坏,数据库不能打开ORA-00313:open failedfor membersof loggroup2of thread1ORA-00312:online log2thread1:7oraclel0/oradata/oral0g/redo02dog,•解决方法A查询v$log视图,确认损坏的redo loggroup是current或active SQLselectgroup#,thread#,sequence#,archived,status fromv$log;GROUP#THREAD#SEQUENCE#ARCHIVED STATUS112YES INACTIVE214NO CURRENT313YES INACTIVEA情况1:当前日志文件还存在,只是逻辑损坏,并且当前日志没有未决事务需要实例恢复alter databaseclear unarchivedlogfile group2;--不会报错recover databaseuntil cancel;alter databaseopen resetlogs;A一般情况下,该方法不奏效,如果clear报错,则用其它方法.A情况2:当前日志完全损坏,且有未决事务,数据库有备份alter databaseclear unarchivedlogfilegroup2;--会报错ERROR atline1:ORA-01624:log1needed forcrash recoveryof thread1restore database;recover databaseuntil cancel;--选择autorecover databaseuntil cancel;alter datbaseopen resetlogs;A尽快做一个数据库全备份A情况3:当前日志完全损坏,且有未决事务,数据库无备份shutdown immediate;_allow_resetlogs_corruption=true;startup mountpfile=xxx;recover databaseuntil cancel;alter datbaseopen resetlogs;shutdown immediate_allow_resetlogs_corruption=true;Startup A尽快做一个数据库全备份五,临时表空间的数据文件损坏故障现象A临时表空间的数据文件发生损坏,系统出现故障,如何恢复解决方法A在皿及以上版本数据库,启动数据库时,如果发现临时数据文件损坏,会自动创建,如果在数据库运行过程中,可以手工重建create temporarytablespace tempitempfile xxsize xx;alter databasedefault temporarytablespace tempi;--系统默认临时表空间的重建需要执行这一步,否则不需要drop tablespacetemp;alter tablespace tempi renameto temp;》在10g以前版本数据库,可以在数据库打开后或运行过程中,手工重建就可以了alter databasedatafile xxxoffline drop;--如果数据库打不开,就执行这个步骤create temporarytablespace tempitempfile xxsize xx;alter databasedefault temporarytablespacetempi;--系统默认临时表空间的重建需要执行这一步,否则不需要9以前版本也不需要drop tablespacetemp;alter tablespacetempi renameto temp;六.UNDO数据文件损坏,数据库无法启动•故障现象AUnd数据文件发生了丢失或损坏,数据库启动报错ORA-01157:cannot identify/lock datafile2-see DBWRtrace fileORA-01110:datafile2:VoraclelO/oradata/oralOg/undotbsOl.dbf1•解决方法A如果数据库有备份,则利用备份进行恢复A如果数据库没有备份,则利用重建undo表空间的方式进行恢复startup mountalter databasedatafilenoffline drop;(删除损坏的undo文件)alter databaseopen;create undotablespace xxx(创建一个新的undo表空间)alter systemset undo_tablespace=xxx注旨向新的undo表空间)drop tablespaceyyy includingcontents;(删除原来的undo表空间)七.控制文件损坏•故障现象A控制文件发生了损坏,数据库已经无法启动,报错信息如下ORA-00202:controlfile:D:\Oracle\oradata\chen\control
01.ctl ORA-27041:unable toopen fileOSD-04002:unable toopen file•解决方法A情况一控制文件有镜像,且镜像控制文件没有被损坏A关闭数据库A将没有损坏的控制文件覆盖掉损坏的控制文件,或者修改参数文件的control.files参数,去掉损坏的控制文件»重新启动数据库»情况二控制文件无镜像,或者镜像的所有控制文件都损坏了A恢复控制文件A如果控制文件有备份,从备份中恢复控制文件restore controlfilefrom zyour controlfilebackupset〉A如果控制文件有sn叩shot,将sn叩shot控制文件替换掉原损坏控制文件A如果做过alter databasebackup controlfileto trace的控制文件脚本备份,可以用trace文件中的重建脚本来创建控制文件,A如果没有备份,也没有trace备份,只能手工编写脚本创建控制文件,前提是你对数据库文件结构非常清楚》恢复和打开数据库»如果是用create controlfile...noresetlogs方式重建的控制文件recover database;alter databaseopen;alter tablespacetemp addtempfile xxsize xxreuse;--对所有临时表空间做此操作A如果是用create controlfile...resetlogs方式重建的控制文件,或者通过备份或快照恢复的控制文件recover databaseusing backupcontrolfile;alter databaseopen resetlogs;alter tablespacetemp addtempfile xxsizexxreuse;--对所有临时表空间做此操作。