2

我从 Oracle 尝试这个查询:

select * from "a_table"@Postgres;

这是我收到的错误消息:

ORA-28545: error diagnosed by Net8 when connecting to an agent
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: précédant 2 lines de RECORD
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.
Erreur à la ligne 1, colonne 25

这是tnsnames.ora

Postgres =
   (DESCRIPTION =
     (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
   )
   (CONNECT_DATA =
     (SID = RECORD)
   )
   (HS=OK)
  )

这是listener.ora

LISTENER_HS =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1525))
        (ADDRESS = (PROTOCOL = IPC)(KEY = PNPKEY))
      )
    )
  )

SID_LIST_LISTENER_HS =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = RECORD)
      (ORACLE_HOME = /oracle/product/10.2.0)
      (PROGRAM = hsodbc)
      (ENVS = "LD_LIBRARY_PATH=/oracle/product/10.2.0/lib32:/oracle/product/10.2.0/hs/lib32:/user/lib")
    )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /oracle/product/10.2.0)
      (PROGRAM = extproc)
    )
  )

注意启动监听器后,这里是输出

$ lsnrctl status LISTENER_HS

LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 22-FEB-2012 13:45:09

Copyright (c) 1991, 2006, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1525)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_HS
Version                   TNSLSNR for Linux: Version 10.2.0.3.0 - Production
Start Date                22-FEB-2012 13:45:05
Uptime                    0 days 0 hr. 0 min. 3 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      ON
Listener Parameter File   /oracle/product/10.2.0/network/admin/listener.ora
Listener Log File         /oracle/product/10.2.0/network/log/listener_hs.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1525)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "RECORD" has 1 instance(s).
  Instance "RECORD", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

这里initPostgres.ora

HS_FDS_CONNECT_INFO = Postgres
HS_FDS_TRACE_LEVEL = DEBUG
HS_FDS_TRACE_FILE_NAME = /oracle/product/10.2.0/hs/log/postgres.trc
HS_FDS_SHAREABLE_NAME = /usr/lib/psqlodbc.so

set ODBCINI= /etc/odbc.ini

/oracle/product/10.2.0/hs/log/record.trc是空的。

我错过了什么?

Oracle 10gR2
Linux RedHat 64 位

Postgresql 8.3
Linux RedHat 64 位

编辑: 当我尝试手动检查 ODBC 驱动程序是否已启动并正在运行时,这就是我得到的:

$ isql postgres USER PASS -v
[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/psqlodbc.so' : /usr/lib/psqlodbc.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou répertoire de ce type
[ISQL]ERROR: Could not SQLConnect
4

1 回答 1

2

我在 Oracle 论坛上问过同样的问题,我得到了回复。

简单地说,我不能hsodbc在 Linux 64bit 上使用,Linux 32bit 没有端口。相反,我必须使用DG4ODBC不兼容的 Oracle 10.2.0.3。然后我的选择是:

  • 为 ODBC 11.2.0.3 安装数据库网关
  • 从 Oracle 10.2.0.3 迁移到 Oracle 10.2.0.4 或更高版本
  • 或应用补丁 5965763

详细回复在这里

于 2012-02-22T17:27:50.343 回答