Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Одновременный доступ к БД нескольких программ-клиентов  [new]
AleksandrT
Member

Откуда:
Сообщений: 7
Доброго времени суток.
Существует БД на MS sQL Server 2007 и несколько программ-клиентов, подключающихся к БД с помощью ADODB.Connection и изменяющих записи в таблице БД. Моменты обращения к БД недетерминированы. Проблема в том, что при небольшой частоте обращений все данные записываются корректно, но при увеличении частоты часть запросов на изменение как будто не проходит. Посоветуйте пожалуйста пути решения проблемы. Может ли быть так, что один из клиентов занимает базу и не дает другому записать ? Может быть можно как-то увеличить количество попыток подсоединения к базе метода Open в ADOConnection ? Или открывать базу в каком-то специфическом режиме (поскольку разные клиенты меняют разные записи, теоретически они не могут мешать друг другу) ?
Заранее спасибо.
27 дек 11, 14:35    [11833220]     Ответить | Цитировать Сообщить модератору
 Re: Одновременный доступ к БД нескольких программ-клиентов  [new]
libru
Member

Откуда:
Сообщений: 877
select @@version
27 дек 11, 14:36    [11833238]     Ответить | Цитировать Сообщить модератору
 Re: Одновременный доступ к БД нескольких программ-клиентов  [new]
libru
Member

Откуда:
Сообщений: 877
AleksandrT
при увеличении частоты часть запросов на изменение как будто не проходит. Посоветуйте пожалуйста
иди к начальнику и проси чтобы он нанял тестировщика
27 дек 11, 14:37    [11833256]     Ответить | Цитировать Сообщить модератору
 Re: Одновременный доступ к БД нескольких программ-клиентов  [new]
Glory
Member

Откуда:
Сообщений: 104751
AleksandrT
Может ли быть так, что один из клиентов занимает базу и не дает другому записать ?

А вашей программе разве нет обработки ошибок ?
27 дек 11, 14:37    [11833259]     Ответить | Цитировать Сообщить модератору
 Re: Одновременный доступ к БД нескольких программ-клиентов  [new]
AleksandrT
Member

Откуда:
Сообщений: 7
Glory
AleksandrT
Может ли быть так, что один из клиентов занимает базу и не дает другому записать ?

А вашей программе разве нет обработки ошибок ?

Был бы признателен если бы вы подсказали и на эту тему. Сам искал возвращаемые методом Open коды, чтобы анализировать по ним результат запроса, но сходу ничего не находится. У меня все таки подозрения на проблемы с доступом.
27 дек 11, 14:50    [11833366]     Ответить | Цитировать Сообщить модератору
 Re: Одновременный доступ к БД нескольких программ-клиентов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31987
AleksandrT
Glory
пропущено...

А вашей программе разве нет обработки ошибок ?

Был бы признателен если бы вы подсказали и на эту тему. Сам искал возвращаемые методом Open коды, чтобы анализировать по ним результат запроса, но сходу ничего не находится. У меня все таки подозрения на проблемы с доступом.
Обычно ошибки обрабатывают, ловя исключения, типа TRY...CATCH (зависит от языка программирования).
27 дек 11, 16:25    [11834060]     Ответить | Цитировать Сообщить модератору
 Re: Одновременный доступ к БД нескольких программ-клиентов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
AleksandrT,

Методов довольно много. Для начала профайлером посмотрите, что у вас происходит с базой. Особенно на предмет блокировок.
Если лень, или не знаете как, в критичное время посмотрите представления sys.dm_exec_requests и sys.dm_tran_locks. Встроенные в Management Studio репорты тоже достаточно хороши.
27 дек 11, 17:18    [11834393]     Ответить | Цитировать Сообщить модератору
 Re: Одновременный доступ к БД нескольких программ-клиентов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31987
Jovanny
AleksandrT,

Методов довольно много. Для начала профайлером посмотрите, что у вас происходит с базой. Особенно на предмет блокировок.
Если лень, или не знаете как, в критичное время посмотрите представления sys.dm_exec_requests и sys.dm_tran_locks. Встроенные в Management Studio репорты тоже достаточно хороши.
Для начала нужно поправить ошибки в приложении, что бы оно не пропускало молча ошибки от сервера.
27 дек 11, 18:12    [11834800]     Ответить | Цитировать Сообщить модератору
 Re: Одновременный доступ к БД нескольких программ-клиентов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
alexeyvg,

Если это возможно, что встречается далеко не всегда. Но разрулить блокировки на стороне сервера возможно.
27 дек 11, 18:46    [11834975]     Ответить | Цитировать Сообщить модератору
 Re: Одновременный доступ к БД нескольких программ-клиентов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
AleksandrT
Проблема в том, что при небольшой частоте обращений все данные записываются корректно, но при увеличении частоты часть запросов на изменение как будто не проходит.


Скорее указывает на проблему на стороне сервера.
Конечно, нужно перехватывать сообщения от сервера, если они есть, для этого неплохо опять же в серверных процедурах реализовать TRY...CATCH.
27 дек 11, 18:53    [11835023]     Ответить | Цитировать Сообщить модератору
 Re: Одновременный доступ к БД нескольких программ-клиентов  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
Jovanny
alexeyvg,

Если это возможно, что встречается далеко не всегда. Но разрулить блокировки на стороне сервера возможно.
Я фигею!
ТС толком не знает версию своего сервера, а ему советуют профайлер, блокировки разруливать...


Автор, если собиретесь самостоятельно с этим разбираться (со строны сервера), вам читать и читать:

Управление параллельным доступом к данным;

sp_who;

Блокировка в компоненте Database Engine...
27 дек 11, 19:15    [11835106]     Ответить | Цитировать Сообщить модератору
 Re: Одновременный доступ к БД нескольких программ-клиентов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31987
Jovanny
Если это возможно, что встречается далеко не всегда.
В смысле? Поправить приложение нельзя? Так пусть обратяться к разработчикам. В реальности "нельзя поправить" встречается необычайно редко, обычно возможность есть.
Jovanny
AleksandrT
Проблема в том, что при небольшой частоте обращений все данные записываются корректно, но при увеличении частоты часть запросов на изменение как будто не проходит.

Скорее указывает на проблему на стороне сервера.
Конечно, нужно перехватывать сообщения от сервера, если они есть, для этого неплохо опять же в серверных процедурах реализовать TRY...CATCH.
Какие ещё сообщения от сервера, если скорее всего приложение само разрывает коннект при записи.

Это конечно только предположение, что там на самом деле, знает только ТС, но не говорит :-)
27 дек 11, 20:25    [11835454]     Ответить | Цитировать Сообщить модератору
 Re: Одновременный доступ к БД нескольких программ-клиентов  [new]
AleksandrT
Member

Откуда:
Сообщений: 7
alexeyvg

Это конечно только предположение, что там на самом деле, знает только ТС, но не говорит :-)


Он тоже не знает :)
Но, спасибо всем, поначалу уже решил что не помогут, но потом услышал много дельного. Спасибо )
Обработчик TRY CATCH реализовать нет воможности - дело в том что программа-клиент, это специализированная среда разработки, управляющая технологическим процессом на производстве, и допускает лишь небольшие скрипты на языке Си, а надстройка с доступом из нее к БД - уже моя идея и реализована мной. По этой же причине вывод сообщений об ошибке на клиенте бесполезен (там некому на них реагировать), разве что в целях наладки.
28 дек 11, 07:52    [11836632]     Ответить | Цитировать Сообщить модератору
 Re: Одновременный доступ к БД нескольких программ-клиентов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
AleksandrT,

Я имел ввиду TRY...CATCH в хранимых процедурах SQL Server. Если, конечно, у Вас SQL Server 2005 или выше.
TRY...CATCH
Таким образом можно отловить ошибки на стороне сервера и разрешить их, или хотя бы записать в таблицу, файл или Event Log.
28 дек 11, 11:14    [11837650]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить