您的位置:首页 > 数据库 > Oracle

一次oracle数据库断电受损后的恢复过程

2017-07-18 11:31 218 查看
(一)说明:

  由于客户大厦突然断电,导致保系统服务器宕机,系统无法正常使用。

(二)系统恢复过程:

  1、来电后,

  手工重启一台tomcat后信息管理系统恢复正常。

2,同样重启档案系统后,登陆系统发现无法正常使用档案系统,说明系统没有正常启动。查看日志:

 

 

                             

除了黄色部分外日志都显示正常,清理work文件重启也不行,黄色部分显示jar可能有重复的或版本不一致的,检查tomcat下lib和eams下lib发现slf4j确实有相近或重的,接下来考虑替换或升级jar不失为一种好方法,但系统原来一直正常运行啊,况且移除类似重复jar包也不行。

3 后来关闭Linux服务器防火墙(service
iptables stop),重启系统,查看日志,此时日志如下:

这时真正的错误信息才会显现出来,连接不上数据库

可能是防火墙屏蔽了8080端口,可原来防火墙一直是开启状态,防火墙规则里面也没配置拒绝8080端口,系统都能正常使用(可能,可能的原因呢?)。(后来系统正常后开启防火墙后也不行,关闭就可以,所以最后把8080,和1521端口添加到防火墙配置规则里并开启防火墙)

所以这里建议:修复系统或安装应用时可以暂时关闭防火墙,以免端口被屏蔽影响判断,不过记得最后开启防火墙哦。

4、用PLSQL客户端连接Oracle数据库,连接不上,显示无监听。所以初步判断是oracle数据库问题。(这里可以用telnet或者nc,nmap等命令连接一下远程端口检查是否开启,前提是服务器已经安装好了telnet,nc,nmap)

5、所以接下来登陆oracle数据库服务器,进行数据库检查。

(1)首先关闭防火墙service iptables stop;

(2)通过命令 netstat –anp | grep 1521检查1521端口是否开启

显示正常

(3)用lsnrctl status检查数据库监听是否正常:

显示正常

(4)再用ps命令检查:

     

显示正常。

到这一步,貌似oracle数据库显示一切正常。那就接下来重启数据库看看

(5)oracle  linux下启动大概有三种方法,可以到安装根目录启动(可能不知道安装目录),也可以用脚本,网上有具体方法,这里最可靠好用的还是在SQL里启动。

  切换到oracle用户:

  依次命令为:su – oracle ; (切换到oracle用户)

              sqlplus /nolog; (登陆到sqlplus,是不登陆到数据库服务器的模式)

              connect /as sysydba(以数据库管理员身份)

              start(启动数据库)

              (关闭命令为shutdown immediate);

这里可以看到显示启动失败,重点为黄色标识的。如果你用select

*from  xxx ;随便找个表查询一下数据会提示数据库无效,查不出数来。

ERROR at line 1:

ORA-01034: ORACLE not available

这个错误是因为数据库默认将使用spfile启动数据库,

如果spfile不存在,则就会出现上述
10622
错误。 

注:Oracle在启动过程中,需要读取参数文件(pfile/spfile)来创建实例.Oracle在启动过程中,寻找参数文件的顺序为:spfile<sid>.ora,spfile.ora,init<sid>.ora.

spfile:服务器参数文件   是二进制格式,不能用记事本打开修改   

pfile:参数文件   是文本文件格式,可以用记事本打开修改,   
如果不指定用什么启动,则系统默认使用spfile,如果没有spfile,则使用pfile启动

解决方法:将$ORACLE_BASE/admin/数据库名称/pfile目录下的init.ora.012009233838(后面数字可能不同)形式的文件copy到$ORACLE_HOME/database 目录下initoracle.ora即可。(注:initoracle.ora中的oracle为你的实例名 ORACLE_SID)

(6)从上可知oracle安装路径是uo1/app/oracle/….,然后进入到oracle目录,找到intioracle.ora(因为安装的数据库目录名可能不同,.ora文件名也不同,所以完全按网上的名去找肯定找不着)。在这里进入到oracle具体安装目录/u01/app/oracle/product/11.2.0_1/dbs

.ora文件就在dbs下面,而且名为init.ora.

不好找的话,你也可以用命令搜索一下文件的位置:

find /* -name '*.ora' –print

这里可以看出想找的文件就是dbs下的init.ora

(7)找到init.ora文件后最重要的是首先备份好这个文件。同时找到pfile文件

(8)然后用admin/orcl/pfile/文件夹下面的init.ora.11172012124714覆盖/db_1/dbs/下的init.ora文件

cp/u01/app/oracle/admin/orcl/pfile/init.ora.11172012124714/u01/app/oracle/product/11.2.0/db_1/dbs/init.ora

 

(9)启动数据库后,发现问题还是如上所示。

 这个地方它提示打不开initORCL.ora,ORCL是实例名 ORACLE_SID。所以应该拷贝成initORCL.init而不是init.ora(不知道为什么原来是init.ora而没有initORCL.ini),重来一遍:

cp/u01/app/oracle/admin/orcl/pfile/init.ora.11172012124714/u01/app/oracle/product/11.2.0/db_1/dbs/initORCL.ora

 这时候应该说没有问题了,但重启数据库的时候还是起不来,问题如下:

ORA-48108: invalid value given for the diagnostic_dest init.ora parameter

ORA-48140: the specified ADR Base directory does not exist [/u01/app/oracle/product/11.2.0/db_1/dbs/<ORACLE_BASE>]

ORA-48187: specified directory does not exist

Linux Error: 2: No such file or directory

Additional information: 1

 

(10)这时候问题出在哪里呢,明明按照步骤做了,按道理说应该不会有问题了。注意:上面拷贝cp .ora文件都是在root用户下,此时切换到oracle用户,su
– oracle,再拷贝一次

奇迹就这么发生了,启动基本成功。

(这个地方不知道为什么用oracle用户就可以,用root用户就不行,白折腾了好几遍,而且dbs下没有.bash_profile文件,怎么会和用户变量有关么?我看遇到这个问题网上有改initORCL.ora文件的等等,这里需要好好研究下。。。。。。。)

(11)接下来解决启动时的cannot mount database in EXCUSIVE mode错误,该错误大意是: “Oracle被异常关闭时,有资源没有被释放……”

这里百度了一段话:

(ORA-01102 cannot mount database inEXCLUSIVE mode
出现1102错误可能有以下几种可能:

一、在HA系统中,已经有其他节点启动了实例,将双机共享的资源(如磁盘阵列上的裸设备)占用了;

二、说明 oracle 被异常关闭时,有资源没有被释放,一般有以下几种可能,

1、 oracle 的共享内存段或信号量没有被释放;

2、 oracle 的后台进程(如SMON、PMON、DBWn等)没有被关闭;

3、用于锁内存的文件lk<sid>和sgadef<sid>.dbf文件没有被删除。

首先,虽然我们的系统是HA系统,但是备节点的实例始终处在关闭状态,这点通过在备节点上查数据库状态可以证实。

其次、是因系统掉电引起数据库宕机的,系统在接电后被重启,因此我们排除了第二种可能种的1、2点。最可疑的就是第3点了。)

(12)这时在dbs下查找是否有lk(SID) 文件存在

发现有lkORCL文件存在

再用/sbin/fuser –u lkORCL; /sbin/fuser –k  lkORCL杀掉。用/sbin/fuser –u lkORCL检查还有没有,如果没有了,就ok。

合理的顺序应该是先用/sbin/fuser –u lkORCL;检查,再用/sbin/fuser –k  lkORCL杀掉,再用/sbin/fuser –u lkORCL检查一遍。操作这两个命令前,最好把数据库先关了。

(13)接下来再重启数据库

一切ok。说明此时数据库正常启动了。

(14)用quit;退出SQL,重新打开监听,lsnrctl start,如果显示打开,停用lsnrctl stop  ,再打开,查看状态lsnrctl
status;重新检查1521端口,数据库状态。

到这一步,oracle数据库已经恢复正常。

(15)最后重新启动tomcat,发现系统还是不行,用PLSQL连接显示无监听。这时再回到数据库服务器,关闭监听,在oracle安装目录找到监听配置文件

打开vi  :

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST =localhost.localdomain)(PORT = 1521))

    )

  )

 

ADR_BASE_LISTENER= /u01/app/oracle
按i编辑,把localhost.localdomain改为10.10.8.16

保存退出 :wq

然后重启监听。

(16)最后一次重启系统显示正常,plsql连接数据库正常,至此,整个过程到此结束。

最后的最后开启防火墙,给档案系统添加1521和8080端口

#/sbin/iptables-A INPUT -p tcp -m state --state ESTABLISHED -m tcp --dport  8080 -j ACCEPT

#/sbin/iptables-A INPUT -p tcp -m state --state ESTABLISHED -m tcp --dport  1521 -j ACCEPT
保存更改
#/etc/init.d/iptables save 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: