Всем добрый день!
Возникла следующая проблема.
Идёт внедрение. Несмотря на административные меры (регламент выставления обновлений - не в рабочее время) частенько приходится делать оперативные обновления в боевом приложении в рабочее время. При обновлении приложения (и, похоже, даже при попытке сравнения объектов) идёт синхронизация таблиц, и появляются блокировки в 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)