Выполнить запрос со связанного сервера (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
Проверьте эту ссылку для более подробной информации: