катастрофический сбой при попытке выбрать со связанного сервера

Я создал связанное соединение oledb/odbc с Pervasive SQL из SQL SERVER 2012:

USE [master]
GO

/****** Object:  LinkedServer [KSLAP208]    Script Date: 2/8/2013 10:38:55 AM ******/
EXEC master.dbo.sp_addlinkedserver @server = N'KSLAP208', @srvproduct=N'Pervasive ODBC Interface', @provider=N'MSDASQL', @datasrc=N'C003', @location=N'localhost'
 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'KSLAP208',@useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'collation compatible', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'data access', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'dist', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'pub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'rpc', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'rpc out', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'sub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'connect timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'collation name', @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'lazy schema validation', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'query timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'use remote collation', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO

Тестовое соединение прошло успешно.

Однако, когда я пытаюсь выбрать из базы данных:

select * from [KSLAP208].[C003]..PA_Profile_BASE_1119 

Я немедленно получаю возвращаемые имена полей, а затем сразу после этого получаю эту ошибку:

Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "MSDASQL" for linked server "KSLAP208" reported an error. The provider reported an unexpected catastrophic failure.
Msg 7330, Level 16, State 2, Line 1
Cannot fetch a row from OLE DB provider "MSDASQL" for linked server "KSLAP208".

Что я делаю не так? Почему я не могу выбрать? Я могу видеть все базы данных и таблицы на связанном сервере.

если я выберу небольшое количество данных, выберите поле1,поле2, все работает без проблем.


person Alex Gordon    schedule 08.02.2013    source источник
comment
Разве этот вопрос не должен относиться к dba.stack?   -  person Kermit    schedule 08.02.2013
comment
Ваш сервер sql 32-битный или 64-битный? Какой бит является всепроникающим сервером?   -  person Taryn    schedule 11.02.2013
comment
@bluefeet, вездесущий 64-битный, а сервер sql 2012 - 64, тогда как другой сервер sql 2005, у которого не было проблем с добавлением повсеместного, поскольку связанный сервер, - 32-битный \   -  person Alex Gordon    schedule 11.02.2013


Ответы (3)


Кажется, я помню, что это было проблемой, когда я создавал связанный сервер postgresql. Я думаю, вам может понадобиться воссоздать связанный сервер с этим значением false (или просто изменить его в свойствах связанного сервера-> параметры сервера):

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', 
    @optname=N'remote proc transaction promotion', @optvalue=N'false'

Кроме того, попробуйте использовать OPENQUERY, чтобы выполнить это по ссылке

SELECT * 
FROM OPENQUERY(KSLAP208,'SELECT * FROM PA_Profile_BASE_1119');
person swasheck    schedule 08.02.2013
comment
Вам также может потребоваться убедиться, что вы используете правильные драйверы, и это предполагает, что вы связались с правильной базой данных. - person swasheck; 08.02.2013
comment
поэтому похоже, что выбор отдельных полей работает, но я не могу выбрать * - person Alex Gordon; 08.02.2013
comment
Вы можете выбрать все столбцы (по существу, выберите * без *)? какая ошибка выдается? - person swasheck; 09.02.2013
comment
нет, я не могу получить эту ошибку, когда выбираю более 15 полей: поставщик сообщил о неожиданном катастрофическом сбое - person Alex Gordon; 09.02.2013
comment
Журналы ошибок сервера sql, показывающие: SqlDumpExceptionHandler: процесс 55 сгенерировал фатальное исключение c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server завершает этот процесс. * Произошло нарушение прав доступа при чтении адреса 0000000009400090 * Входной буфер 128 байт - - person Alex Gordon; 09.02.2013
comment
Это начинает очень походить на проблему с драйверами. - person Data Masseur; 09.02.2013
comment
В общем, если вы получите нарушение прав доступа, я ожидаю ошибку в каком-то двоичном модуле, и драйверы будут главным подозреваемым. - person Chris Travers; 15.02.2013
comment
@ChrisTravers Я почти наверняка согласен с тем, что что-то происходит на уровне драйвера, учитывая поток здесь. - person swasheck; 15.02.2013

Когда я обращаюсь к удаленным таблицам, мне нужно иметь полное имя из 4 частей. Попробуй это:

select * from [KSLAP208].[C003].dbo.PA_Profile_BASE_1119 

Я никогда не исследовал, почему. Я просто привык включать все части.

Вы можете получить список столбцов, используя:

select column_name
from [KSLAP208].[C003].INFORMATION_SCHEMA.COLUMNS
where table_name = 'PA_Profile_BASE_1119'

(и имя_схемы = что угодно, если вам это нужно).

person Gordon Linoff    schedule 08.02.2013
comment
Сообщение 7312, уровень 16, состояние 1, строка 1 Недопустимое использование схемы или каталога для поставщика OLE DB MSDASQL для связанного сервера KSLAP208. Было предоставлено имя из четырех частей, но поставщик не предоставляет необходимые интерфейсы для использования каталога или схемы. - person Alex Gordon; 08.02.2013
comment
поэтому похоже, что выбор отдельных полей работает, но я не могу выбрать * - person Alex Gordon; 08.02.2013
comment
Это действительно интересно. Я точно могу select *, но мне нужна схема. Различные настройки безопасности где-то по пути. - person Gordon Linoff; 08.02.2013
comment
я думаю, что это может быть проблема с памятью. как только я начинаю выбирать более 15 полей, это дает сообщение об ошибке - person Alex Gordon; 08.02.2013

Не могу ответить, почему, но вы можете попробовать так;

--link server and login
EXEC master.sys.sp_addlinkedserver N'KSLAP208',N'SQL Server';
EXEC master.sys.sp_addlinkedsrvlogin @rmtsrvname='KSLAP208', 
                  @useself='false',
                  @rmtuser='username',
                  @rmtpassword='password';

        --DO YOUR JOB HERE 
        SELECT  TOP (10) * FROM  [KSLAP208].dbName.dbo.[tableName]

--drop server link and login
EXEC sp_droplinkedsrvlogin 'KSLAP208', NULL
EXEC sp_dropserver 'KSLAP208', NULL;
person Kaf    schedule 08.02.2013
comment
Честно говоря, я не пробовал, но вот похожий вопрос и ответ на него. - person Kaf; 08.02.2013
comment
еще раз спасибо. дело в том, что мое соединение, кажется, работает, я просто не могу выбрать, но я перейду по ссылке! - person Alex Gordon; 08.02.2013
comment
Также некоторые подробности о режиме Windows authentication можно найти в разделе комментариев. - person Kaf; 08.02.2013
comment
поэтому похоже, что выбор отдельных полей работает, но я не могу выбрать * - person Alex Gordon; 08.02.2013
comment
Я проверил, что select * ... работает для меня, используя этот метод. но я не в режиме аутентификации Windows. - person Kaf; 08.02.2013
comment
я думаю, что это может быть проблема с памятью. как только я начинаю выбирать более 15 полей, это дает сообщение об ошибке - person Alex Gordon; 08.02.2013