最近生产上的数据库升级到了11.2.0.4当前最新的PATCH——170418,但是在使用sqlplus登录数据库进行操作时,发现与以往登录时不同的地方。
打PATCH以前登录时的截图:
打PATCH之后 登录时的截图:
从截图上直观看到的是登录时的信息没有显示出来,但实际上是所有以前对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
没有任何反应,又想到调用SQL文件可以忽略后缀,再次尝试
从上图中看到期望的显示。
难道是因为打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)