Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL 2014 express+Oracle Linked Servers / 7 сообщений из 7, страница 1 из 1
10.04.2019, 16:13
    #39799504
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL 2014 express+Oracle Linked Servers
Всем привет, никак не могу сделать join таблицы из MS sql и Oracle 9. Слинковать ораколовский сервер получилось. Запрос типа

Код: sql
1.
2.
	
SELECT * FROM OPENQUERY(ORACLEDB,'SELECT * FROM oracleTable F  where rownum<150')

корректно отрабатывает.

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

Код: sql
1.
2.
3.
 select 
  from msSQL as d
  inner join [ORACLEDB].[PCBASERU].[U00841].[oracleTable ]   b on d.id=b.id

, где

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


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

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

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

Код: sql
1.
2.
3.
  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? Спасибо
...
Рейтинг: 0 / 0
10.04.2019, 16:25
    #39799523
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL 2014 express+Oracle Linked Servers
vb_sub,

загрузите данные в какую-либо таблицу, потом стройте запрос. Последний вариант делает примерно то же самое.
...
Рейтинг: 0 / 0
10.04.2019, 16:28
    #39799529
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL 2014 express+Oracle Linked Servers
Владислав Колосов,
я так понимаю этот вариант грузит всю таблицу из оракла и потом её фильтрует, потму что если я создам маппинг из двух источников например в каком- нибудь приложении, то он отработает мгновенно, при OPENQUERY запрос отрабатывает около 20 сек.
...
Рейтинг: 0 / 0
10.04.2019, 16:34
    #39799539
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL 2014 express+Oracle Linked Servers
vb_sub,

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

Вам действительно надо загрузить всю таблицу, чтобы сравнить с локальным набором значений.
...
Рейтинг: 0 / 0
10.04.2019, 16:37
    #39799545
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL 2014 express+Oracle Linked Servers
Владислав Колосов,

ограничение в 150 записей поставил, чтобы вся таблица не вывалилась. То есть с openquery и через [ORACLEDB].[PCBASERU].[U00841].[oracleTable ] производительность будет одинакова?
...
Рейтинг: 0 / 0
10.04.2019, 19:34
    #39799626
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL 2014 express+Oracle Linked Servers
vb_sub,

Да. Грузите всю таблицу.
...
Рейтинг: 0 / 0
11.04.2019, 07:53
    #39799700
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL 2014 express+Oracle Linked Servers
vb_subВсем привет.

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

Код: sql
1.
2.
3.
 select 
  from msSQL as d
  inner join [ORACLEDB].[PCBASERU].[U00841].[oracleTable ]   b on d.id=b.id

, где

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


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

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



Код: sql
1.
2.
3.
 select 
  from msSQL as d
  inner join [ORACLEDB]..[U00841].[oracleTable ]   b on d.id=b.id


но лучше во времянку выгрузить данные и её использовать
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL 2014 express+Oracle Linked Servers / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]