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

Откуда: Греция Крит/Украина Донецк
Сообщений: 103
Уважаемые коллеги!

Есть в наличии база данных, которая работает под MS SQL Express edition 2005 на Windows Server 2003.

На этой БД висит приложение, которое для меня, можно сказать - "черный ящик". Это некая система типа ERP.

Мне нужно с периодичностью 5-10 минут вытаскивать из этой БД содержимое одной таблицы, сравнивать его с предидущим состоянием, которое я сохранаяю в своей базе данных и выполнять (или не выполнять список некоторых операций). В исходной таблице нет триггеров.

Если бы на MS SQL Express работали Transactional репликации - я бы просто запустил такую репликацию из нужной мне таблицы из исходной БД в мою и никаким бы образом не трогал исходную базу данных.
В реальности же, мне приходится использовать запрос вида:
автор
USE [MIRROR_DATABASE]

TRUNCATE TABLE [MIRROR_DATABASE].[dbo].[stock_move]

INSERT INTO [MIRROR_DATABASE].[dbo].[stock_move] WITH (TABLOCK)
SELECT * FROM
[SRC_DB].[dbo].[Stock Move];

select * from [MIRROR_DATABASE].[dbo].[stock_move] EXCEPT select * from [MIRROR_DATABASE].[dbo].[stock_move_prev] order by [Style/Colour/Size ID],[Branch ID]

MIRROR_DATABASE - это моя база данных,
SRC_DB - исходная база данных
Я здесь просто в пакетном режиме (batch query) делаю:
1) очистку моей копии таблицы,
2) копирую исходную таблицу из SRC_DB БД (насколько говорит документация MS SQL , WITH (TABLOCK) локирует мою табицу, а не исходную)
3) Сравниваю текущее состояние таблицы с предидущим (уже на таблицах из моей базы данных).
4) Беру результат сравнения и работаю с ним.

Моя программа написана на Java и использует JTDS для работы с MS SQL. Программа установлена на том же компьютере, что и MS SQL. Описанная выше операция выполянется периодически (каждые 5-10 минут).

Иногда, но не всегда, при активной работе ERP приложения ( как я понял - вводят новые товары в систему) происходит крах этой ERP-системы.
Если мою программу остановить, то попытка ввода новых товаров заканчивается успешно. Получается, что я каким то образом мешаю работе основной системы. Никаких логов ERP-системы обнаружить не удалось, хотя я прошерстил весь сервер. А в логах MS SQL ничего интересного (хотя бы приблизительно) нет. В исходной таблице [Stock Move] всего 20000 (двадцать тысяч) записей.

Я не считаю себя большим специалистом по MS SQL.
Может кто подсказать, как в условиях, когда я только один запрос делаю в исходную БД, можно обрушить другое приложение, работающее с этой же БД?

Уже написав пост - помотрел снова в запрос. У меня там в результате получается иногда Record Set. Пока я по нему пройдусь и обработаю - может иногда занять пару минут. Единственное подозрение, что все это время я держу локированной исходную таблицу. Возможно ли такое?

Спасибо за сочуваствие.
1 апр 13, 13:52    [14121427]     Ответить | Цитировать Сообщить модератору
 Re: Крах стороннего приложения  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3650
Блокировки ?
1 апр 13, 14:01    [14121481]     Ответить | Цитировать Сообщить модератору
 Re: Крах стороннего приложения  [new]
Anatoly K
Member

Откуда: Греция Крит/Украина Донецк
Сообщений: 103
Спасибо...
Ozerov
Блокировки ?

Я имел в виду, что может быть, пока я держу Record Set открытым, исходная таблица блокируется, из за того, что Result Set берется в batch query?
Параметры соединения с MS SQL в JTDS у меня все по умолчанию (кроме IP сервера,имени базы данных, логина и пароля). Account, имеет права доступа к обеим базам данных.
Попробую разбить запрос на два:
автор
USE [MIRROR_DATABASE]

TRUNCATE TABLE [MIRROR_DATABASE].[dbo].[stock_move]

INSERT INTO [MIRROR_DATABASE].[dbo].[stock_move] WITH (TABLOCK)
SELECT * FROM
[SRC_DB].[dbo].[Stock Move];

и
автор
select * from [MIRROR_DATABASE].[dbo].[stock_move] EXCEPT select * from [MIRROR_DATABASE].[dbo].[stock_move_prev] order by [Style/Colour/Size ID],[Branch ID]

Может в этом случае блокировки будут очень короткими.
1 апр 13, 14:29    [14121623]     Ответить | Цитировать Сообщить модератору
 Re: Крах стороннего приложения  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33959
Блог
Anatoly K
Иногда, но не всегда, при активной работе ERP приложения ( как я понял - вводят новые товары в систему) происходит крах этой ERP-системы.
Если мою программу остановить, то попытка ввода новых товаров заканчивается успешно. Получается, что я каким то образом мешаю работе основной системы. Никаких логов ERP-системы обнаружить не удалось, хотя я прошерстил весь сервер.


Крах не сопровождается никаким сообщением об ошибке?
можно настроить профайлер на сбор данных, там есть события Error
1 апр 13, 17:13    [14122817]     Ответить | Цитировать Сообщить модератору
 Re: Крах стороннего приложения  [new]
Anatoly K
Member

Откуда: Греция Крит/Украина Донецк
Сообщений: 103
Спасибо.
Критик
Крах не сопровождается никаким сообщением об ошибке?
можно настроить профайлер на сбор данных, там есть события Error


Никаких сообщений об ошибке падающее приложение не выдает, просто умирает...

Дело в том, что на сервере, который используется в работе, стоит какая-то обкусанная версия SQL Management Studio.
Т.е. показывает мне, что есть лог файл, но смотреть не дает. Хотя у меня на локальном компе я могу не только знать, что есть лог файл, но и посмотреть его. А на удаленном сервере - хоть застрелись.

Приходится идти в файловую систему, есть там в установке MS SQL директория с логами и смотреть их в notepad. Нет там ничего странного. Сервер то не валится. Валится ERP-приложение.

Сейчас разбил на два запроса мой первоначальный запрос.
Т.е. делаю копию таблицы в мою базу данных, чищу Statement и вторым запросом уже работаю только со своей базой данных.
Проблема то простая - ловить изменения в таблице (тут сегодня даже обсуждался это вопрос).
На другом сервере, который не Express а нормальный, сделал репликацию в мою базу данных всех таблиц, которые меня интересуют, повесил триггеры на них, все работает и я никому не мешаю. А здесь, с Express, извращаться приходится.
1 апр 13, 17:27    [14122901]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить