ITPub博客

首页 > 数据库 > Oracle > Oracle日常问题-数据库无法启动(案例二)

Oracle日常问题-数据库无法启动(案例二)

原创 Oracle 作者:chenoracle 时间:2020-02-16 22:06:58 0 删除 编辑

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",共同学习,共同成长!!!



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29785807/viewspace-2675803/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle 11g OCP、Oracle 11g OCM、OCMU 用户组成员,微信公众号"IT小Chen"

注册时间:2014-08-05

  • 博文量
    450
  • 访问量
    907606