powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / DB Script при снятии принудительно выполнить действия
15 сообщений из 15, страница 1 из 1
DB Script при снятии принудительно выполнить действия
    #39922174
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем.

SQL 2012
Есть не сложный скрипт в цикле Update батчами по 20 000
одной большой и важной таблицы.


DISABLE TRIGGER tr_u_Base_CD ON dbo.Base ;
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
WHILE 1=1
BEGIN 
...
Begin TRAN ;
		-- формирование таблицы #t1
		
		UPDATE p2
		  SET   Id_BusinessDirections = new1     
		FROM  base p2
		   JOIN   #t1 t1 
			   ON t1.id_base = p2.id_base
			;
		Commit 

END ;	
ENABLE TRIGGER tr_u_Base_CD ON dbo.Base ;


Прогнал вручную на тесте - все ок - батчами
но если завершить принудтильно то висит блокировка на таблицу Base ( если транзакция открыта rollback конечно помогает но )


Можно ли как-то если скрипт к-й будет рабоать долго ( > 3 часов)
из внешнего тула ( SQL Multi Script RedGate - надо на 15+ филиалах накатить )
и будет где-то завершен принудительно (или подвиснет )

каким то образом выполнить

Rollback снять блокировку
Enabe TRIGGER tr_u_Base_CD ON dbo.Base ;
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39922181
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем же явно транзакцию открывать?
каждый UPDATE и так в автокоммите.
и при прерывании одного из UPDATE-ов он и будет откачен.
автоматически.

а так-то надо выставлять xact_abort on
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39922183
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

автор если завершить принудтильно
это какое действие?
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39922186
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123
зачем же явно транзакцию открывать?
каждый UPDATE и так в автокоммите.
и при прерывании одного из UPDATE-ов он и будет откачен.
автоматически.

а так-то надо выставлять xact_abort on


обычно я и не открываю (когда из ssms)
тут фишка в том что скрпиты запускаются из внешнего тула
(или redGate или внутреннего самописного )
перестраховываюсь (может и зря )
я не знаю какие там установки Set



xact_abort on
откатит транзакцию так ?
а выполнить как-то
Enabe TRIGGER tr_u_Base_CD ON dbo.Base ;
вряд ли возможно
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39922198
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ничего не понимаю.
джоб падает или его руками тормозят?
если тормозят, то с чего бы еще чему-то выполняться?
кто снимает джоб, тот пускай и триггер обратно активирует.
если падает с ошибками,
то все завернуть в try..catch
и в catch принудительìно активировать триггер.
---
+ не надо открывать явную транзакцию.
вопрос был, как блокировку не оставлять на таблице?
ответ: а не надо открывать транзакцию, которая здесь не нужна
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39922227
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

при отключении от сервера откат произойдет автоматически.
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39922387
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Гулин Федор,

при отключении от сервера откат произойдет автоматически.


Когда я снимаю скрпит в SSMS не происходит - ясно сессия висит
(наверно когда сессия убьется - то и произойдет роллбак)

главный вопрос был
можно ли в случае ошибки как-то заенейблить отключенные триггеры автоматом
это критично ( ночью когда будет Update ) они могут быть disable
утром должны быть enable в независимости отработал или упал скрипт
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39922394
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

отключайте триггер в транзакции.

авторКогда я снимаю скрпит в SSMS
потому что это не kill. закройте окно
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39922402
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,
да я понимаю это - про ssms - что это не kill

я не могу отключить триггре в транзакции
весь смысл Update Batch теряется

ps я переписал Update - теперь вроде за 3-4 часа должен справиться на самой большой таблице
поэтому все дложно быть ок -

у меня были какие то ассоциации с тем что вроде где-то ( м.б В sqlcmd)
была возможность выполнить действие какое-то если произойдет сбой
но м.б такого и нет
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39922403
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

авторвесь смысл Update Batch теряется

эток какой такой смысл
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39922410
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор
я не могу отключить триггре в транзакции
Не нужно отключать триггер.
Его нужно переписать так, чтобы просто не выполнялся при определенных условиях.
Например, если существует временная таблица с определенным именем, то не выполняется.
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39922412
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тригеры (2) на Update отключаются для ускорения
и чтобы changedate НЕ поменялось ( иначе OLAP систем потащит всю инфу по changedate с 2001 года )

скрипт приведен в 1 посте.
батчи по 20 000
каким образом засунуть тригер в транзакцию ?
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39922416
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор
тригеры (2) на Update отключаются для ускорения
и чтобы changedate НЕ поменялось ( иначе OLAP систем потащит всю инфу по changedate с 2001 года )

скрипт приведен в 1 посте.
батчи по 20 000
каким образом засунуть тригер в транзакцию ?

переместить на пару строк ниже?

или есть масса вариантов сделать триггер с обходом общей логики, как и говорит invm
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39922418
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
Гулин Федор
я не могу отключить триггре в транзакции
Не нужно отключать триггер.
Его нужно переписать так, чтобы просто не выполнялся при определенных условиях.
Например, если существует временная таблица с определенным именем, то не выполняется.


переписывать большой тригер не вариант в данном случае (он навороченный и я туда не полезу - тем более что > 15 филиалов)
хотя как ИДЕЯ семафора - вполне рабочая

а малый апдейтит только changedate



зы значит ложная память что где то чего то было на случай сбоя скрипта

проблема вобщем вроде решена - ну или можно простейши малти-жоб написать
enable trigger 1
enable trigger 2
да и зашедулить его на 7 утра с нотификацией себе если вдруг свалится
...
Рейтинг: 0 / 0
DB Script при снятии принудительно выполнить действия
    #39923002
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
Гулин Федор
я не могу отключить триггре в транзакции
Не нужно отключать триггер.
Его нужно переписать так, чтобы просто не выполнялся при определенных условиях.
Например, если существует временная таблица с определенным именем, то не выполняется.


Спасибо до меня тока дошло.
Что надо создать #disable_trigger как семафор для своей сессии

уже заюзал сей подход -
ибо пришлось апдейить часть данных днем

Код: sql
1.
2.
3.
4.
5.
6.
7.
Alter TRIGGER tr_u_Base_CD ON dbo.Base FOR UPDATE
  AS
	If object_id( 'tempdb..#disable_trigger') != 0 		
		Return ;
	
    UPDATE Base SET changedate = getdate() 
    WHERE  id_base  IN (SELECT DISTINCT id_base FROM inserted)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / DB Script при снятии принудительно выполнить действия
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]