|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
Добрый день всем. 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.
Прогнал вручную на тесте - все ок - батчами но если завершить принудтильно то висит блокировка на таблицу Base ( если транзакция открыта rollback конечно помогает но ) Можно ли как-то если скрипт к-й будет рабоать долго ( > 3 часов) из внешнего тула ( SQL Multi Script RedGate - надо на 15+ филиалах накатить ) и будет где-то завершен принудительно (или подвиснет ) каким то образом выполнить Rollback снять блокировку Enabe TRIGGER tr_u_Base_CD ON dbo.Base ; ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 11:19 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
зачем же явно транзакцию открывать? каждый UPDATE и так в автокоммите. и при прерывании одного из UPDATE-ов он и будет откачен. автоматически. а так-то надо выставлять xact_abort on ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 11:29 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
Гулин Федор, автор если завершить принудтильно это какое действие? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 11:30 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
Yasha123 зачем же явно транзакцию открывать? каждый UPDATE и так в автокоммите. и при прерывании одного из UPDATE-ов он и будет откачен. автоматически. а так-то надо выставлять xact_abort on обычно я и не открываю (когда из ssms) тут фишка в том что скрпиты запускаются из внешнего тула (или redGate или внутреннего самописного ) перестраховываюсь (может и зря ) я не знаю какие там установки Set xact_abort on откатит транзакцию так ? а выполнить как-то Enabe TRIGGER tr_u_Base_CD ON dbo.Base ; вряд ли возможно ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 11:36 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
ничего не понимаю. джоб падает или его руками тормозят? если тормозят, то с чего бы еще чему-то выполняться? кто снимает джоб, тот пускай и триггер обратно активирует. если падает с ошибками, то все завернуть в try..catch и в catch принудительìно активировать триггер. --- + не надо открывать явную транзакцию. вопрос был, как блокировку не оставлять на таблице? ответ: а не надо открывать транзакцию, которая здесь не нужна ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 12:04 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
Гулин Федор, при отключении от сервера откат произойдет автоматически. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 12:42 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
Владислав Колосов Гулин Федор, при отключении от сервера откат произойдет автоматически. Когда я снимаю скрпит в SSMS не происходит - ясно сессия висит (наверно когда сессия убьется - то и произойдет роллбак) главный вопрос был можно ли в случае ошибки как-то заенейблить отключенные триггеры автоматом это критично ( ночью когда будет Update ) они могут быть disable утром должны быть enable в независимости отработал или упал скрипт ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 16:42 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
Гулин Федор, отключайте триггер в транзакции. авторКогда я снимаю скрпит в SSMS потому что это не kill. закройте окно ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 16:49 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
TaPaK, да я понимаю это - про ssms - что это не kill я не могу отключить триггре в транзакции весь смысл Update Batch теряется ps я переписал Update - теперь вроде за 3-4 часа должен справиться на самой большой таблице поэтому все дложно быть ок - у меня были какие то ассоциации с тем что вроде где-то ( м.б В sqlcmd) была возможность выполнить действие какое-то если произойдет сбой но м.б такого и нет ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 16:53 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
Гулин Федор, авторвесь смысл Update Batch теряется эток какой такой смысл ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 16:55 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
Гулин Федор я не могу отключить триггре в транзакции Его нужно переписать так, чтобы просто не выполнялся при определенных условиях. Например, если существует временная таблица с определенным именем, то не выполняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 17:02 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
тригеры (2) на Update отключаются для ускорения и чтобы changedate НЕ поменялось ( иначе OLAP систем потащит всю инфу по changedate с 2001 года ) скрипт приведен в 1 посте. батчи по 20 000 каким образом засунуть тригер в транзакцию ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 17:02 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
Гулин Федор тригеры (2) на Update отключаются для ускорения и чтобы changedate НЕ поменялось ( иначе OLAP систем потащит всю инфу по changedate с 2001 года ) скрипт приведен в 1 посте. батчи по 20 000 каким образом засунуть тригер в транзакцию ? переместить на пару строк ниже? или есть масса вариантов сделать триггер с обходом общей логики, как и говорит invm ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 17:04 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
invm Гулин Федор я не могу отключить триггре в транзакции Его нужно переписать так, чтобы просто не выполнялся при определенных условиях. Например, если существует временная таблица с определенным именем, то не выполняется. переписывать большой тригер не вариант в данном случае (он навороченный и я туда не полезу - тем более что > 15 филиалов) хотя как ИДЕЯ семафора - вполне рабочая а малый апдейтит только changedate зы значит ложная память что где то чего то было на случай сбоя скрипта проблема вобщем вроде решена - ну или можно простейши малти-жоб написать enable trigger 1 enable trigger 2 да и зашедулить его на 7 утра с нотификацией себе если вдруг свалится ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 17:05 |
|
DB Script при снятии принудительно выполнить действия
|
|||
---|---|---|---|
#18+
invm Гулин Федор я не могу отключить триггре в транзакции Его нужно переписать так, чтобы просто не выполнялся при определенных условиях. Например, если существует временная таблица с определенным именем, то не выполняется. Спасибо до меня тока дошло. Что надо создать #disable_trigger как семафор для своей сессии уже заюзал сей подход - ибо пришлось апдейить часть данных днем Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2020, 16:24 |
|
|
start [/forum/topic.php?fid=46&fpage=70&tid=1686543]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
9ms |
get forum data: |
1ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 125ms |
0 / 0 |