1 打开SQL Advantage报错:Internal failure while initializing SQL Advantage
前几天在用sybase win客户端(OC 12.5.1)的时候,遇到了一个问题。每次打开SQL Advantage 12.5.1后,如果强制关闭窗口(例如有时界面卡死强退),那么再次打开就会报错:
1.Internal failure while initializing SQL Advantage. 2.Please check that Open Client is configured correctly. 正如下图所示,奇怪的是如果这时候重启电脑的话,那么打开SQL Advantage就正常。
2 查看报错信息:sybinit.err文件
正如下图所示,每次初始化SQL Advantage失败后,都会在这个文件中显示:
The context allocation routine failed when it tried to load localization files!!
One or more following problems may caused the failure
。按照文件中的提示,检查了SYBASE的环境变量值确实是D:\sybase,同时在D:\sybase\locales\locales.dat文件中LANG的值也为zh_CN。
3 猜想:OC客户端产生系统临时文件
在GG和BD无果后,寻思为什么SQL Advantage在电脑重启后又能够正常工作?当时“最可能”的猜想就是:在强制关闭前,OC端会产生一些临时文件,保存一些配置信息,电脑关闭后会自动清除这些文件。于是做了一个测试,在报错之后,立马使用CCleaner清理系统文件。然后再次打开SQL Advantage,结果还是报错。猜想失败!!!
4 系统环境变量:windows中“/”和“\”
折腾了几次,还是没找到方法。大致看了下GG的搜索结果,提到了PATH环境变量。于是查看了下自己的。结果发现关于SYBASE需要的几个配置全部都有而且也都对。认真比较了几次,还是没发现异常。突然发现在PATH配置内容的末尾竟然出现了不和谐因素:“/”。如图所示,这是之前在安装jdk时,配置的环境变量。平常没注意在windows中设置目录要使用“\”,而不是“/”,不然会导致出现找不到路径的错误。于是把PATH变量中的两个“/”改成“\”,然后打开SQL Advantage,竟然正常了!
5 延伸:其它不当配置也会报同样的错误
在搞定后,特地上GG搜索了下。其中,sybase官方论坛上的两个提问比较有代表性
1 打开SQL Advantage报错:Internal failure while initializing SQL Advantage
在sybase官方论坛上找到了两个比较有代表性的提问。二者共同的特点就是之前安装的都是SQL Advantage 11.5.1.3的版本,然后想使用12.5.1的版本(博主只装了12.5.1)。在安装好这两个客户端后,打开SQL Advantage就会报错。根据这两个提问并结合自己的理解,列出解决该问题的参考方法:
2.1 提问1:SQL Advantage 12.5.1 and OC 12
提问原地址:点击查看。大致的意思就是:之前安装了Open Client 12和SQL Advantage 11.5.1.3 ,由于想要使用最新的SQL Advantage 12.5.1,于是从另外一台电脑上直接拷贝过来。但是由于之前11.5.1.3设置的环境变量导致当尝试运行SQL Advantage 12.5.1的时候,都会报错并在sqladv-12_5的文件夹下面产生一个sybinit.err文件。文件内容和vfhky之前博主遇到的不同:
1.The context allocation routine failed. 2.The following problem caused the failure: 3.Invalid context version. 根据建议:建立一个.bat批处理文件(博主的示例)
1.set SYBASE=D:\Sybase2.set SYBASE_OCS=OCS-12_53.D:\Sybase\sqladv-12_5\sqladv.exe这样设置好OC客户端的环境变量后,发现拷贝过来的sybase客户端还需要添加charsets、ini、locales文件夹。于是添加这些文件夹,最后测试成功。
2.2 提问2:Sybase Central 4.3 and SQL Advantage 12.5
提问原地址:点击查看。大致的意思就是:之前安装过版本11.5.1.3和12.5.4的SQL Advantage ,每次“Open SQL Advantage”的时候,都会报错“Internal failure while initializing SQL Advantage. Please check that Open Client is configured correctly.”。其根本因是由于之前11.5.1.3的版本中的一些DLLS文件最终未删除还在%windows%\system32目录下,而这个目录在系统环境变量PATH中处于优先地位,因此在搜索支持sqladv.exe的Open Client的函数库文件DLLS时,会优先搜索11.5.1.3的DLLS而不是12.5.4的DLLS文件。
根据建议:通过调整在dos窗口中输入set命令查看%SYBASE%和%SYBASE_OCS%的选项是否正确,若否则建立一个batch批处理文件(范例见2.1小节),设置好12.5.4的环境变量%SYBASE%和%SYBASE_OCS%的值。博主后来用set命令查看了自己电脑的系统环境变量和用户环境变量。结果如下图所示。
3 该问题的经验总结
关于“Sybase win客户端打开SQL Advantage 12.5.1报错:Internal failure while initializing SQL Advantag”的问题,主要是环境变量的问题引起的。博主的情况是只安装了SQL Advantage12.5.1的版本,而论坛上两位提问者同时安装了11.5和12.5的版本。博主是把系统环境变量PATH中的一个变量写错了(“\”错写成了“/”),而论坛上的是之前11.5版本的SQLAdvantage的环境变量设置优先于版本12.5或者没有正确设置。因此,解决这个问题的关键在于两个地方:
1.set命令查看系统中SYBASE的环境变量是否设置正确(若否,使用bat批处理文件或者直接使用set命令设置);2.检查系统环境变量PATH中关于%SYBASE%、%SYBASE_OCS%等是否设置为对应的SYBASE安装路径。