ORACLE 常见故障恢复(oracle常见错误)
sinye56 2024-10-04 10:59 5 浏览 0 评论
故障现象
丢失某个数据库文件,造成了数据库无法启动,同时数据库处于非归档模式,也没有冷备份,启动时的错误信息如下:
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 ; --对所有临时表空间做此操作
相关推荐
- 程序员:JDK的安装与配置(完整版)_jdk的安装方法
-
对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...
- Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置
-
一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...
- 麒麟系统安装JAVA JDK教程_麒麟系统配置jdk
-
检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...
- 学习笔记-Linux JDK - 安装&配置
-
前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...
- Linux新手入门系列:Linux下jdk安装配置
-
本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...
- 测试员必备:Linux下安装JDK 1.8你必须知道的那些事
-
1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...
- Linux 下安装JDK17_linux 安装jdk1.8 yum
-
一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...
- 在Ubuntu系统中安装JDK 17并配置环境变量教程
-
在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...
- 如何在 Linux 上安装 Java_linux安装java的步骤
-
在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...
- Windows和Linux环境下的JDK安装教程
-
JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...
- linux安装jdk_linux安装jdk软连接
-
JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...
- linux安装jdk,全局配置,不同用户不同jdk
-
jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...
- 运维大神教你在linux下安装jdk8_linux安装jdk1.7
-
1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...
- window和linux安装JDK1.8_linux 安装jdk1.8.tar
-
Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...
- 最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?
-
默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)