Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MSSQL 2014 express+Oracle Linked Servers  [new]
vb_sub
Member

Откуда:
Сообщений: 491
Всем привет, никак не могу сделать join таблицы из MS sql и Oracle 9. Слинковать ораколовский сервер получилось. Запрос типа

	
SELECT * FROM OPENQUERY(ORACLEDB,'SELECT * FROM oracleTable F  where rownum<150')
корректно отрабатывает.

Однако при join возникает ошибка

 select 
  from msSQL as d
  inner join [ORACLEDB].[PCBASERU].[U00841].[oracleTable ]   b on d.id=b.id
, где

ORACLEDB-имя слинкованного сервера,
PCBASERU- имя сервиса (базы данных) из Tnsnames.ora
U00841 имя схемы (совпадает с именем пользователя)- взял через
select USERNAME from SYS.ALL_USERS order by USERNAME

oracleTable - имя таблицы
получаю ошибку:

Недопустимое использование схемы или каталога с поставщиком OLE DB "OraOLEDB.Oracle" для связанного сервера "ORACLEDB". Указано имя, состоящее из четырех частей, однако поставщик не предоставляет интерфейсы, необходимые для доступа к каталогу или схеме.

Следующий вариант рабочий, но очень долго выполняется

  select from msSQL as d
  inner join
  (SELECT * FROM OPENQUERY(ORACLEDB,'SELECT F.ID FROM oracleTable F')) as OraTable on d.id=OraTable.ID

Пробовал включать опцию "Только нулевой уровень" в свойствах поставщика данных ORaoledb.Oracle, однако это только добавило ошибку:

Сообщение 7399, уровень 16, состояние 1, строка 18
Поставщик OLE DB "OraOLEDB.Oracle" для связанного сервера "ORACLEDB" сообщил об ошибке. Поставщик не предоставил данных об ошибке.
Сообщение 7312, уровень 16, состояние 1, строка 18
Недопустимое использование схемы или каталога с поставщиком OLE DB "OraOLEDB.Oracle" для связанного сервера "ORACLEDB". Указано имя, состоящее из четырех частей, однако поставщик не предоставляет интерфейсы, необходимые для доступа к каталогу или схеме.


Как можно заставить работать join? Спасибо
10 апр 19, 16:13    [21858528]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2014 express+Oracle Linked Servers  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6356
vb_sub,

загрузите данные в какую-либо таблицу, потом стройте запрос. Последний вариант делает примерно то же самое.
10 апр 19, 16:25    [21858557]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2014 express+Oracle Linked Servers  [new]
vb_sub
Member

Откуда:
Сообщений: 491
Владислав Колосов,
я так понимаю этот вариант грузит всю таблицу из оракла и потом её фильтрует, потму что если я создам маппинг из двух источников например в каком- нибудь приложении, то он отработает мгновенно, при OPENQUERY запрос отрабатывает около 20 сек.
10 апр 19, 16:28    [21858565]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2014 express+Oracle Linked Servers  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6356
vb_sub,

а в нижнем запросе не пробовали where rownum<150 указывать?

Вам действительно надо загрузить всю таблицу, чтобы сравнить с локальным набором значений.
10 апр 19, 16:34    [21858578]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2014 express+Oracle Linked Servers  [new]
vb_sub
Member

Откуда:
Сообщений: 491
Владислав Колосов,

ограничение в 150 записей поставил, чтобы вся таблица не вывалилась. То есть с openquery и через [ORACLEDB].[PCBASERU].[U00841].[oracleTable ] производительность будет одинакова?
10 апр 19, 16:37    [21858586]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2014 express+Oracle Linked Servers  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 31392
Блог
vb_sub,

Да. Грузите всю таблицу.
10 апр 19, 19:34    [21858740]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2014 express+Oracle Linked Servers  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2909
vb_sub
Всем привет.

Однако при join возникает ошибка

 select 
  from msSQL as d
  inner join [ORACLEDB].[PCBASERU].[U00841].[oracleTable ]   b on d.id=b.id
, где

ORACLEDB-имя слинкованного сервера,
PCBASERU- имя сервиса (базы данных) из Tnsnames.ora
U00841 имя схемы (совпадает с именем пользователя)- взял через
select USERNAME from SYS.ALL_USERS order by USERNAME

oracleTable - имя таблицы
получаю ошибку:

Недопустимое использование схемы или каталога с поставщиком OLE DB "OraOLEDB.Oracle" для связанного сервера "ORACLEDB". Указано имя, состоящее из четырех частей, однако поставщик не предоставляет интерфейсы, необходимые для доступа к каталогу или схеме.



 select 
  from msSQL as d
  inner join [ORACLEDB]..[U00841].[oracleTable ]   b on d.id=b.id

но лучше во времянку выгрузить данные и её использовать
11 апр 19, 07:53    [21858906]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить