проблема связанного сервера на сервере sql при подключении к oracle dbms

Я создал определение связанного сервера в соответствии со статьей по адресу:
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]

Я был бы очень рад услышать от вас о любых идеях, спасибо за вашу заботу,

С уважением,

Кайхан ЮКСЕЛЬ


person kayhan yüksel    schedule 24.12.2010    source источник


Ответы (4)


Существует ряд сценариев, которые могут вызвать эту ошибку:

  • ваш распределенный запрос в SQL Server ссылается на представление с базовой таблицей в Oracle со столбцом первичного ключа, созданным определенным образом, Подробнее
  • есть ошибка при запросе представления с числовыми столбцами. Подробнее
  • это может быть проблема несовместимости драйверов, например, использование драйвера MS OleDB вместо того, который предоставляет Oracle.

Если это не драйвер, одним из возможных обходных путей является использование OPENQUERY. В противном случае. эта заметка о поддержке содержит общую информацию об устранении неполадок связанного сервера и Oracle.


(Эта проблема является довольно общей, поэтому оказалось, что фактическое решение не соответствовало тому, что я предложил. Я включаю решение @kayhanyüksel в текст этого ответа для полноты картины.)

Решил это с изменениями в listener и tnsnames. Теперь мы можем подключаться с SQL Server к Oracle 11gR2 (работающему на 64-разрядной версии Red Hat Enterprise Linux 5.4) и наоборот. Следующие документы: Подключение Oracle к SQL Server
- Документация по Oracle Gateways

person APC    schedule 24.12.2010
comment
APC, спасибо большое, начинаю просматривать ваши ссылки. - person kayhan yüksel; 24.12.2010
comment
APC, я прочитал присланные вами заметки, еще раз большое спасибо, но это не очень хорошее решение для изменения типа данных, зачем мне менять номер, например, на nvarchar2, если он мне нужен? - person kayhan yüksel; 24.12.2010
comment
@KayhanYuksel - вы читали обходные пути для этой ошибки? Одним из возможных решений является создание представления в локальной базе данных (SQL Server). - person APC; 24.12.2010
comment
APC, пробовал, но все равно. Пробовал драйверы MS и Oracle, но результат не изменился. Мы попробуем развернуться на 180 градусов и выйти на SQL Server через СУБД Oracle. - person kayhan yüksel; 24.12.2010
comment
Но другие проблемы возникают с настройкой het. Сервисы - person kayhan yüksel; 24.12.2010
comment
изменения в слушателе и tnsnames решили эту проблему, мы работаем на 64-битной Red Hat Enterprise Linux 5.4, Oracle 11gR2. Теперь мы можем подключаться с SQL Server к Oracle и наоборот. Следующие документы: rel="nofollow noreferrer">databasejournal.com/features/oracle/article.php/3442661/ ‹br› и download.oracle.com/docs/cd/E11882_01/gateways.112/e12013/. - person kayhan yüksel; 25.12.2010

У меня была та же проблема: столбец ...... имел "LENGTH" 50 во время компиляции и 100 во время выполнения. и дублировать имена столбцов при выборе. пока я пытался выполнить запрос в MS SQL из базы данных ORACLE 11g

Я использовал следующий тип запроса, и это сработало!

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

где MyLinkedServer — имя связанного сервера, а TableName — имя таблицы.

вот ссылка на статью, которая мне помогла: http://support.microsoft.com/kb/314520

person Alin Alexandru    schedule 12.08.2013

Тема старая, но может кому пригодится. Когда я недавно столкнулся с этой ошибкой, использование в качестве поставщика драйвера MS OleDB вместо поставщика Oracle OleDB решило проблему.

person dim-d    schedule 07.12.2016

У меня такая же проблема с клиентом 11g, но она исчезла с версией клиента 12, которая работает для меня, используя OPENQUERY и to_char с полем, которое создает проблему.

Я подтверждаю, что SQL management studio (независимо от того, какая версия) дает много дублированных полей. Только при установке последней версии драйвера мы можем иметь последовательные запросы. Я надеюсь, что это может быть полезно для вас!

person LucaB    schedule 06.11.2017