【发布时间】:2019-10-17 21:23:38
【问题描述】:
第一次与 Oracle 建立 ODBC 链接。我已经在 \hs\admin 中设置了 listener.ora、tnsnames.ora 和 init 文件,但是数据库链接总是失败:
ORA-28545: error diagnosed by Net8 when connecting to an agent
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: preceding 2 lines from EXTLINK
28545. 0000 - "error diagnosed by Net8 when connecting to an agent"
*Cause: An attempt to call an external procedure or to issue SQL
to a non-Oracle system on a Heterogeneous Services database link
failed at connection initialization. The error diagnosed
by Net8 NCR software is reported separately.
*Action: Refer to the Net8 NCRO error message. If this isn't clear,
check connection administrative setup in tnsnames.ora
and listener.ora for the service associated with the
Heterogeneous Services database link being used, or with
'extproc_connection_data' for an external procedure call.
Vendor code 28545
没有出现跟踪文件,这让我觉得初始化文件甚至没有被读取。我可以使用 Access 连接到 ODBC 数据库,所以我知道它可以工作。 ODBC 驱动程序和 DG4ODBC 都是 64 位的。
这是我迄今为止尝试过的:
- 我将两个文件中的 HOST 设置为主机名、IP 地址和 [HOSTNAME].[DOMAIN].local,但没有任何更改。
- 我使 tnsnames.ora 和 listener.ora 中的连接地址(PROTOCOL/HOST/PORT)相同,但没有变化。
- 我用随机垃圾替换了侦听器的 HOST,然后 TNSPING 失败,否则它不会这样做。
- 我复制了 hs\admin 中的 tnsnames.ora.sample、initgd4odbc.ora 和 listener.ora.sample 文件,最后在没有 ODBC 源的情况下进行了测试连接;但它以同样的方式失败,没有生成跟踪文件。
- 我在 listener.ora 中为 SID_NAME 和 tnsnames.ora 中 CONNECT_DATA 中的 SID 放置了随机字符,但仍然出现相同的错误,似乎没有其他影响。
这里是 ora 文件。一些名称已更改以保护机密性,但其他方面保持不变。
tnsnames.ora:
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.[DOMAINNAME].local)
)
)
EXTLINK=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST = [HOSTNAME])(PORT=1521))
(CONNECT_DATA=(SID=EXTLINK))
(HS=OK)
)
listener.ora:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\[MYUSERNAME]\virtual\product\12.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLSONLY:C:\app\[MYUSERNAME]\virtual\product\12.2.0\dbhome_1\bin\oraclr12.dll")
)
(SID_DESC=
(SID_NAME=EXTLINK)
(ORACLE_HOME=C:\app\[MYUSERNAME]\virtual\product\12.2.0\dbhome_1)
(PROGRAM=dg4odbc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = [HOSTNAME])(PORT = 1521))
)
)
CONNECT_TIMEOUT_LISTENER = 0
%ORACLE_HOME\hs\admin\initEXTLINK.ora:
# Windows
HS_FDS_CONNECT_INFO = EXTLINK
HS_FDS_TRACE_LEVEL = 255
HS_FDS_FETCH_ROWS=1
HS_KEEP_REMOTE_COLUMN_SIZE = LOCAL
#HS_NLS_NCHAR=UCS2
HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P1
连接字符串:
CREATE PUBLIC DATABASE LINK EXTLINK CONNECT TO "Username" IDENTIFIED BY "Pass" USING 'EXTLINK';
【问题讨论】: