【问题标题】:How do you setup a linked server to an Oracle database on SQL 2000/2005?如何在 SQL 2000/2005 上设置与 Oracle 数据库的链接服务器?
【发布时间】:2010-09-23 09:15:51
【问题描述】:

我能够创建并执行一个 DTS 包,将表从远程 Oracle 数据库复制到本地 SQL 服务器,但我想将与 Oracle 数据库的连接设置为链接服务器。

DTS 包当前使用具有以下属性的 Microsoft OLE DB Provider for Oracle

  • 数据源:SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=acc)));uid=*UserName*;pwd=*UserPassword*;
  • 密码:用户密码
  • 用户 ID:用户名
  • 允许保存密码:true

如何使用上面定义的数据源将链接服务器设置为 Oracle 数据库?

【问题讨论】:

    标签: sql sql-server oracle


    【解决方案1】:

    我能够将链接服务器设置到远程 Oracle 数据库,这最终是一个多步骤过程:

    1. 在 SQL Server 上安装 Oracle ODBC 驱动程序。
    2. 为 SQL Server 上的 Oracle 数据库创建系统 DSN。
    3. 使用系统 DSN 在 SQL Server 上创建链接服务器。

    第 1 步:在服务器上安装 Oracle ODBC 驱动程序

    一个。下载必要的Oracle Instant Client 包:Basic、ODBC 和 SQL*Plus(可选)

    b.将包解压缩到 SQL 服务器上的本地目录,通常为 C:\Oracle。这应该会产生一个类似 C:\Oracle\instantclient_10_2 的 [directory],这将是本答案其余部分中引用的 [directory] ​​的值。

    c。在包含以下内容的即时客户端 [目录] 中创建一个名为 tnsnames.ora 的文本文件:

    OracleTnsName = 
    (
      DESCRIPTION=
      (
        ADDRESS = (PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521)
      )
      (
        CONNECT_DATA = (SERVICE_NAME=acc)
      )
    )
    

    注意:实际的 HOSTPORTSERVICE_NAME 会因您要建立连接的 Oracle 服务器而异。这些信息通常可以使用 listeners 下的 Oracle 网络客户端工具找到。

    OracleTnsName 可以是您希望分配给 Oracle 数据源的任何名称,将在设置系统 DSN 时使用。如果需要,您还可以使用上述语法在同一个 tnsnames.ora 文件中定义多个 TNS 名称。

    d。将[目录]添加到系统PATH环境变量中。

    e。创建一个名为 TNS_Admin 的新系统环境变量,其值为 [directory]

    f。执行 [directory]\odbc_install.exe 实用程序以安装 Oracle ODBC 驱动程序。

    g.建议您重新启动 SQL 服务器,但可能没有必要。此外,您可能希望为 SQL 服务器和 SQL 代理用户身份授予此目录的安全权限。

    第 2 步:创建使用 Oracle ODBC 驱动程序的系统 DNS

    一个。打开 ODBC 数据源管理器 工具。 [ 管理工具 --> 数据源 (ODBC) ]

    b.选择系统 DSN 选项卡,然后选择添加按钮。

    c。在驱动程序列表中,选择 Oracle in instantclient {version}。 (例如 'Oracle in instantclient 10_2'),然后选择 Finish 按钮。

    d。指定以下内容:

    • Data Source Name: {系统 DSN 名称}
    • Description: {留空/空}
    • TNS Service Name:应该列出您在tnsnames.ora文件中定义的OracleTnsName,选择它作为值。
    • 用户 ID:{Oracle 用户名}

    e。选择测试连接按钮。系统应提示您提供 {Oracle 用户密码}。如果一切顺利,测试就会成功。

    第 3 步:在 SQL 中创建到 Oracle 数据库的链接服务器

    在 SQL Server 中打开一个查询窗口并执行以下命令:

    EXEC sp_addlinkedserver 
         @server        = '{Linked Server Name}'
        ,@srvproduct    = '{System DSN Name}'
        ,@provider      = 'MSDASQL'
        ,@datasrc       = '{System DSN Name}'
    
    EXEC sp_addlinkedsrvlogin 
         @rmtsrvname    = '{Linked Server Name}'
        ,@useself       = 'False'
        ,@locallogin    = NULL
        ,@rmtuser       = '{Oracle User Name}'
        ,@rmtpassword   = '{Oracle User Password}'
    

    注意:{Linked Server Name} 可以是您在引用 Oracle 服务器时要使用的任何名称,但 {System DNS Name} 必须与您之前创建的系统 DSN 的名称匹配。

    {Oracle User Name} 应与系统 DSN 使用的用户 ID 相同,{Oracle User Password} 应与您用于成功测试 ODBC 连接的相同。有关解决 Oracle 链接服务器问题的信息,请参阅 KB 280106

    查询 Oracle 链接服务器

    您可以使用OPENQUERY 在 Oracle 链接服务器上执行传递查询,但请注意,对于非常大的记录集,如果您在 pass-通过查询。将ORDER BY 子句从传递查询移到外部选择语句为我解决了这个问题。

    【讨论】:

    • 您好,我发现 [srvproduct] 在调用 sp_addlinkedserver 时与 [datasrc] 具有相同的值。还想问一下,如果安装 Oracle 11g express 和 ODT 与 ODAC 11.1 将能够测试到 Oracle 的链接服务器。
    • 该问题/答案发布于 Oracle 11g 之前的 2008 年。尝试设置新的链接服务器应该是一样的,但我不确定。
    • 感谢您的完美回答。帮助我在几个小时内完成了我的 Oracle 链接服务器的全部设置和工作。补充一点,这似乎适用于 SQL 2012 和 Oracle 11g R2。
    • 在瑞典,我必须再创建一个环境变量才能让我们的元音变音 (åäö) 正常工作:NLS_LANG=SWEDISH_SWEDEN.WE8ISO8859P1
    【解决方案2】:

    我遇到了同样的问题。我和微软通了几个小时的电话,他们没有解决办法。这些“连接超时”设置都没有帮助我。

    为了解决这个问题,我创建了一个 DTS 作业,它运行一个 proc,它每两分钟只更新一行、一列的时间。然后我在 SQL Server 和 Oracle 之间设置了一个复制,计划每 3 分钟将单个单元更改从 SQL 复制到 Oracle。它使连接保持活跃!

    【讨论】:

      猜你喜欢
      • 2014-04-07
      • 2012-05-11
      • 2011-08-22
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多