Асинхронные триггеры в SQL Server 2005/2008

Согласно документация , «rewrite работает только по пути, а не по параметрам».

Попробуйте это вместо:

if ($args ~ id=(.+)){
  rewrite comments\.php /comments/$1 last;
}

34
задан John VM 30 June 2016 в 13:26
поделиться

7 ответов

Вы не можете заставить триггер работать асинхронно, но вы могли бы иметь триггер синхронно отправляет сообщение в очередь SQL Service Broker . Затем очередь может обрабатываться асинхронно с помощью хранимой процедуры.

26
ответ дан 27 November 2019 в 17:07
поделиться
7
ответ дан 27 November 2019 в 17:07
поделиться

Интересно, можно ли пометить запись для отслеживания изменений, вставив ее в таблицу «слишком процесс», включая информацию о том, кто это сделал? изменения и т. д. и т. д.

Затем может появиться другой процесс и регулярно копировать оставшиеся данные.

1
ответ дан 27 November 2019 в 17:07
поделиться

Существует очевидный конфликт между «хорошо выполняет свою работу» и «неприемлемо», очевидно.

Звучит мне, что вы пытаетесь использовать триггеры так же, как вы использовали бы события в процедурном приложении ОО, которое IMHO не отображает.

Я бы назвал любую логику триггера, которая занимает 30 секунд - нет, больше, чем 0,1 секунды - как неисправный. Я думаю, что вам действительно нужно изменить свою функциональность и сделать это другим способом. Я бы сказал «если вы хотите сделать его асинхронным», но я не думаю, что этот дизайн имеет смысл в любой форме.

Что касается «асинхронных триггеров», основной фундаментальный конфликт состоит в том, что вы никогда не сможете включить такие что-то среднее между инструкциями BEGIN TRAN и COMMIT TRAN, потому что вы потеряли представление о том, успешно это выполнено или нет.

1
ответ дан 27 November 2019 в 17:07
поделиться

Создать таблицу истории. При обновлении (/ удалении / вставке) основной таблицы вставьте старые значения записи (удаленная псевдотаблица в триггере) в таблицу истории; нужна также некоторая дополнительная информация (метка времени, тип операции, может быть, пользовательский контекст). В любом случае новые значения сохраняются в оперативной таблице.

Таким образом, триггеры запускаются быстро (er), и вы можете переключать медленные операции в средство просмотра журнала (процедура).

1
ответ дан 27 November 2019 в 17:07
поделиться

Не знаю, но вставляете ли вы значения в таблицу аудита, которые также существуют в базовой таблице? Если это так, вы можете отслеживать только изменения. Следовательно, вставка будет отслеживать время изменения, пользователя, extra и группу значений NULL (в действительности это значение before). Обновление будет содержать только время изменения, пользователя и т. Д., А также значение перед измененным столбцом. У удаления есть изменение в и т. Д. И все значения.

Кроме того, у вас есть таблица аудита для каждой базовой таблицы или одна таблица аудита для БД? Конечно, последующее может более легко привести к ожиданиям, поскольку каждая транзакция пытается записать в одну таблицу.

0
ответ дан 27 November 2019 в 17:07
поделиться

Я подозреваю, что ваш триггер имеет один из этих общих триггеров генерации CSV / текста, предназначенных для регистрации всех изменений для всей таблицы в одно место. Хороший в теории (возможно ...), но трудный в обслуживании и использовании на практике.

Если бы вы могли работать асинхронно (что все равно потребовало бы сохранения данных где-нибудь для повторной регистрации позже), то вы не проводите аудит и не имеете использовать историю.

Возможно, вы могли бы взглянуть на план выполнения триггера и посмотреть, какой бит занимает наибольшее время?

Можете ли вы изменить, например, аудит для таблицы? Вы можете разделить текущие данные журнала в соответствующие таблицы.

0
ответ дан 27 November 2019 в 17:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: