PB9使用Instant Client连接ORACLE12c需要注意以下几点:
要安装正确的版本,客户端是32位的就用32位,是64位的就用64位,这里指的客户端不是操作系统,是发起连接的软件,如我在WIN7 64位系统上通过PB9连接ORACLE,因为PB9是32位的,就需要用32位的Instant Client,PL/SQL也分32位和64位版本,要区别对待对不同的Instant Client才可以。PL/SQL需要在启动登录时先取消,进入后在菜单上选工具-首选项进行参数设置
设置好主目录和oci.dll的文件路径后保存设置关闭再重新打开就可以了。在同一个操作系统中,Instant Client是可以32位和64位并存的
Instant Client 11.2.0.3.0之前的版本最好不用,因为PB9只能用DataBase Profile中的ORACLE 8i接口连接(不知道为啥,懒得研究了),版本过低连接时会报:ORA-28040: No matching authentication protocol。Oracle 12c的参数SQLNET.ALLOWED_LOGON_VERSION默认等于11。当我们使用11g JDBC之前版本的thin驱动连接的时候,就会报错。解决方法:在数据库服务器上的oracle/network/admin/sqlnet.ora文件添加一行SQLNET.ALLOWED_LOGON_VERSION=8,重启数据库,重新连接数据库,又有报错:ORA-01017: 用户名/口令无效; 登录被拒绝。将Instant Client的版本直接升级到12.2.0.1.0-32位,问题解决!
在使用PB连接到ORACLE时,需要将Instant Client中的DLL文件复制到C:\Program Files (x86)\Sybase\Shared\PowerBuilder目录中一份,否则会提示找不到oci.dll or ora804.dll
Instant Client的注册很简单,在系统环境变量中增加几个变量就可以了
NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK(最好和服务器端相同)
ORACLE_HOME = D:\工作\PLSQL\InstantClient12.2\instantclient_12_2
TNS_ADMIN = D:\工作\PLSQL\InstantClient12.2\instantclient_12_2
如果要在32位和64位之间切换,更改ORACLE_HOME和TNS_ADMIN两个变量中的路径就可以了
关于网上资料
环境变量要建立在用户变量中,经测试不行,必须都放在系统变量中。
添加PATH路径,我没加,也正常。
编辑并导入注册表,我没编辑导入,没发现问题
PB9比较傻,在不断的测试过程中,不知道是因为版本的问题还是什么,忽然发现可以连接了,没有任何报错,就尝试通过PB INSERT一条记录到ORACLE,也没报错,可是到服务器上一查,什么都没有!连接正常,执行SQL正常,就是没数据,而且即便把网络连接断开或把ORALCE停掉,PB也还是一切正常的,好像所有的操作目标都是空的一样!