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 数据库实例
确保运行 MicrosoftSQL Server 的服务器上的 Oracle 客户端软件处于访问接口所要求的级别。Oracle (Oracle Provider for OLE DB) (8.1.7.3.0) 要求安装 Oracle Client 8.1.7.0。
在运行 SQL Server 的服务器上创建指向 Oracle 数据库实例的别名。有关详细信息,请参阅 Oracle 文档。
执行 sp_addlinkedserver 创建链接服务器,同时指定 OraOLEDB.Oracle 作为 provider_name,并指定 Oracle 数据库的别名作为 data_source。
以下示例假定已将别名定义为 DQORA8:
exec sp_addlinkedserver @server='OrclDB', @srvproduct='Oracle', @provider='OraOLEDB.Oracle', @datasrc='DQORA8'
安全说明 此示例不使用 Windows 身份验证。密码未经加密而进行传输。在保存到磁盘的数据源定义和脚本、备份以及日志文件中可能会看到密码。在此类连接中,切勿使用管理员密码。有关特定于环境的安全指南,请咨询您的网络管理员。
使用 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 |