网站首页 > 技术文章 正文
故障现象
丢失某个数据库文件,造成了数据库无法启动,同时数据库处于非归档模式,也没有冷备份,启动时的错误信息如下:
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'D:\ORACLE\ORADATA\TEST\USERS01.DBF'
l解决方法
将数据库启动到mount状态下:
SQLplus “/ as sysdba”
startup mount
从数据库中删除该数据文件
alter database datafile ‘xx’ offline drop;
打开数据库
alter database open;
备注:
该方法可正常打开数据库,但该datafile中的数据将丢失
如果误删除了system表空间的datafile,则该方法不奏效
如果该表空间还包含其它数据文件,用EXP把数据备份出来,然后删除表空间,重建表空间,将数据导入。如果不包含其它数据文件,则直接删除表空间就可以了。
二.归档模式数据库丢失某数据文件,无备份,但有该数据文件创建以来的归档日志
l故障现象
归档模式的数据库,丢失了某个数据库文件,造成了数据库无法启动,同时没有数据库的全备份,但有该数据文件创建以来的归档日志,数据库无法启动:
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'D:\ORACLE\ORADATA\TEST\USERS01.DBF
l解决方法
启动数据库到mount状态
startup mount
手工创建丢失的数据文件
alter database create datafile ‘oldfname’ as ‘newfname’size xxx reuse;
利用归档日志对数据文件进行恢复
recover datafile ‘newfname’;或者
recover datafile n;
打开数据库
alter database open;
备注:
该方法可正常打开数据库,而且不会丢失数据
该方法有两个前提
丢失的数据文件不能是系统文件
不能丢失或损坏控制文件
三.非current和active的redo log损坏
l故障现象
误删除了redo log,或者redo log被损坏,数据库能mount,不能open:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/oracle10/oradata/ora10g/redo03.log'
l解决方法
查询v$log视图,确认损坏的redo log group是非current和active
SQL>select group#,thread#,sequence#, archived,status from v$log;
GROUP# THREAD# SEQUENCE# ARCHIVED STATUS
------ ------- ---------- -------- --------
1 1 103 YES INACTIVE
2 1 104 NO CURRENT
3 1 102 YES INACTIVE
如果该日志已经归档,用下面的命令清除日志内容
Alter database clear logfile group 3;
如果该日志没有归档,用下面的命令清除日志内容
Alter database clear unarchived logfile group 3;
打开数据库
Alter database open;
尽快做一个数据库全备份
四.current或active的redo log损坏
l故障现象
误删除了redo log,或者redo log被损坏,数据库不能打开:
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/oracle10/oradata/ora10g/redo02.log'
l解决方法
查询v$log视图,确认损坏的redo log group是current或active
SQL>select group#,thread#,sequence#, archived,status from v$log;
GROUP# THREAD# SEQUENCE# ARCHIVED STATUS
------ ------- ---------- -------- --------
1 1 2 YES INACTIVE
2 1 4 NO CURRENT
3 1 3 YES INACTIVE
情况1:当前日志文件还存在,只是逻辑损坏,并且当前日志没有未决事务需要实例恢复
alter database clear unarchived logfile group 2; --不会报错
recover database until cancel;
alter database open resetlogs;
一般情况下,该方法不奏效,如果clear报错,则用其它方法.
情况2:当前日志完全损坏,且有未决事务,数据库有备份
alter database clear unarchived logfile group 2; --会报错
ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
restore database;
recover database until cancel; --选择auto
recover database until cancel;
alter datbase open resetlogs;
尽快做一个数据库全备份
情况3:当前日志完全损坏,且有未决事务,数据库无备份
shutdown immediate;
_allow_resetlogs_corruption=true;
startup mount pfile=‘xxx’;
recover database until cancel;
alter datbase open resetlogs;
shutdown immediate
_allow_resetlogs_corruption=true;
Startup
尽快做一个数据库全备份
五.临时表空间的数据文件损坏
l故障现象
临时表空间的数据文件发生损坏,系统出现故障,如何恢复
l解决方法
在10g及以上版本数据库,启动数据库时,如果发现临时数据文件损坏,会自动创建,如果在数据库运行过程中,可以手工重建:
create temporary tablespace temp1 tempfile ‘xx’ size xx’;
alter database default temporary tablespace temp1;--系统默认临时表空间的重建需要执行这一步,否则不需要
drop tablespace temp;
alter tablespace temp1 rename to temp;
在10g以前版本数据库,可以在数据库打开后或运行过程中,手工重建就可以了
alter database datafile ‘xxx’ offline drop;--如果数据库打不开,就执行这个步骤
create temporary tablespace temp1 tempfile ‘xx’ size xx’;
alter database default temporary tablespace temp1;--系统默认临时表空间的重建需要执行这一步 ,否则不需要,9i以前版本也不需要。
drop tablespace temp;
alter tablespace temp1 rename to temp;
六.UNDO数据文件损坏,数据库无法启动
l故障现象
Undo数据文件发生了丢失或损坏,数据库启动报错:
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/oracle10/oradata/ora10g/undotbs01.dbf'
l解决方法
如果数据库有备份,则利用备份进行恢复
如果数据库没有备份,则利用重建undo表空间的方式进行恢复
startup mount
alter database datafile n offline drop;(删除损坏的undo文件)
alter database open;
create undo tablespace xxx …; (创建一个新的undo表空间)
alter system set undo_tablespace=xxx;(指向新的undo表空间)
drop tablespace yyy including contents;(删除原来的undo表空间)
七.控制文件损坏
l故障现象
控制文件发生了损坏,数据库已经无法启动,报错信息如下:
ORA-00202: controlfile: 'D:\Oracle\oradata\chen\control01.ctl'
ORA-27041: unable to open file
OSD-04002: unable to open file
l解决方法
情况一:控制文件有镜像,且镜像控制文件没有被损坏
关闭数据库
将没有损坏的控制文件覆盖掉损坏的控制文件,或者修改参数文件的control_files参数,去掉损坏的控制文件
重新启动数据库
情况二:控制文件无镜像,或者镜像的所有控制文件都损坏了
恢复控制文件
如果控制文件有备份,从备份中恢复控制文件
restore controlfile from ‘<your controlfile backupset>’
如果控制文件有snapshot,将snapshot控制文件替换掉原损坏控制文件
如果做过alter database backup controlfile to trace的控制文件脚本备份,可以用trace文件中的重建脚本来创建控制文件,
如果没有备份,也没有trace备份,只能手工编写脚本创建控制文件,前提是你对数据库文件结构非常清楚
恢复和打开数据库
如果是用create controlfile …noresetlogs 方式重建的控制文件
recover database;
alter database open;
alter tablespace temp add tempfile ‘xx’ size xx reuse ; --对所有临时表空间做此操作
如果是用create controlfile …resetlogs方式重建的控制文件,或者通过备份或快照恢复的控制文件
recover database using backup controlfile;
alter database open resetlogs;
alter tablespace temp add tempfile ‘xx’ size xx reuse ; --对所有临时表空间做此操作
猜你喜欢
- 2024-10-13 国庆节快乐--一文看懂Oracle数据库跨版本下rman备份恢复过程
- 2024-10-13 史上最全Oracle文件损坏处理办法(附实验步骤)
- 2024-10-13 数据库数据恢复-ORACLE数据库常见故障的数据恢复可能性分析
- 2024-10-13 Oracle数据库不同损坏级别的恢复详情
- 2024-10-13 不懂数据库高可用、备份与恢复,数据库优化?看这本就够了
- 2024-10-13 windows系统回收站和Oracle回收站--致力于恢复不小心删除的对象
- 2024-10-13 Oracle数据误操作全面恢复实战(r11笔记第78天)
- 2024-10-13 TRUNCATE恢复-bbed truncate如何恢复
- 2024-10-13 服务器数据恢复-服务器断电导致Oracle数据库报错的...
- 2024-10-13 一起来学习Oracle的备份恢复基础吧-1
你 发表评论:
欢迎- 最近发表
-
- 前端流行框架Vue3教程:13. 组件传递数据_Props
- 前端必看!10 个 Vue3 救命技巧,解决你 90% 的开发难题?
- JAVA和JavaScript到底是什么关系?是亲戚吗?
- Java和js有什么区别?(java和javascript的区别和联系)
- 东方标准|Web和Java的区别,如何选择这两个专业
- 前端面试题-JS 中如何实现大对象深度对比
- 360前端一面~面试题解析(360前端笔试)
- 加班秃头别慌!1 道 Vue 面试题,快速解锁大厂 offer 通关密码
- 焦虑深夜刷题!5 道高频 React 面试题,吃透 offer 稳了
- 2025Web前端面试题大全(整理版)面试题附答案详解,最全面详细
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端懒加载 (45)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle查询数据库 (45)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)