本文是原创文章,转载请注明出处:http://blog.csdn.net/msdnchina/article/details/44560623
警示:
禁止在生产时段改动涉及到oracle的任何东西。
描述:
某单位的数据库是运行在windows服务器上。oracle database的版本是817
某工程师在该windows服务器上安装了oracle9i的client,然后又卸载掉了Oracle 9i的client,至于还做过什么其他操作,未知。
等我方工程师接手时,发现注册表里边并没有HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE这一项。
注意:
经过我做实验测试Oracle 9i client_home的删除(之前已经安装了oracle 817),得出结论:
1.卸载Oracle 9i client_home不会导致 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE被删除。
因此,HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE的缺少,是由于其他原因造成的。
熟悉windows下oracle的人都知道,这意味着什么:
意味着Oracle数据库实例无法通过Windows服务OracleServerXXX被startup,Oracle监听器无法启动(无论通过Windows服务中的监听服务还是通过lsnrctl start)。
最终结论:虽然卸载windows数据库服务器上的Oracle client貌似没啥问题,不过windows比linux麻烦的地方就在于注册表,因此还是小心为好:
一、禁止在生产时段卸载windows数据库服务器上的Oracle client,
二、禁止在生产时段改动涉及到oracle的任何东西
比如我遇到的案例:$ORACLE_HOME下的network/admin/sqlnet.ora 里,有如下的内容:
# SQLNET.AUTHENTICATION_SERVICES = (NTS)
熟悉的人都知道,这么设置会导致如下问题:
F:\oracle\product\10.2.0\db_1\BIN>sqlplus / as sysdba SQL*Plus: Release 10.2.0.4.0 - Production on Mon Mar 23 10:51:22 2015 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. ERROR: ORA-01031: insufficient privileges Enter user-name:
而地纬的医保程序就是要求db server上的sqlnet.ora 中的内容是# SQLNET.AUTHENTICATION_SERVICES = (NTS),否则医保程序无法运行。
其实,当时我也考虑过先把#删掉,不过后来想了老盖说过的话,我就没动生产环境,就是这么一个想法,救了我一次:我要是把#删掉的话,医保的前台app肯定就连不上db了。