|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
Всем привет. Если на таблица1 есть триггер, который логирует изменения в таблицу2, на которой в свою очередь тоже есть триггер, который запускает хранимую процедуру. Если я сделаю insert в таблицу1, коммит этой транзакции произойдет после выполнения хранимки? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 10:24 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
teCa Всем привет. Если на таблица1 есть триггер, который логирует изменения в таблицу2, на которой в свою очередь тоже есть триггер, который запускает хранимую процедуру. Если я сделаю insert в таблицу1, коммит этой транзакции произойдет после выполнения хранимки? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 11:07 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
Ведущий профессионал teCa Всем привет. Если на таблица1 есть триггер, который логирует изменения в таблицу2, на которой в свою очередь тоже есть триггер, который запускает хранимую процедуру. Если я сделаю insert в таблицу1, коммит этой транзакции произойдет после выполнения хранимки? ноуп. хотите сказать что insert в таблицу2 тригерный вывалится из транзакции автокоммита? действие транзакции будет распостраняться и на вставку триггера в таблицу2 и на запуск хранимой процедуры из триггера на второй таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 11:41 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
felix_ff Ведущий профессионал пропущено... Коммит произойдёт после команды COMMIT. Если мы в режиме автокоммита, то транзакцией является одиночная инструкция "insert в таблицу1". ноуп. хотите сказать что insert в таблицу2 тригерный вывалится из транзакции автокоммита? действие транзакции будет распостраняться и на вставку триггера в таблицу2 и на запуск хранимой процедуры из триггера на второй таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 11:47 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
teCa, неявные и явные транзакции фиксируются при выполнении COMMIT, автоматические - после завершения вставки или обновления. Триггер выполняется до выполнения фиксации. Как только закончат работы триггеры таблицы1 произойдет автоматическая фиксация всех изменений для текущего подключения. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 11:58 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
Эксперимент провести не сложно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Затем выполняете: Код: sql 1.
Получаете сообщение об ошибке. Не смотря на то, что триггер был AFTER INSERT, сбой в хранимой процедуре привёл к откату транзакции целиком и вставка записи в таблицу также откатилась. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 12:17 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
Хранимку поместил в джоб, а в последний триггер поместил инструкцию запуска джоба. Костыль конечно, но мне нужно, что-бы хранимка отработала после фиксации изменений, всё завязать на триггеры не удалось( ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 12:30 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
teCa, Если произойдет откат, то процедура ничего не обнаружит в случае джоба, результат работы процедуры откатится в случае триггера. Итог будет одинаков, но при выполнении процедуры в триггере удержание блокировок будет более длительным. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 12:57 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
teCa Хранимку поместил в джоб, а в последний триггер поместил инструкцию запуска джоба. Все уже давно придумано - http://rusanu.com/2009/08/05/asynchronous-procedure-execution/ ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 13:04 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
invm teCa Хранимку поместил в джоб, а в последний триггер поместил инструкцию запуска джоба. Все уже давно придумано - http://rusanu.com/2009/08/05/asynchronous-procedure-execution/ Так и получилось:( Если пользователь изменяет несколько атрибутов джоба, MSSQL делает это последовательно 1 изменение - 1 версия: авторVersion 60 2021-04-22 10:48:32.947 Version 61 2021-04-22 10:48:32.963 в таблицу2 данные записываются в полном объеме, но как и предполагали, при записи версии 61 происходит ошибка, те джоб уже запущен. Никогда не работал с асинхронным выполнением процедур, по данной статье сложно понять принципы работы, но ясно в какую сторону следует копать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 17:50 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
teCa, Вам нужно поведение атомарной транзакции, в mssql в явном виде такой конструкции нет. Но ее поведение возможно смоделировать с некоторой пляской. создаете линкованный сервер на самого себя Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
в случае когда вам нужно запустить какую либо логику вне контекста существующей транзакции используете линк. Код: sql 1. 2. 3. 4. 5. 6. 7.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 23:56 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
скип ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 07:48 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
felix_ff, Пробую запустить хранимку на линкованном сервере, процесс инсерта в таблицу с триггером подвисает, инсерт ждет ответа от OLEDB, в то время, как выполнение хранимки заблокировано процессом вставки. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 13:03 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
teCa felix_ff, Пробую запустить хранимку на линкованном сервере, процесс инсерта в таблицу с триггером подвисает, инсерт ждет ответа от OLEDB, в то время, как выполнение хранимки заблокировано процессом вставки. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 13:16 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
teCa, смотрите информацию по sys.dm_os_waiting_tasks where session_id in (<spid основного процесса>, <spid процесса линка>) какие ресурсы на ожидании. архитекрутно вы не должны в процессе отдельной транзакции затрагивать данные к которым есть обращение из уже открытой транзакции. я привел в пример процедурку логирования, но у меня там только вставка данных для лога. если у вас процедура запускающаяся на линке по логике сложнее, то меняйте архитектуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 13:40 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
Не совсем понятно, чего добивается автор. Триггер-триггер-процедура зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 14:50 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
Владислав Колосов Не совсем понятно, чего добивается автор. Триггер-триггер-процедура зачем? Я пытаюсь организовать логирование изменений в джобах: 1. Триггер на таблице sysjobs мониторит изменение версии задания, если версия меняется, происходит запись в таблицу prepare_jobaudit. (id,login,job_id,actions,version_number,modif_datetime,status) 2. Далее, должна отработать хранимая процедура, которая сохранит в таблице лога "слепок" новых настроек задания из таблиц sysjobs+sysjobsteps Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82.
1. Триггер1 - нужен для фиксации факта изменения в задании 2. Триггер2 - на таблице prepare_jobaudit должен после фиксации изменений в таблицах sysjobs и sysjobsteps и вызвать процедуру, которая сохранит новые настройки в логе. Сейчас проблема как раз в том, как вызвать процедуру сразу после коммита изменений в таблицах sysjobs и sysjobsteps. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 15:18 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
teCa Владислав Колосов Не совсем понятно, чего добивается автор. Триггер-триггер-процедура зачем? Я пытаюсь организовать логирование изменений в джобах: 1. Триггер на таблице sysjobs мониторит изменение версии задания, если версия меняется, происходит запись в таблицу prepare_jobaudit. (id,login,job_id,actions,version_number,modif_datetime,status) 2. Далее, должна отработать хранимая процедура, которая сохранит в таблице лога "слепок" новых настроек задания из таблиц sysjobs+sysjobsteps Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82.
1. Триггер1 - нужен для фиксации факта изменения в задании 2. Триггер2 - на таблице prepare_jobaudit должен после фиксации изменений в таблицах sysjobs и sysjobsteps и вызвать процедуру, которая сохранит новые настройки в логе. Сейчас проблема как раз в том, как вызвать процедуру сразу после коммита изменений в таблицах sysjobs и sysjobsteps. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 15:27 |
|
Подскажите, когда произойдет коммит транзакции?
|
|||
---|---|---|---|
#18+
teCa, Нужно делать таблицы аудита отдельно для sysjobjs, sysjobsteps, sysjobschedules и т.д. Во-первых, это решит вашт проблемы. Во-вторых, не обязательно изменять разные параметры задания одной логической операцией. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 15:30 |
|
|
start [/forum/topic.php?fid=46&fpage=26&tid=1684780]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 304ms |
total: | 431ms |
0 / 0 |