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 启动数据库,启动监停,客户登录系统,查看系统数据,一切正常
建议用户联系服务器硬件厂商尽快检查磁盘健康情况;




