powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Всех кто использует Linked Server касается. Ошибка!!!
16 сообщений из 16, страница 1 из 1
Всех кто использует Linked Server касается. Ошибка!!!
    #32022113
Nikolay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Позволил себе повторно "поднять" тему, так как проблема не решена а касается всех (почти). Итак, есть Linked Server для доступа к Dbf файлам, описан следующим образом.

sp_addlinkedserver
@server = 'MYDBFs',
@provider = 'Microsoft.Jet.OLEDB.4.0',
@srvproduct = 'OLE DB Provider for Jet',
@datasrc = 'D:\ARHIV',
@provstr = 'dBASE IV'

при обращении к такому серверу расходуются ресурсы (доступная память и хендлес), это видно в Task Manager, при многократном вызове машина вешается с ошибкой.
Server: Msg 7399, Level 16, State 1, Line 6
OLE DB provider 'Microsoft.Jet.OLEDB.4.0' reported an error. The provider did not give any information about the error.

Код дающий такую ошибку:

DECLARE @i int
SET @i = 1
WHILE @i < 1000 BEGIN
IF EXISTS (SELECT * FROM sysobjects WHERE (name = N'MyBase'))
BEGIN
INSERT INTO MyBase
SELECT * FROM mydbfs...MyBase
END ELSE BEGIN
SELECT * INTO MyBase
FROM mydbfs...MyBase
END
SET @i = @i + 1
PRINT @i
END

Кстати это не единственный возможный вариант. Все что использует связку mydbfs...MyBase будет забирать ресурсы и в конечном итоге приведет к краху системы

В прошлый раз Glory сказал, что на его машине "W2k Server SP2" все нормально, но я так и не смог добится нормальной работы (пробовал на разных машинах) вот примеры конфигураций где удалось протестировать (выдает по SELECT @@VERSION).

Microsoft SQL Server 7.00 - 7.00.842 (Intel X86) Mar 2 2000 06:49:37 Copyright (c) 1988-1998 Microsoft Corporation Standard Edition on Windows NT 4.0 (Build 1381: Service Pack 5)
Microsoft SQL Server 2000 - 8.00.194 (Intel X86) Aug 6 2000 00:57:48 Copyright (c) 1988-2000 Microsoft Corporation Standard Edition on Windows NT 4.0 (Build 1381: Service Pack 5)
Microsoft SQL Server 2000 - 8.00.194 (Intel X86) Aug 6 2000 00:57:48 Copyright (c) 1988-2000 Microsoft Corporation Developer Edition on Windows NT 5.0 (Build 2195: )
Microsoft SQL Server 2000 - 8.00.534 (Intel X86) Nov 19 2001 13:23:50 Copyright (c) 1988-2000 Microsoft Corporation Developer Edition on Windows NT 5.0 (Build 2195: Service Pack 2)

Думаю что Glory тестировал код на рабочей станции а я всегда имел в виду сервер (вот так и не поняли друг друга). Хорошо если я ошибаюсь а пока выводы неутешительные - интенсивно использовать Linked Server нельзя! Т.к. это приводит к (сначала торможению) а потом и зависанию сервера. Неважно откуда программа выполнит обращение к Linked Server ресурсы расходуются на той машине где он создан (на сервере).

Инструкция для тех кто захочет проверить или опровергнуть мое заявление.
1. открываем - Task Manager (Ctrl+Alt+Del нажать кнопку)
2. открываем SQL Query Analizer (на сервере! где установлен SQL)
3. Запускаем в окне кусок кода создающей Linked Server (в пути поставьте реальный путь к любому DBF файлу).
4. Запускаем цикл.
5. Ждем результатов, попутно расматривая растущие Hendles и уменьшающуюся память.
6. Перегружаем сервер и никогда больше так не делаем.

У кого результаты не такие печальные как у меня поделитесь как вы этого добились? (Все сервис паки у меня стоят, по крайней мере на одной машине)
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022114
Alexander_Chepack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с OpenQuery или OpenRowset поиграть не пробовали? Как в этом случае?
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022126
Nikolay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С OpenQuery пробовал, то же самое. С OpenRowset не пробовал, наверно тоже не получится. Я даже вставлял в инсерт SQLDisconnect и SQLFreeHandle хотя это совсем из другой оперы (но с другой стороны поставленная в конец инсерта команда ошибок не вызывает а значит может так и надо?). Неважно все равно не получается.
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022130
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пробовал предложенный когда-то вами код именно на консоли сервера из QA

Microsoft SQL Server 2000 - 8.00.534 (Intel X86) Nov 19 2001 13:23:50 Copyright (c) 1988-2000 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 2)

и у меня Windows2000 Advanced Server SP2
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022253
Nikolay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда вообще не понимаю, единственная разница в релизах SQL у меня стандарт и девелопер а у тебя ентерпрайз. И всетаки хочется чтобы и у меня работало "правильно". Alexander_Chepack подтолкнул меня к повторным проверкам OpenQuery и OpenRowset и вот что получилось.
если использовать драйвера ODBC

sp_addlinkedserver
@server = 'MYDBFs',
@provider = 'MSDASQL.1',
@srvproduct = 'ODBC data source',
@provstr = 'Driver={Microsoft dBase Driver (*.dbf)};DBQ=D:\ARHIV;'

то ошибка не возникает хенделы возвращаются по окончании запроса, правда обращатся можно только через OpenQuery (связки типа mydbfs...MyBase не получаются)
INSERT INTO MyBase
SELECT * FROM OpenQuery(SQLPubs, 'select * from MyBase')

или через OpenRowset
INSERT INTO MyBase
SELECT * FROM OpenRowset('MSDASQL.1', 'Driver={Microsoft dBase Driver (*.dbf)};DBQ=D:\ARHIV;', 'select * from MyBase')

обращение через OpenRowset предпочтительнее (не надо создавать Linked Server) но возникает проблема другого рода нельзя изменять Dbf таблици. а это иногда необходимо. Можно использовать другие драйвера например Driver=Microsoft Visual FoxPro Driver (единственный который я еще успел попробовать) но он выполняя апдейт Dbf-а виснет на конце файла, короче надо еще разбиратся.

Glory особое вам спасибо, похоже никто кроме вас не проверял код. Но всеже не у всех конфигурация как у вас а работать должно на всех релизах (если они последние). А это значит у меня чтото не так с машиной а точнее с 4-мя на каких пробовал код и хотелось бы знать что.
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022254
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень похоже, что проблема все-таки в Jet.OLEDB, раз MSDASQL работает нормально.
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022265
Nikolay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да похоже. Небольшое но прикольное дополнение, нормально работает MSDASQL.1 а а если написать MSDASQL то хендлы тоже растут (15-16) за вызов и не отдаются. У Jet.OLEDB сложней посчитать, забирается сразу гдето 80-120 около половины возвращается, короче после вызова не отдается 40-50.
Glory вы писали что пробовали на файлах Visual Fox Pro, а судя по тому что его драйвер на моих файлах повисает, -? неоднозначные получаются файлы. Надо проверить, я нашёл у себя диск Fox Pro -шный сегодня проверю как у меня ведут себя файлы от Visual Fox Pro, вечером пропишу результаты.
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022345
Nikolay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Результат пробы с файлами созданными Visual Fox Pro ничем не отличается от ранних результатов. И при дальнейшем обдумывании решил что Jet.OLEDB здесь не причем. Ведь все нормально работает при вызове из Delphi а в SQL простой SELECT FROM mydbfs...MyBase отбирает ресурсы.
Люди! неужели ни у кого мыслей нет, ну хоть в каком направлении искать?
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022449
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется дело все-таки в провайдере. У меня похожая история была при работе с Excel и dbf файлами. В то же время через linked server получаю данные из txt файлов и из Oracle - все в порядке. Причем job, принимающий данные из Oracle, срабатывает каждые две минуты.
MS SQL Server 2000 SP2. Windows NT 4.0 SP6a.
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022545
Nikolay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня должно работать каждые пять секунд , из Exel-я я пробовал только память уменьшается хендлы не растут, c Acsess-ом вообще без проблем. На сайте Майкрософт признана подовного рода ошибка только для ORACLE и SQL 7.0. Про Dbf я ничего не нашол и до сих пор не избавился.

Выдержка из рапорта об ошибке:

BUG: Out of Memory Error Message Occurs When You Query an ORACLE Linked Server that has a Numeric Column (Q268520)

--------------------------------------------------------------------------------
The information in this article applies to:


Microsoft SQL Server version 7.0


--------------------------------------------------------------------------------
BUG #: 57982 (SQLBUG_70)

и рекомендуемый способ решения:
Use the ODBC driver for ORACLE that is provided by Microsoft:
EXEC sp_addlinkedserver @server = 'ORACLEODBC', @srvproduct = 'MSDASQL', @provider = 'MSDASQL',
@provstr = 'DRIVER={Microsoft ODBC for Oracle};SERVER=MyOracleServer;UID=USERNAME;PWD=Password;'
go
sp_addlinkedsrvlogin 'ORACLEODBC', false, NULL, 'USERNAME', 'Password'

в принципе то же что и я "нарыл" собственными изысканиями но такому решению не хватает функциональности (не могу изменять dbf файлы) а это иногда необходимо.
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022575
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Nikolay:
Вы говорите что с Access нет проблем, может попробовать подлинковать Ваш dbf из Access? Я как-то перекачивал mdb файл, заодно, вместе с таблицами Access, перекачал подлинкованные dbf, xls и txt файлы.
Может получиться update-ть таким образом dbf?
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022586
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Nikolay
Действительно, в моем тестовом dbf файле не было числовых полей. Пришлите мне на brylyev@hotmal.com кусок вашего файла(скажем 1000 записей для ровного счета).
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022596
Nikolay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MadDog
А как это можно сделать? В Access-е тоже есть Linked Server? или вы чтото другое имеете в ввиду? если перекачивать в Access средствами ADO(по записям) то это не выход по скорости это даже медленней чем сразу в SQL.
обьясните как "подлинковать dbf" к Access-у? pls.

Glory
файл выслал хотя и не верю что чтото получится. т.е. наоборот у вас он скорей всего будет работать как надо.
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022600
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В закладке "Таблицы" нажмите "Создать", укажите "Связь с таблицами", далее выбирайте нужный файл нужного типа.
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022602
Nikolay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да действительно получилось. Надо еще протестировать как SQL будет себя вести на такой связке (главное позволит ли он изменять dbf-ки, решение о закачке dbf в SQL есть см.выше) ну и остальное, сегодня этим и займусь. И главное как их прилинковать програмно средствами SQL? Из Access-а не удобно да и его может вообще не быть на некоторых машинах.
Ладно почитаю Help в Access-е по mdb SQL может и найду.
Спасибо за идею, еще одно направление для поисков.
...
Рейтинг: 0 / 0
Всех кто использует Linked Server касается. Ошибка!!!
    #32022662
Nikolay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал связку SQL->MDB->DBF результат как всегда неутешительный.
первое mdb-SQL-евских методов прилинковать Dbf к Mdb похоже нет (я не нашел) но даже если бы и были то
второе вызов типа ,SELECT * FROM MyMdbLinkedServer...DbfTableLinkedToMdb, оказывает то же действие что и прилинкованый Dbf к SQL. Таблицу из Mdb берет нормально (загадка природы!). Кстати если смотреть в Enterprise Managar - е таблицы прилинкованые к Mdb не видны, а команды SELECT,INSERT,DELETE их обрабатывают. (если бы не эффект с памятью то можно было бы найти этому применение).
и третье в Helpe Access-а встретил фразу, вроде "если прилинкованные dBASE файлы не обрабатываются то измените настройки" (дальше сохранил)

Перейдите в подраздел \HKEY_LOCAL_MACHINE
\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase и внесите необходимые изменения.
Для получения сведений о настройке драйверов dBASE нажмите кнопку .
(сведений о настройке нет кнопка никуда не ведет)

Возможно изменения настроек в джете и помогут.
Просьба к Glory не могли бы вы экспортнуть в regedit-е всю ветку \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet (раз уж у вас все нормально) и прислать мне для сравнения с моими настройками? адрес sniknik@rambler.ru , может Эдвансед Сервер как то по другому настраивает джет.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Всех кто использует Linked Server касается. Ошибка!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]