2013-02-10 4 views
4

У нас возникла проблема с сервером, который мы связали с нашим экземпляром sql server 2012.Что может заставить связанный сервер возвращать ограниченный объем данных?

Сервер, с которым мы связаны через соединение odbc или oledb, является Pervasive SQL.

Выбор из связанного сервера таким образом, работает до тех пор, как результирующий набор мал:

select * from linked_server.database..mytable 

Если результат больше, чем вокруг 2mb (может быть чуть больше или меньше), то мы получаем эту ошибку:

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". 

Однако глупая вещь, что SSMS 2012, например, отображает все столбцы, которые должны быть возвращены, а затем immediatley ошибки из.

Что привело бы к сбою SSMS 2012 ошибки в наборе результатов, который слишком велик? (более 1-2 мб)?

вот что я вижу в администраторе Odbc:

enter image description here

+0

Возможно, это ваш водитель. У нас были нежелательные приключения со связанными серверами, чтобы redbrick. Это были связанные с водителем. Что произойдет, если вы попытаетесь сделать то же самое с openquery? –

+0

Благодарю вас за ваше предложение. да, мы попробовали openquery и тот же результат –

+0

@DanBracuk, мы попытались переустановить драйвер –

ответ

1

Вариант 1, отключить упреждающей выборки

Иногда, отключение предварительной выборки будет решать такие проблемы, как это.

You can disable the prefetch by clearing the "Enable pre-fetch of data for queries" check box in the Performance tab when creating a DSN or adding "PREFETCH=0" to the connection string when creating a DSN-less connection.

Подробнее об этом:

In the ODBC Data Source Administrator panel on the server, configure your linked server from System DSN. Under the Performance tab, uncheck the box 'Enable pre-fetch of data for queries'. OK, OK. Delete and re-create your linked server in SQL Management Studio.

Source

Вариант 2, Allow InProcess

  • Перейти к Linked Servers
  • Провайдеры
  • MSOLAP (или аналогичный)
  • Свойства
  • Убедитесь, что включено разрешение «Разрешить обработку». Даже если это так, выключите его. Сохранить. А затем включите его снова. Иногда это может помочь сброс.
+0

, это то же самое, что и при извлечении массива? –

+0

Я просто отключил выборку массива и получил тот же результат –

+0

добавил немного подробнее об отключении предварительной выборки –

0

Я столкнулся с той же проблемой сегодня, и это, как представляется, вопрос о том, что драйвер ODBC Pervasive имеет с VARCHAR и VARBINARY колоннами. Если вы попробуете SELECT *, с этой ошибкой произойдет ошибка. Решение в моем случае состояло в том, чтобы указать имена столбцов и отличить их от BINARY(x) и CHAR(x).

Это не удается:

SELECT * FROM OPENQUERY(Server, 'SELECT * FROM Table') 

Это прекрасно работает:

SELECT * FROM 
OPENQUERY(Server, ' 
    SELECT NormalCol, CAST(VarBinCol, BINARY(1000)), CAST(VarbinCol, BINARY(100)), 
    CAST(VarCharCol, CHAR(100)), Etc FROM db.Table 
') 

Не пытайся кастинг на VARBINARY или VARCHAR хотя, он будет возвращать только первый байт.

Смежные вопросы