Показать сообщение отдельно
Старый 26.08.2009, 11:48   #1  
Atani is offline
Atani
Участник
 
77 / 15 (1) ++
Регистрация: 25.07.2003
Адрес: г. Королёв М.О.
Постоянное пересоздание триггера на SYSDATABASELOG
Всем добрый день!

Возникла следующая проблема.
Идёт внедрение. Несмотря на административные меры (регламент выставления обновлений - не в рабочее время) частенько приходится делать оперативные обновления в боевом приложении в рабочее время. При обновлении приложения (и, похоже, даже при попытке сравнения объектов) идёт синхронизация таблиц, и появляются блокировки в MS SQL.

Обнаружили, что во время сравнения и импорта объектов вызывается \Classes\SysSQLInitDBTriggers\checkAndCreateTriggers_MSSQL, который пытается удалить и создать заново триггер на таблице SYSDATABASELOG.

На очень многих таблицах настроен Журнал базы данных, и, видимо, из-за этой операции происходят блокировки.

Основная цель: убрать возникающие блокировки.

Интересно, что если система находит триггер, она его всё равно удаляет и создаёт заново. Зачем?
Сейчас я предполагаю внести модификацию, чтобы при нахождении триггера система не пересоздавала его

Вопрос: правильным ли я иду путём? Как правильно?

Скрипт триггера:
X++:
ALTER trigger [dbo].[onSYSDATABASELOGinsert] on [dbo].[SYSDATABASELOG] FOR INSERT AS 
update t set createddate = convert(datetime, convert( varchar(10), getdate(), 102), 102), createdtime = datediff( ss, convert(datetime, convert( varchar(10), getdate(), 102), 102), getdate()) 
from DBO.SYSDATABASELOG as t 
inner join inserted as s on t.dataareaid = s.dataareaid and t.recid = s.recid
Стек вызовов:
\Classes\SysSQLInitDBTriggers\checkAndCreateTriggers_MSSQL
\Classes\SysSQLInitDBTriggers\checkExistsDBTriggers
\Classes\Application\dbSynchronize

AX4.0 SP2,
MS SQL 2005 (9.00.4035.00)