如何在 SQL 服务器中设置到 Oracle 的链接服务器并进行故障排除
重要说明:本文包含有关如何修改注册表的信息。修改注册表之前,一定要先进行备份,并且一定要知道在发生问题时如何还原注册表。有关如何备份、还原和修改注册表的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
256986 (http://support.microsoft.com/kb/256986/ ) Microsoft Windows 注册表说明
本页
概要
本文分步介绍了如何设置从运行 Microsoft SQL Server 的计算机到 Oracle 数据库的链接服务器,还针对您在设置到 Oracle 的链接服务...
本文分步介绍了如何设置从运行 Microsoft SQL Server 的计算机到 Oracle 数据库的链接服务器,还针对您在设置到 Oracle 的链接服务器时可能遇到的常见错误提供了基本的故障排除步骤。
设置到 Oracle 的链接服务器的步骤
- 您必须在运行要在其上设置链接服务器的 SQL Server 计算机上安装 Oracle 客户端软件。
- 在运行 SQL Server 的计算机上安装所需的驱动程序。Microsoft 仅支持用于 Oracle 的 Microsoft OLE DB 提供程序和 Microsoft ODBC 驱动程序。如果您使用第三方提供程序或第三方驱动程序连接到 Oracle,则在使用这些提供程序或驱动程序遇到任何问题时,您必须与相应的供应商联系。
- 如果您使用用于 Oracle 的 Microsoft OLE DB 提供程序和 Microsoft ODBC 驱动程序,请考虑下列事项:
- 随 Microsoft Data 数据访问组件 (MDAC) 提供的 OLE DB 提供程序和 ODBC 驱动程序和都需要 SQL*Net 2.3.x 或更高版本。您必须在客户端计算机上安装 Oracle 7.3.x 客户端软件或更高版本。客户端计算机是运行 SQL Server 的计算机。
- 确保您已经在运行 SQL Server 的计算机上安装了 MDAC 2.5 或更高版本。如果使用 MDAC 2.1 或更早版本,则无法连接到使用 Oracle 8.x 或更高版本的数据库。
- 要使 MDAC 2.5 或更高版本能够与 Oracle 客户端软件一起工作,必须按照下表中的说明修改运行 SQL Server 的客户端计算机的注册表。
Microsoft Windows NT、 Oracle Microsoft Windows 95、 Client Windows 98 和 Windows 98 SE Microsoft Windows 2000 -------------------------------------------------------------------------- 7.x [HKEY_LOCAL_MACHINE\SOFTWARE [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\TransactionServer Microsoft\MSDTC\MTxOCI] \Local Computer\My Computer] "OracleXaLib"="xa73.dll" "OracleXaLib"="xa73.dll" "OracleSqlLib"="SQLLib18.dll" "OracleSqlLib"="SQLLib18.dll" "OracleOciLib"="ociw32.dll" "OracleOciLib"="ociw32.dll" 8.0 [HKEY_LOCAL_MACHINE\SOFTWARE [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Transaction Server \Microsoft\MSDTC\MTxOCI] \Local Computer\My Computer] "OracleXaLib"="xa80.dll" "OracleXaLib"="xa80.dll" "OracleSqlLib"="sqllib80.dll" "OracleSqlLib"="sqllib80.dll" "OracleOciLib"="oci.dll" "OracleOciLib"="oci.dll" 8.1 [HKEY_LOCAL_MACHINE\SOFTWARE [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Transaction Server \Microsoft\MSDTC\MTxOCI] \Local Computer\My Computer] "OracleXaLib"="oraclient8.dll" "OracleXaLib"="oraclient8.dll" "OracleSqlLib"="orasql8.dll" "OracleSqlLib"="orasql8.dll" "OracleOciLib"="oci.dll" "OracleOciLib"="oci.dll"
- 安装 Oracle 客户端软件之后,请重新启动运行 SQL Server 的计算机。
- 在运行 SQL Server 的计算机上,使用以下脚本设置链接服务器。
-- Adding linked server (from SQL Server Books Online): /* sp_addlinkedserver [@server =] 'server' [, [@srvproduct =] 'product_name'] [, [@provider =] 'provider_name'] [, [@datasrc =] 'data_source'] [, [@location =] 'location'] [, [@provstr =] 'provider_string'] [, [@catalog =] 'catalog'] */ EXEC sp_addlinkedserver 'Ora817Link', 'Oracle', 'MSDAORA', 'oracle817' -- Adding linked server login: /* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname' [,[@useself =] 'useself'] [,[@locallogin =] 'locallogin'] [,[@rmtuser =] 'rmtuser'] [,[@rmtpassword =] 'rmtpassword'] */ EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger' -- Help on the linked server: EXEC sp_linkedservers EXEC sp_helpserver select * from sysservers
常见错误信息及如何对这些错误信息进行故障排除
警告:如果使用注册表编辑器或其他方法错误地修改了注册表,则可能导致严重问题。这些问题可能需要重新安装操作系统才能解决。Microsoft 不能保证您可以解决这些问题。修改注册表需要您自担风险。要检索有关在执行分布式查询时遇到的错误的扩展信息,可以使用下面两种方法之一。
- 方法 1
在查询分析器中,运行下面的代码以打开跟踪标志 7300。DBCC Traceon(7300)
- 方法 2
捕获在 SQL 事件探查器的“错误和警告”事件类别中找到的“OLEDB 错误”事件。错误信息的格式如下:您可以在 MDAC 软件开发工具包 (SDK) 中附带的 Oledberr.h 文件中查找十六进制错误代码。Interface::Method failed with hex-error code.
注意:有关与性能相关的问题,请搜索 SQL Server 联机丛书中的“Optimizing Distributed Queries”(优化分布式查询)主题。
- 消息 1
打开跟踪标志 7300,或使用 SQL 事件探查器捕获“OLEDB 错误”事件,以便检索扩展的 OLEDB 错误信息。Error 7399:OLE DB provider '%ls' reported an error.%ls
- 消息 2a
消息 2b"ORA-12154:TNS:could not resolve service name"有关如何解决 Oracle 连接问题的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:"The Oracle(tm) client and networking components were not found.These components are supplied by Oracle Corporation and are part of the Oracle Version 7.3.3 (or greater) client software installation"259959 (http://support.microsoft.com/kb/259959/ ) INFO:对使用 ODBC 驱动程序和 OLE DB 提供程序的 Oracle 服务器调试连接问题的技术
- 消息 3
请确保正确注册了 MSDAORA.dll 文件。(MSDAORA.dll 文件是用于 Oracle 文件的 Microsoft OLE DB 提供程序。)使用 RegSvr32.exe 注册用于 Oracle 的 Microsoft OLE DB 提供程序。如果注册失败,请重新安装 Microsoft 数据访问组件 (MDAC)。有关 MDAC 的更多信息,请访问下面的 Microsoft Developer Network (MSDN) 网站:Error 7302:Could not create an instance of OLE DB provider 'MSDAORA'http://msdn.microsoft.com/data/Default.aspx (http://msdn.microsoft.com/data/Default.aspx)注意:如果您使用第三方程序,而该 Oracle 提供程序无法在 SQL Server 进程外运行,请更改提供程序选项使它在进程内运行。要更改提供程序选项,请使用下列方法之一。
- 方法 1
找到下面的注册表项。然后,将 AllowInProcess (DWORD) 项的值更改为 1。此注册表项位于相应的提供程序名称下:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName - 方法 2
在添加新的链接服务器时,通过 SQL Server 企业管理器直接设置允许 InProcess 选项。单击提供程序选项,然后单击以选中允许 InProcess 复选框。
- 方法 1
- 消息 4
该错误信息表明链接服务器没有正确的登录映射。您可以执行 sp_helplinkedsrvlogin 存储过程来正确设置登录信息。此外请验证您是否已为链接服务器配置指定了正确的参数。Error 7303:Could not initialize data source object of OLE DB provider 'MSDAORA'.[OLE/DB provider returned message:ORA-01017:invalid username/password; logon denied] OLE DB error trace [OLE/DB Provider 'MSDAORA' IDBInitialize::Initialize returned 0x80040e4d].
- 消息 5
Error 7306:Could not open table ' %ls' from OLE DB provider 'MSDAORA'.The specified table does not exist.[OLE/DB provider returned message:Table does not exist.][OLE/DB provider returned message:ORA-00942:table or view does not exist] OLE DB error trace [OLE/DB Provider 'MSDAORA' IOpenRowset::OpenRowset returned 0x80040e37:The specified table does not exist.].Error 7312:Invalid use of schema and/or catalog for OLE DB provider '%ls'.A four-part name was supplied, but the provider does not expose the necessary interfaces to use a catalog and/or schema.Error 7313:Invalid schema or catalog specified for provider '%ls'.如果收到上述错误信息,则表明 Oracle 架构中可能缺少一个表,或者您在该表上可能没有权限。请验证是否使用大写形式键入架构名称。表和列的字母大小写情况应与 Oracle 系统表中指定的一样。Err 7314:OLE DB provider '%ls' does not contain table '%ls'
在 Oracle 端,未使用双引号创建的表或列以大写形式存储。如果用双引号将表或列引起来,则表或列按原样存储。
下面的调用显示了 Oracle 架构中是否存在表。此调用还显示了确切的表名。有关错误信息 7306 的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:sp_tables_ex @table_server=Ora817Link, @table_schema='your_schema_name'
240340 (http://support.microsoft.com/kb/240340/ ) PRB:对 Oracle 进行 SQL 分布式查询导致“Could not open table”(未能打开表)错误 - 消息 6
Error 7413:Could not perform a Windows NT authenticated login because delegation is not available.以下信息摘自 SQL Server 联机丛书:Msg 18456, Level 14, State 1, Line 1 Login failed for user '\'.该错误信息表明,在没有显式的登录映射的情况下,您试图对 Microsoft Windows 验证登录执行分布式查询。在不支持安全委派的操作系统环境中,Windows NT 验证登录需要显式映射到使用 sp_addlinkedsrvlogin 创建的远程登录帐户和密码。
- 消息 7
如果收到此错误信息,您可能会遇到在下面的 Microsoft 知识库文章中描述的问题:Error 7354:OLE DB provider 'MSDAORA' supplied invalid metadata for column '%ls'.The data type is not supported.243027 (http://support.microsoft.com/kb/243027/ ) FIX:Oracle 中的数字列导致错误 7354
- 消息 8
如果您的链接服务器查询使用 Oracle 视图,您可能会遇到下面的 Microsoft 知识库文章中描述的问题:Error 7356:OLE DB provider 'MSDAORA' supplied inconsistent metadata for a column.Metadata information was changed at execution time.251238 (http://support.microsoft.com/kb/251238/ ) PRB:分布式查询返回错误 7356 及 MSDAORA
- 消息 9
验证 OCI 版本是否已按上文描述的那样正确注册。Error 7391:The operation could not be performed because the OLE DB provider 'MSDAORA' does not support distributed transactions.OLE DB error trace [OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]
注意:如果注册表项全都正确,将会加载 MtxOCI.dll 文件。如果 MtxOCI.dll 未加载,则您无法使用用于 Oracle 的 Microsoft OLE DB 提供程序或 Microsoft ODBC 驱动程序对 Oracle 执行分布式事务。如果您正在使用第三方提供程序并且收到错误 7391,请验证您正在使用的 OLE DB 提供程序是否支持分布式事务。如果 OLE DB 提供程序确实支持分布式事务,请验证 Microsoft 分布式事务协调器 (MSDTC) 正在运行。 - 消息 10
以下信息摘自 SQL Server 联机丛书:Error 7392:Could not start a transaction for OLE DB provider 'MSDAORA'.OLE DB error trace [OLE/DB Provider 'MSDAORA' ITransactionLocal::StartTransaction returned 0x8004d013:ISOLEVEL=4096].OLE DB 提供程序返回错误 7392,因为对于此会话只能有一个事务处于活动状态。该错误表明,在连接处于显式或隐式事务中,且 OLE DB 提供程序不支持嵌套事务时,您试图对 OLE DB 提供程序执行数据修改语句。SQL Server 需要这种支持,以便在某些错误情况下,它可以终止数据修改语句的影响,同时继续进行事务处理。如果 SET XACT_ABORT 为 ON,则 SQL Server 不需要 OLE DB 提供程序中的嵌套事务支持。因此,在显式或隐式事务中对远程表执行数据修改语句之前,请将 SET XACT_ABORT 设为 ON。这样做的目的是为了防止您正在使用的 OLE DB 提供程序不支持嵌套事务。
参考
有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 244661 (http://support.microsoft.com...
有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
244661 (http://support.microsoft.com/kb/244661/ ) INFO:Microsoft Oracle ODBC 驱动程序和 OLE DB 提供程序的局限性
259959 (http://support.microsoft.com/kb/259959/ ) INFO:对使用 ODBC 驱动程序和 OLE DB 提供程序的 Oracle 服务器调试连接问题的技术
239719 (http://support.microsoft.com/kb/239719/ ) INFO:用于 Oracle w.r.t Oracle 8.x 的 Microsoft ODBC 驱动程序/OLE DB 提供程序的支持性
193893 (http://support.microsoft.com/kb/193893/ ) 关于与 Microsoft Transaction Server 和 COM+ 组件一起使用 Oracle 的信息
191168 (http://support.microsoft.com/kb/191168/ ) INFO:错误“-2147168246 (8004d00a)”无法登记调用对象的事务
有关如何将链接服务器与 DB2 一起使用的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
218590 (http://support.microsoft.com/kb/218590/ ) INF:为用于 DB2 的 Microsoft OLE DB 提供程序配置数据源
216428 (http://support.microsoft.com/kb/216428/ ) 配置用于 DB2 的 Microsoft ODBC 驱动程序

回到顶端
浙公网安备 33010602011771号