因为 plsql 不支持 64位 oracle 客户端,所以plsql 必须使用 oracle 的 32位 instanclient 包。 解压缩后放一个目录,例如: D:Oracleinstantclient_10_2
ps: 用 10g 的32位 instantclient 包也可以连接 11g oracle 64位库
1、进 plsql 后,在首选项下设置 oracle home 的地址:D:Oracleinstantclient_10_2, 同时设置 oci 的位置: D:Oracleinstantclient_10_2oci.dll
2、需要在系统的环境变量内设置 tns_admin, 值为 D:Oracleinstantclient_10_2, 这让 plsql 启动时知道去哪找 tnsnames.ora 文件
3、环境变量还需要设置 nls_lang, 值为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK, 当然这根据你自己的数据库来
一般情况下这样后, plsql 就可以用了
如果此时登陆发现提示 无法解析指定的连接标识符,或类似的语句, 那多半是因为监听程序没设置好了。 默认监听程序的监听列表中不指定具体的oracle 实例是哪个, 碰到这种情况就把具体的监听实例描述加上就好了(红色那段), 具体原因不知道... 配置完后,记得去重启 oracle 的listener 服务。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = d:oracleproduct11.2.0dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:d:oracleproduct11.2.0dbhome_1inoraclr11.dll")
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = d:oracleproduct11.2.0dbhome_1)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = Tyson-mac)(PORT = 1521))
(ADDRESS = (PROTOCOL = NMP)(SERVER = TYSON-MAC)(PIPE = ORAPIPE))
)
)
注意: 这个位于oracle 11g安装目录下的 listener.ora 文件, 例如:D:Oracleproduct11.2.0dbhome_1NETWORKADMIN
而不是 instantclient 下的, 因为oracle 的服务用的,指向的还是那边
==========================
接着再补充:
注意: 最好使用配套的32位 instant, 例如, 服务器是 11.2 64位,则下载 11.2 的 32位版本
另外, 为了让其他32位应用程序使用正常, 需要设置环境变量,具体设置如下:
ORACLE_HOME :是所有需要关联更多oracle 文件时去取的根目录, 如果你错误地设置为了 原先的 instant 的地址,那么你运行 sql plus 之类的程序就会提示错误。实验发现32位程序也需要指向 64 位的oracle根目录才正常(这点为什么没细想)
TNS_ADMIN: 这是取 oracle 服务列表的目录, 设置后,plsql 才能正确列表列出并链接服务器。 所以这可以设置 instant 目录,并把 tnsnames.ora 文件放此目录下
PATH: 这是其他32位应用程序找到 oci 等dll文件的搜索路径,如果不设置自然报错说没有找到组件啥的。所以,需要设置 32位的 instant 目录
NLS_LANG: 这决定了你应用程序所链接的数据库存储的数据是用的什么格式的数据。 一般可设置为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 如果不设应该默认是的是 unicode, 也就是3位字节存储, 那你应用程序打开后看到的从数据库中调入的数据很可能是乱码