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