Выполнить запрос со связанного сервера (Oracle) в SQL Server2008 R2

У меня есть связанный сервер, настроенный в SQL Server 2008. Но я не смог выполнить какой-либо запрос к связанному серверу.

Я пытался запустить эту простую команду, но она не работает

SELECT * FROM MYSERVER..ALANH.TEMP_UPDATE1

Это ошибка, которую я получил, когда запустил указанную выше команду.

Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "OraOLEDB.Oracle" for linked server "MYSERVER" reported an error. The provider did not give any information about the error.
Msg 7312, Level 16, State 1, Line 1
Invalid use of schema or catalog for OLE DB provider "OraOLEDB.Oracle" for linked server "MYSERVER". A four-part name was supplied, but the provider does not expose the necessary interfaces to use a catalog or schema.

Может ли кто-нибудь помочь мне подключиться к OracleLinkedServer? Спасибо большое.

6 ответов

Вы тоже можете быть таким:

**SELECT * FROM OPENQUERY(MYSERVER, 'SELECT * FROM ALANH.TEMP_UPDATE1')**

Вы можете написать запрос так:

select * FROM [MYSERVER]..[ALANH].[TEMP_UPDATE1]

Важное замечание: В этом случае полное имя таблицы должно быть написано в верхнем регистре.

Вы можете попробовать исправить из этой статьи.

Кроме того, это может быть проблемой с именами. Из статьи MS KB

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

На стороне Oracle таблица или столбец, созданные без двойных кавычек, хранятся в верхнем регистре. Если таблица или столбец заключены в двойные кавычки, таблица или столбец сохраняется как есть.

Попробуйте что-то вроде этого:

SELECT * FROM ALL_TABLES@"SOME.SERVER.NAME";

В этом случае я выбираю ALL_TABLES на связанном сервере с именем SOME.SERVER.NAME.

Пост Ричарда выше был критическим.

Я использую драйверы odbc v12 ODP.NET и должен был убедиться, что "Только нулевой уровень" НЕ проверен и что имена, указанные для таблицы и схемы, были правильными. Все схемы и таблицы, к которым я обращаюсь, только в верхнем регистре.

Используйте запрос ниже, чтобы определить правильное имя таблицы, хотя вам нужно будет указать имя схемы в правильном случае, чтобы запрос работал. Попробуйте все в верхнем регистре, все в нижнем регистре, попробуйте смешанный регистр или, что еще лучше, получите фактическое имя из dba (я слышал, что только имена таблиц / схем, которые заключены в "", будут допущены в смешанном регистре, в противном случае в oracle это все заглавные буквы.)

sp_tables_ex @ table_server =InsertLinkedServerHere, @ table_schema =InsertSchemaNameHere

Сначала убедитесь, что утилита tnsping работает с клиентского сервера, а затем используйте приведенную ниже строку в настройке источника базы данных связанного сервера.

host[:port]/service_name 

Проверьте эту ссылку для более подробной информации:

http://www.oracledistilled.com/oracle-database/oracle-net/using-easy-connect-ezconnect-naming-method-to-connect-to-oracle-databases/

Другие вопросы по тегам