问题描述
经过 10 多个小时的尝试,我想寻求您的帮助。
我正在尝试在 Powerbuilder 12.5 中连接到 Oracle 数据库“O90 Oracle 9i”。
我的机器关于 Oracle 有点乱(如果实例我有几个 并且我无法完全删除它们)所以我设置了一个虚拟机来测试 它在干净的环境中。
这就是我在干净的机器上所做的:
- 已安装 Powerbuilder 12.5
- 安装了 ERP 软件(我尝试连接的地方)。 ERP 软件发行版带有 \dbms\oracle\bin|network 文件夹。
- 将“C:\facterp\dbms\oracle\bin”(第 2 点中的文件夹之一)添加到 PATH 变量
现在我可以使用 sqltools 连接到服务器(显然它从位于的 tnsnames.ora 读取数据 在第 2 点的其中一个文件夹中)。 在 tnsnames.ora 里面:
GERP_波兰 = (描述 = (ADDRESS_LIST = (地址 = (协议 = TCP)(主机 = server.ip.given.here)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl)
但是,当尝试从 Powerbuilder 连接时,我收到错误 ORA-12154。
我想也许 PB 使用了不同的 tnsnames.ora 文件(如果我删除或修改 错误的文件相同)。但是没有其他文件。据我所知 Powerbuilder 使用 ORACLE_HOME 变量作为 tnsnames.ora 位置。我添加了变量 但问题还是一样。
我的问题:
- 这可能是 32 位与 64 位的问题吗?我知道我应该安装 32 位 Oracle 客户端 使用 32 位 PB,但在这种情况下我不安装任何客户端。我只是使用提供的 文件。这对于 sqltools 来说已经足够了,但对于 PB 来说还不够。
- TNS 包括一行: (SERVICE_NAME = orcl)。 这是否意味着我需要配置和使用 listener.ora?
我承认我还没有弄清楚不同连接方式的整个概念 (平面ora文件/服务/等)
在我的“乱七八糟”的机器上也发生了同样的事情。
非常感谢您为我指明方向。
谢谢,
克里斯。
更新:
我扩展了 ORACLE_HOME 变量:
C:\facterp\dbms\oracle
到
C:\facterp\dbms\oracle\network\admin\oracle
现在 Powerbuilder 连接到数据库,但是当我展开“表”时 treeview 没有表。当我展开“用户”树视图时它崩溃了 整个应用程序。
我实施的更改似乎合乎逻辑(更长的 ORACLE_HOME 路径) 不应该工作 - 在其他地方有一些 ORACLE_HOME% 引用......
解决方法
ORA-12154
通常意味着 TNSNAMES.ORA 不包含您要连接的数据库,或者您使用的工具无法找到 TNSNAMES.ORA。
尝试创建指向包含 TNSNAMES.ORA 文件的目录的 TNS_ADMIN
环境变量。例如,在我的 PC 上,我将其设置为
TNS_ADMIN=C:\0_Oracle_library
现在,每个 Oracle 软件都知道在哪里查看。因为,它们中的每一个都包含自己的 \network\admin
或类似的目录,该目录具有自己的 TNSNAMES.ORA。无论何时添加新数据库,您都必须维护所有这些 TNSNAMES.ORA 文件(这变得乏味)。但是,使用 TNS_ADMIN
,您只保留该文件的一个副本 - 没问题。
那么,试试吧。它不必是一个新目录,您可以使用现有目录,例如
TNS_ADMIN=C:\facterp\dbms\oracle\bin
(或任何您的 TNSNAMES.ORA 文件所在的位置)。
,我忘了提到我已经尝试添加 TNS_ADMIN 变量。没有任何变化。
但是,我显然缺少一些东西:
在尝试我提供的连接时在 Powerbuilder 中:
*profile name* (probably has not meaning for this conversation,just internal name)
*server*: server.ip.given.here/orcl
*login&password*
我在 tnsnames.ora 文件中看不到 Oracle 应该查找的任何内容。它是否应该从下面的 tnsnames.ora 中查找“GERP_POLAND”?如果是,我在连接尝试中看不到任何对它的引用。
GERP_POLAND = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = server.ip.given.here)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME =) orcl)
如果我将 server.ip.given.here/orcl 修改为 server.ip.given.here/orclblabla,我会得到相同的结果(似乎已连接 - 绿色复选标志)但未连接。
顺便说一下 - 使用 PowerBuilder 跟踪信息:
SELECT OWNER,TABLE_NAME,TABLE_TYPE FROM SYS.ALL_CATALOG --> 空结果 SELECT USERNAME FROM SYS.ALL_USERS --> 应用程序崩溃
无论如何 - 我觉得我必须在这里遗漏一些基本的东西......
非常感谢您的帮助。