暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle故障处理-数据库无法启动(案例二)

IT小Chen 2021-04-14
1981

Oracle故障处理-数据库无法启动(案例二)

 

问题现象:

同事反馈客户机房断电,来电后,启动数据库服务器,发现数据无法启动。

登录应用系统,输入用户名和密码登录后报错。

解决过程:

:服务器启动后,数据库或监听没有自动启动

远程登录数据库服务器,切换到oracle用户,发现没有sqlplus命令???

猜测:没配置环境变量,还是数据库用户不是oracle?

查看用户只有oracle用户

[root@zjltdb home]# ls

oracle

无法找到数据库警告日志

[root@zjltdb home]# find / -name alert_*

查看数据库环境变量

发现Oracle家目录没有文件

和客户沟通,数据库服务器数据存储在磁盘柜,停电时,数据库服务器和磁盘柜均异常断电;

猜测:来电启动时,磁盘柜启动速度慢于数据库服务器启动速度,导致数据库服务器启动时无法成功挂载磁盘,导致目录丢失?

查看自动挂载情况 

[oracle@zjltdb oracle]$ mount

/dev/sda2 on /oracle type ext4 (rw)

卸载/oracle,重新手动挂载

[oracle@zjltdb oracle]$ umount /dev/sda2

[oracle@zjltdb oracle]$ mount /dev/sda2 /oracle

/oracle仍然没有文件

让客户重启数据库服务器,启动之后发现/oracle目录仍然没有文件

结论:/oracle目录下文件并不是没有挂载,而是真没了

查看三大核心文件(控制文件,日志文件,数据文件)还在是否丢失个别文件还不确定。

[root@zjltdb home]# find / -name *.ctl

/oradata/ncdb/control01.ctl

/oradata/ncdb/control02.ctl

/oradata/ncdb/control03.ctl

[root@zjltdb home]# find / -name redo*

/oradata/ncdb/redo01.log

/oradata/ncdb/redo02.log

/oradata/ncdb/redo03.log

[root@zjltdb home]# find / -name *.dbf

/oradata/ncdb/nnc_data01.dbf

/oradata/ncdb/nnc_index01.dbf

/oradata/ncdb/system01.dbf

/oradata/ncdb/undotbs01.dbf

......

查看参数文件,监听文件已经丢失

[root@zjltdb home]# find / -name init*

root@zjltdb home]# find / -name listener*

丢失的文件有:参数文件,监听文件,TNS文件,Oracle安装目录(包括Oracle命令等)

客户反馈数据库没有启动归档,没有RMAN备份,没有expdp逻辑备份总之一句话,没有任何有效的备份。

解决方案:

在服务器本地重新生成Oracle软件或直接将数据文件迁移到其他服务器上,客户希望能直接在服务器本地进行恢复。

客户没有安装介质,不知道oracle 10g具体哪个版本,但客户反馈正式数据库和测试数据库一起搭建的,推测两个数据库版本相同,可以复制测试服务器Oracle_home目录到正式数据库服务器

一:将测试库上的oracle软件拷贝到正式服务器上

[root@zjltdb ~]# scp -r 192.100.100.xxx:/oracle/* /oracle

[root@zjltdb ~]# cd /oracle

[root@zjltdb oracle]# ls

orainventory 

admin

product

由于两个数据库的SID和目录名等不同,需要更改相应的目录名和实例名

二:禁用spfile参数文件

[oracle@zjltdb dbs]$ mv spfileerpdb.ora  spfileerpdb.ora.bak

三:重命名pfile参数文件

[oracle@zjltdb dbs]$ mv initerpdb.ora  initncdb.ora

四:修改参数文件

[oracle@zjltdb dbs]$ vim  initncdb.ora

五:修改监听文件

[oracle@zjltdb admin]$ vim  listener.ora

六:启动数据库

分析启动报错原因:参数文件记录的数据库版本和控制文件记录的数据库版本不一致,原库版本是10.2.0.3.0,但是拷贝过来的数据库软件属于10.2.0.4.0没有时间再去找10.2.0.3.0的安装包了,只能继续恢复了。

解决方案:修改参数compatible版本为10.2.4.0

[oracle@zjltdb dbs]$ vim  initncdb.ora

七:再次启动数据库

可以成功挂载数据库,但是无法open数据库,原因还是因为数据库版本不匹配

查看警告日志

[oracle@zjltdb trace]$ vim alert_ncdb.log

数据库必须以UPGRADE方式启动

八:以UPGRADE方式启动数据库

此时数据库状态为OPEN MIGRATE

数据库OPEN MIGRATE状态下无法连接生产用户,只允许sysdba用户连接

结论:必须将数据库升级到10.2.0.4.0才可以打开数据库,本来一个数据库恢复案例,结果却演变成了数据库升级。

九:执行数据库升级脚本(重新创建数据字典和视图)

升级之前备份所有的数据文件,控制文件,日志文件到本地

SQL >@/oracle/product/10.2/rdbms/admin/catupgrd.sql

......

过程比较漫长,大概1小时

再次启动数据库,可以正常open 

十一 :启动监听后,进入NC系统,发现NC数据一切正常

十二:让客户尽快做备份

1 expdp对所有用户做逻辑备份

2 备份/oracle目录到本地

第二天早上,用户发来消息,NC再次出现无法登录问题,远程查看/oracle目录又变空了,并且用户昨天晚上并没有来得及做任何备份,他说太晚了,想早上在做备份。用户希望可以再做一次恢复。

猜测问题可能原因:

1 人员恶意删除

2 /oracle所在磁盘出现问题

解决方案:

1 重复昨天的恢复操作

2 修改oracle环境变量,将oracle_home指向其他磁盘

3 全库备份,备份文件拷贝到其他服务器上

4 启动数据库,启动监停,客户登录系统,查看系统数据,一切正常

建议用户联系服务器硬件厂商尽快检查磁盘健康情况;

文章转载自IT小Chen,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论