Oracle Provider for OLE DB

Oracle (Oracle Provider for OLE DB) (8.1.7.3.0) 允许对 Oracle 数据库中的数据进行分布式查询。对 Oracle (Oracle Provider for OLE DB) 的支持如下:

Oracle 32 位

仅支持进程外访问接口

Oracle 64 位

创建链接服务器以访问 Oracle 数据库实例

  1. 确保运行 Microsoft SQL Server 的服务器上的 Oracle 客户端软件处于访问接口所要求的级别。Oracle (Oracle Provider for OLE DB) (8.1.7.3.0) 要求安装 Oracle Client 8.1.7.0。

  2. 在运行 SQL Server 的服务器上创建指向 Oracle 数据库实例的别名。有关详细信息,请参阅 Oracle 文档。

  3. 执行 sp_addlinkedserver 创建链接服务器,同时指定 OraOLEDB.Oracle 作为 provider_name,并指定 Oracle 数据库的别名作为 data_source。

    以下示例假定已将别名定义为 DQORA8:

    exec sp_addlinkedserver @server='OrclDB', 
        @srvproduct='Oracle',
        @provider='OraOLEDB.Oracle', 
        @datasrc='DQORA8'
    
    安全说明安全说明

    此示例不使用 Windows 身份验证。密码未经加密而进行传输。在保存到磁盘的数据源定义和脚本、备份以及日志文件中可能会看到密码。在此类连接中,切勿使用管理员密码。有关特定于环境的安全指南,请咨询您的网络管理员。

  4. 使用 sp_addlinkedsrvlogin 创建从 SQL Server 登录名到 Oracle 登录名的登录名映射。

    以下示例通过使用 Oracle 登录名 OrclUsr 和密码 OrclPwd,将 SQL Server 登录名 Joe 映射到在步骤 3 中定义的链接服务器:

    sp_addlinkedsrvlogin @rmtsrvname = 'OrclDB', 
       @useself = 'false', 
       @locallogin = 'Joe', 
       @rmtuser = 'OrclUsr', 
       @rmtpassword = 'OrclPwd'
    

在 Oracle 链接服务器中引用表时,请遵循以下规则:

  • 如果在 Oracle 中创建的表名和列名没有使用带引号的标识符,请使用字母全部大写的名称。

  • 如果在 Oracle 中创建的表名和列名使用了带引号的标识符,请使用与在 Oracle 中创建名称时所用字母完全相同的字母大小写形式。

  • INSERT 语句应为表中的所有列提供值,即使表中的某些列可能为 NULL 或具有默认值。

  • 此访问接口不支持将 datetime 文字作为参数按以下格式直接传递:

    EXEC 'string' '<datetime-literal>' AT <oraclelinkedserver>
    

    例如,不支持按以下方式使用 datetime 文字 '14-sep-94':

    EXEC('INSERT INTO DYNORCL.SALES(ID, ORD_NO, ORD_DATE, QTY) 
       VALUES (?, ?, ?, ?)', '6380', '6871', '14-sep-94', 5) AT OrclDB
    

    而是应创建一个 datetime 变量,为其赋文字值,然后调用将变量作为参数的 EXEC:

    DECLARE @v1 datetime
    SET @v1 = CONVERT(datetime,'14-sep-94')
    EXEC('INSERT INTO DYNORCL.SALES(ID, ORD_NO, ORD_DATE, QTY) 
       VALUES (?, ?, ?, ?)', '6380', '6871', @v1, 5) AT OrclDB
    

限制

SQL Server 不支持对 Oracle 表使用 AVG 聚合函数,因为 Oracle 访问接口返回 OLE DB 类型 DBTYPE_VARNUMERIC,而 SQL Server 不支持 DBTYPE_VARNUMERIC。例如,下面的代码将返回错误:

SELECT AVG(QTY)
FROM ORA..RPUBS.SALES

若要避免错误,请使用 OPENQUERY。例如:

SELECT *
FROM OPENQUERY(ORA,
   'SELECT CAST (AVG(QTY) AS numeric)
   FROM ORA..RPUBS.SALES')

注册表项

若要启用用于 Oracle 的 OLE DB 访问接口,以使用 Oracle 客户端软件,必须从命令行运行注册表文件来修改客户端的注册表。不能同时运行客户端软件的多个实例。下表列出了这些文件,这些文件位于 Microsoft 数据访问组件 (MDAC) 的安装目录结构中。此位置通常为 C:\Program Files\Common Files\System Files\OLE DB。

Oracle 客户端

Windows NT 或 9x

Windows 2000

7.x

mtxoci7x_winnt.reg

mtxoci7x_win2k.reg

8.0

mtxoci80_winnt.reg

mtxoci80_win2k.reg

8.1

mtxoci81_winnt.reg

mtxoci81_win2k.reg