通过数据库链接连接Oracle和SQL Server

9
我正在尝试从UNIX上的Oracle 10G连接到一个Windows上的SQL Server数据库。我已经查看了手册,但承认我发现文档很难理解。似乎有几个选项可供使用,但是没有一个文档描述每个选项如何工作。
举个例子,我已经收到了关于需要连接的数据库(即SQL Server数据库)的以下信息:
用户名 密码 数据库名称[假设数据库名称为data_extract]
为了连接上述内容,我进行了以下更改: $ORACLE_HOME/hs/admin/inithsodbc.ora
  HS_FDS_CONNECT_INFO = data_extract
  HS_FDS_TRACE_LEVEL = 0

$ORACLE_HOME/network/admin/tnsnames.ora

  sqlserver.db =
          (DESCRIPTION =
                  (ADDRESS = (protocol=tcp)(host=10.10.10.10)(port=49400))
                          (connect_data = (sid=data_extract))
                          (hs=ok)
          )

$ORACLE_HOME/network/admin/listener.ora

  LISTENER =
    (DESCRIPTION_LIST =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = merlin)(PORT = 1525))
      )
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
      )
    )

  SID_LIST_LISTENER =
    (SID_LIST =
      (SID_DESC =
        (SID_NAME = PLSExtProc)
        (ORACLE_HOME = /u/app/oracle/product/10.2.0/db)
        (PROGRAM = extproc)
      )
      (SID_DESC =
        (GLOBAL_DBNAME = db1.mydb.co.uk)
        (ORACLE_HOME = /u/app/oracle/product/10.2.0/db)
        (SID_NAME = billdb)
      )
      (SID_DESC =
          (SID_NAME = data_extract)
          (ORACLE_HOME = /u/app/oracle/product/10.2.0/db)
          (program = hsodbc)
      )
    )

注意:在listener.ora文件中,我仅添加了最后一个SID_DESC条目。
然后,我按照下面所示创建了数据库链接。
  create database link sqlservdb using 'sqlserver.db';

当我试图访问一个表时,我会收到以下错误提示:

  sqlplus> select * from TESTTABLE@sqlservdb;
  select * from TESTTABLE@sqlservdb
                             *
  ERROR at line 1:
  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 ORASQLSERVER

我有几个问题不太确定:

  • 我在哪里指定用户名和密码以访问从Oracle数据库到SQL Server数据库的SQL Server?
  • 在网上阅读了一些资料后,我看到有些人提到DSN数据源。有人告诉我我已经拥有所需的所有信息。这是正确的吗?还是我需要其他东西?
  • 我在inithsodbc.ora和tnsnames.ora中指定的sid实际上是SQL Server数据库。这是正确的吗?

如果对以上内容有任何帮助,将不胜感激。谢谢。


你的 Oracle 数据库运行在哪个平台上? - cmutt78
Oracle 10G正在Unix上运行,而SQL Server数据库正在Windows上运行。谢谢 - ziggy
你尝试过提供用户名和密码吗?CREATE DATABASE LINK sqlservdb CONNECT TO myuser IDENTIFIED BY mypass USING 'sqlserver.db'; 你尝试过不带点的连接名称吗(例如 sqlserver)? - arnep
有人能否确认一下我是否需要安装第三方驱动程序才能使其工作。我在几篇文章中看到了矛盾的信息。 - ziggy
2个回答

4

我使用了Data Direct驱动程序,这些驱动程序必须在Oracle UNIX机器上进行配置。您必须在UNIX中创建ODBC连接,才能看到SQL Server。(至少我一直是这样做的)


3
为了创建一个到SQL Server的数据库链接,您需要将连接名称和密码用双引号括起来,如下所示:
create database link mysqlink 
connect to "myuser" identified by "mypassword" using 'servername';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接