最近生产上的数据库升级到了11.2.0.4当前最新的PATCH——170418,但是在使用sqlplus登录数据库进行操作时,发现与以往登录时不同的地方。

打PATCH以前登录时的截图:

wKioL1k01Kvg22-DAAA2pksFm5w245.png打PATCH之后 登录时的截图:

wKiom1k01PXSYv63AAAW1A1V1bQ420.png

从截图上直观看到的是登录时的信息没有显示出来,但实际上是所有以前对sqlplus的配置都没有生效。这是什么原因呢。

先来看sqlplus启动过程:

sqlplus在启动时会自动运行两个脚本:glogin.sql、login.sql这两个文件

执行顺序为

  1.默认在在$ORACLE_HOME/sqlplus/admin路径下查找glogin.sql文件执行

  2.默认在在当前路径下查找login.sql文件执行,若未查找到对应文件则执行3

  3.判断是否设置SQLPATH环境变量,如果设置了该变量则在对应路径下查找并执行,未找到则停止查找

可以在login.sql文件中加入一些常用设置使用SQLPLUS时更便捷。

当前系统中设置了SQLPATH环境变量,目录下也有login.sql文件,里面有对sqlplus做的所有设置。那为什么环境变量都没有变化,配置却不能生效了呢?

尝试直接调用login.sql

wKioL1k01k6Q_AoyAAAGifLbofg711.png

没有任何反应,又想到调用SQL文件可以忽略后缀,再次尝试

wKiom1k01pKBAUYeAAAgUC2vJX8256.png从上图中看到期望的显示。

难道是因为打PATCH包导致的?于是在虚拟机做测试,由于虚拟机上已经打到最新的PATCH了,直接测试调用login.sql文件与生产上的现象一致。于是回滚最新的PATCH

opatch rollback -id 24732075

回滚最新的PATCH后,再次sqlplus登录数据库,login.sql文件中的对sqlplus设置恢复正常。

现在还不能确定是BUG还是升级的方式有问题。

处理方式:既然可以直接调用login,就在glogin.sql中加入@$SQLPATH/login这一条,登录恢复如初。


参考:http://www.jb51.net/article/78543.htm

http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_two.htm#i1133106

How to Maintain SQL*Plus System Variable/Column Format Settings (文档 ID 1039268.6)