连接到oracle dbms时在sql server上链接服务器问题

时间:2010-12-24 03:57:07

标签: sql-server database oracle linked-server

我根据以下文章创建了一个链接服务器定义:
http://www.ideaexcursion.com/2009/01/05/connecting-to-oracle-from-sql-server/

我的目标是将行传输到Oracle 11gR2上的表。

创建链接服务器后,每当我尝试使用如下查询选择表时:

SELECT *
FROM [192.168.1.188]..[ESIPARIS].[T_ERROR_LOG]

我收到以下错误:

Msg 7356, Level 16, State 1, Line 1
The OLE DB provider "OraOLEDB.Oracle" for linked server "192.168.1.188"
supplied inconsistent metadata for a column. The column "EVENT_OBJECT"
(compile-time ordinal 2) of object ""ESIPARIS"."T_ERROR_LOG"" was reported
to have a "LENGTH" of 50 at compile time and 100 at run time.

还有一件事是,只要“Sql Server Management Studio”准备了选择语句,它就会复制字段名称,某些字段重复如下:

SELECT [EVENT_DATE]
      ,[EVENT_DATE]
      ,[EVENT_DATE]
      ,[EVENT_DATE]
      ,[EVENT_OBJECT]
      ,[EVENT_OBJECT]
      ,[EVENT_OBJECT]
      ,[EVENT_OBJECT]
      ,[MESSAGE]
      ,[MESSAGE]
      ,[MESSAGE]
      ,[MESSAGE]
      ,[EVENT_ID]
  FROM [192.168.1.188]..[ESIPARIS].[T_ERROR_LOG]

我很高兴收到您的任何想法,感谢您的关注,

最诚挚的问候,

KayhanYÜKSEL

4 个答案:

答案 0 :(得分:4)

有许多情况可能会引发此错误:

  • SQL Server中的分布式查询引用了Oracle中基础表的视图,其中主键列以某种方式创建,Find out more
  • 使用数字列查询视图时出现错误。 Find out more
  • 这可能是驱动程序不兼容的问题,例如使用MS OleDB驱动程序而不是Oracle提供的驱动程序。

如果不是驱动程序,则可以使用OPENQUERY。除此以外。 this support note包含有关对链接服务器和Oracle进行故障排除的一般信息。


(这个问题是一个相当普遍的问题,所以事实证明实际的解决方案不是我建议的。我为了完整起见,我将@kayhanyüksel的解决方案纳入了这个响应的主体。)

解决了侦听器和tnsnames的变化。我们现在能够从SQL Server连接到Oracle 11gR2(在64位Red Hat Enterprise Linux 5.4上运行),反之亦然。随后的文件是   - Making a Connection from Oracle to SQL Server
  - The Oracle Gateways documentation

答案 1 :(得分:3)

我遇到了同样的问题:列......被报道了 在编译时具有50的“LENGTH”,在运行时具有100的“LENGTH”。选中时重复列名称。 我试图从ORACLE 11g数据库中运行MS SQL中的查询

我使用了follownig类型的查询,它确实有效!

  DECLARE @TSQL varchar(8000)
  SELECT  @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM TableName'')'
  EXEC (@TSQL)

其中MyLinkedServer是链接服务器的名称 TableName是表的名称。

在这里,您可以找到帮助我的文章的链接:http://support.microsoft.com/kb/314520

答案 2 :(得分:0)

旧线程,但它可能对某人有用。 当我最近遇到此错误时,使用MS OleDB驱动程序而不是Oracle OleDB提供程序作为提供程序解决了这个问题。

答案 3 :(得分:0)

我在11g客户端遇到了同样的问题但它已经消失了,客户端版本12对我有用,正在使用OPENQUERYto_char来解决问题。

我确认SQL management studio(无论什么版本)提供了许多重复字段。唯一安装最后一个驱动程序版本我们可以有一致的查询。我希望它对你有用!