2

它可能会回应谁,我们已经在 Redhat Enterprise Linux 5.4 上安装了 Oracle 11g r2。我们正在尝试连接到 Sql Server 2005,在应用一些注释后,下面的错误是我们得到的结果:“ORA-28513 异构远程代理中的内部错误”。


listener.ora 如下:

[oracle@oracledb admin]$ less listener.ora
)
(SID_DESC =
(SID_NAME = dg4msql)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(PROGRAM = dg4msql)
(ENVS=LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/db_1/dg4msql/lib:/u01/app/oracle/product/11.2.0/db_1/lib)
)
)

LOGGING_LISTENER = on

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracledb)(PORT = 1521))
)
)

ADR_BASE_LISTENER = /u01/app/oracle

TRACE_LEVEL_LISTENER = on

tnsnames.ora 如下:

[oracle@oracledb admin]$ less tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

fasdat =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracledb)(PORT = 1521))
)
(CONNECT_DATA =
(SID = fasdat)
)
)
dg4msql =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL= TCP)
(HOST = oracledb)
(PORT = 1521)
)
(CONNECT_DATA=
(SID=dg4msql) )
(HS=OK))

init4msql.ora 如下:

[oracle@oracledb admin]$ less initdg4msql.ora
# This is a customized agent init file that contains the HS parameters
# that are needed for the Database Gateway for Microsoft SQL Server

#
# HS init parameters
#
HS_FDS_CONNECT_INFO=192.168.1.48:1433//NAVISION
# alternate connect format is hostname/serverinstance/databasename
#HS_FDS_TRACE_LEVEL=0
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
#HS_LANGUAGE=turkish_turkey.WE8ISO8859P9
HS_NLS_NCHAR=WE8ISO8859P9
#HS_FDS_TRACE_LEVEL=DEBUG

我们在 Sql Server 2005 上设置了一个名为 'dg4msql' 的系统 dsn,选择驱动程序为 'Sql Server' 和服务器为 'local'

我们很高兴听到解决这个问题的任何想法,

4

1 回答 1

1

您似乎使用的是 MySQL 设置的网关,而不是异构网关(用于 ODBC 连接)。这是该过程的概述

在 SQL Server 上创建一个数据库用户,并通过 Oracle 数据库链接授予它对您要读取的数据库/表的读取权限。

在网关主目录中,您要访问的每个 SQL Server 数据库都应该有一个 init.ora,它位于 $OH/dg4msql/admin 中,格式为 initsid.ora,其中 sid 是要在链接中使用的数据库的名称(例如 initbob.ora)。 ora), 所以创建一个

HS_FDS_CONNECT_INFO=msserver1:1234//Example_Database
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
HS_TRANSACTION_MODEL=READ_ONLY

您现在必须使用现有 SID_LIST 中的附加 SID_DESC 部分将新 sid 添加到网关主目录中的 listener.ora,例如

(SID_DESC =
(SID_NAME=bob)
(ORACLE_HOME=/oracle/gateway/product/11.2.0)
(ENVS=LD_LIBRARY_PATH=/oracle/gateway/product/11.2.0/dg4msql/driver/lib;/oracle/gateway/product/11.2.0/lib)
(PROGRAM=dg4msql)
)

您现在应该停止并重新启动网关侦听器,以便新的 sid 变为活动状态。注意重装是不够的。

您现在必须在 tnsnames.ora 文件中为您将在其中创建链接的每个数据库的侦听器添加新的 sid。您不需要在网关主页中执行此操作,除非它也是您将在其中创建数据库链接的数据库主页。

bob =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = severname.example.com)(PORT = 1690))
(CONNECT_DATA = (SID = bob))
(HS = OK)
)

注意:主机和端口用于网关而不是 SQL Server 数据库

在每个需要链接到 MS-SQL 数据库的数据库中,您应该创建一个到新网关 sid 的数据库链接。

CREATE PUBLIC DATABASE LINK bob
CONNECT TO "ms_user" IDENTIFIED BY "ms-passwd" USING 'bob';

其中 ms-user 和 ms-password 是您在开始时创建的 SQL Server 用户。

现在您可以测试新的数据库链接

SELECT COUNT(*) FROM "Table_Name"@bob;

完成此工作后,您可以更改 initsid.ora 文件以添加参数以适合您的连接。如果您这样做,您可以通过网关轻松添加和管理许多不同的数据库。

于 2011-03-24T13:16:15.260 回答