20200216-Oracle数据库家目录丢失导致无法启动

在这里插入图片描述

问题现象:

同事反馈客户机房断电,来电后,启动数据库服务器,发现数据无法启动。
登录应用系统,输入用户名和密码登录后报错。

解决过程:

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

远程 登录数据库服务器,切换到oracle 用户,发现没有 sqlplus 命令 ???
在这里插入图片描述
猜测: 没配置环境变量,还是 数据库用户不是oracle?
查看用户只有oracle 用户

[root@zjltdb home]# ls
oracle

无法找到数据库警告日志

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

查看数据库环境变量
在这里插入图片描述在这里插入图片描述 发现Oracle 家目录没有文件
在这里插入图片描述
和客户沟通,数据库服务器数据存储在磁盘柜,停电时,数据库服务器和磁盘柜均异常断电;

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

查看自动挂载情况
在这里插入图片描述

 [oracle@zjltdb oracle]$ mount
/dev/sda 2  on / oracle type  ext4 (rw)

卸载/oracle ,重新手动挂载

[oracle@zjltdb oracle]$ u mount  /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/catu p grd.sql

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

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

在这里插入图片描述

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

十二:让客户尽快做备份

1 expdp 对所有用户做逻辑备份
2 备份 /oracle 目录到本地

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

猜测问题可能原因:

1 人员恶意删除
2  /oracle 所在磁盘出现问题

解决方案:
1 重复昨天的恢复操作
2 修改 oracle 环境变量,将 oracle_home 指向其他磁盘
3 全库备份,备份文件拷贝到其他服务器上
4 启动数据库,启动监停, 客户 登录 系统 ,查看 系统 数据,一切正常
建议用户 联系 服务器硬件厂商尽快检查磁盘健康情况;

欢迎关注我的公众号:IT小Chen

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值