Запуск запроса со связанного сервера (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? Спасибо большое.


person TTCG    schedule 16.06.2011    source источник
comment
похоже на этот вопрос   -  person Richard    schedule 23.08.2011


Ответы (6)


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

**SELECT * FROM OPENQUERY(MYSERVER, 'SELECT * FROM ALANH.TEMP_UPDATE1')**
person fasr    schedule 24.10.2013

Вы можете написать запрос следующим образом:

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

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

person Сергей    schedule 26.02.2016

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

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

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

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

person Richard    schedule 23.08.2011

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

host[:port]/service_name 

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

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

person Hemanshu Trivedi    schedule 16.08.2013

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

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

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

person Caseraw    schedule 23.04.2015
comment
Это синтаксис со стороны Oracle - person Nick.McDermaid; 26.02.2016

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

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

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

sp_tables_ex @table_server=InsertLinkedServerHere, @table_schema=InsertSchemaNameHere

person Jack Hadley    schedule 01.07.2016