1

记录一次ora-01078错误的排错

 1 year ago
source link: https://blog.51cto.com/u_1570955/5641869
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

记录一次ora-01078错误的排错

推荐 原创

冰蓝冰冷 2022-09-01 16:48:56 博主文章分类:Oracle ©著作权

文章标签 oracle 数据库 ora-01078 文章分类 Oracle 数据库 阅读数340

前几日在下午4点多研发人员忽然告知一套客户的系统不可用,PL/SQL也无法连接数据库,于是远程登录Oracle服务器查看情况。

这是一台windows的单节点数据库,登录之后首先查看监听,发现监听的实例名已经不是生产库了,而是一个陌生的实例名,心里一惊!!!

询问负责应用的研发工程师是什么情况,然后告知他在这台windows机器上又新建了一个实例用于测试,这个新实例是他创建的。并且在他新建完这个实例后,应用就连不上生产库了,并且客户在发现连不上数据库后,自行先重启了服务器!emmm。。。。。。

了解到情况后,屡了一下思路进行如下检查:

1、查看监听,发现生产库实例已经没有了,但是测试实例还在

2、进入$ORACLE_HOME/database查看生产库spfile是否还在,幸好文件还在

3、查看listener.ora内容,发现内容已被研发自行修改。lsnrctl status看到的信息发现原本设置的host是主机名,已经被修改为IP地址了,且这个IP地址居然是服务器上虚拟网卡的IP,而非数据库服务器物理网卡的IP。经了解,客户在这台数据库服务器上还部署了虚拟化产品,emmm….

4、进入windows服务查看确认两个实例的service都在,但是指定生产库的SID登陆的始终是空闲例程,新建的实例倒是可以本地和P/SQL登陆

这里已经可以确认的是监听需要重建,生产库需要启动,研发人员怕恢复有问题要求先将测试实例删除,测试实例删除之。

恢复步骤:

1、netca重建监听,lsnrctl status确认信息正确

2、启动生产库

因为是宕机故障,于是按照nomount~mount~open的顺序启动数据库

startup nomount;

记录一次ora-01078错误的排错_ora-01078

报错找不到pfile文件,what????spfile明明就存在怎么去找pfile了???算了直接windows使用文档编辑器打开spfile复制重新生成一个pfile文件,然后将spfile改名备份,使用pfile启动

然而我天真了。。。。使用pfile启动依然报错找不到,但是pfile明明就在那里啊!!!!!EMMM。。。。。。

该死的windows系统难道是文件夹权限问题??但是不应该啊,$ORACLE_HOME/database目录是公共的啊,于是查看目录权限

记录一次ora-01078错误的排错_ora-01078_02

这。。。 生产库的spfile权限居然是0815测试库的,到上一级目录查看,整个dbs目录的权限都是如此。。。。

难怪启动生产库提示找不到pfile,不管是原来的spfile还是我手工生成的pfile,权限都不对,windows里面Oracle的每个实例在services.msc里面都是有注册服务的,所以启动的时候也是会用实例服务的账户去启动!不明白为什么研发建个新实例会覆盖这么多权限,连database目录权限都变成了新建测试实例的服务账户了!

于是手工将生产库实例的服务账户加入权限,这里提示下,如果你只是单纯的点击添加用户按钮你会发现怎么也找不到oracle实例的服务账户的,这里需要手工输入--但是实在容易写错,于是找到生产库的服务,查看属性

记录一次ora-01078错误的排错_ora-01078_03

直接将此账户名复制即可,将database目录和下面相关生产库的spfile全部恢复正常后再来启动数据库

alter database mount;

alter database open;

然而在open时报错了:

记录一次ora-01078错误的排错_数据库_04

重新shutdown immediate之后再次mount然后open依然报错找不到数据文件!好吧,发现提示找不到的数据文件居然在$ORACLE_HOME/database目录,而不是在datafile应该待的目录里。。。这明显是添加datafile的时候没有指定路径导致的,而且这后缀。。。

之前只将生产库spfile和orapw文件恢复权限,并未修改这些后缀DAT的文件,于是将后缀DAT的文件全部恢复权限。

记录一次ora-01078错误的排错_oracle_05

顺利启动数据库,应用连接测试正常!

1、为什么一开始查看spfile确认库还在不在?因为监听已经看不到生产库实例了,但是可以看到测试库实例,而且以前发生过研发删测试库结果错删生产库的惨剧!至于误删表的情况,那就。。。。。。

2、监听为什么被修改?研发说的是连不上生产库后,他自行百度了一下修改的。。。EMMM

3、如果将services.msc里面的实例对应的服务关闭掉的话,那么在sqlplus中启动对应实例是会报错的!

4、本次故障技术原因是$ORACLE_HOME/database整个目录(含子目录和文件)权限被修改为新建的测试实例服务账户导致的,但是研发已经无法确认自己怎么创建的测试库了,无法溯源了,所以无法实验重现这个$ORACLE_HOME/database目录权限的步骤了,至少我自己测试创建两个实例也不会有这个问题。

5、在生产数据库服务器上部署测试环境、以及部署其他虚拟化软件都是及不规范的!

  • 打赏
  • 1
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK