|
|
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
У меня программа работает в MSSQL 2012 и Delphi 2010. Часто нужно бывает сделать действие в одной транзакции, чтобы в случае какой-нибудь ошибки все изменения базы данных откатились. С MSSQL я работаю через компоненты SDAC 6.11.23. Это выполняется 2-мя разными способами 1)Через Delphi Код: pascal 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. 2)Только через MSSQL средствами T-SQL Код: 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. База последнее время сильно разрослась и нагрузка на неё стала большая и иногда стали возникать ошибки блокировки транзакции "Превышено время ожидания запроса на блокировку." При работе с 2-м способом (ч/з T-SQL) были очень, очень редко замечены странности типа не закомиченой транзакции и даже нарушения целостности изменений данных. Но это настолько редко (1 может быть к 100 000) что можно сказать что эти наблюдения практически из области мифов и точным свидетельством служить не могут. Раньше работа с транзакциями была только через Delphi (1-й способ). Потом стали потихоньку вводить работу через T-SQL. Недавно я прочитал несколько статей в которых говориться что некоторые исключения (очень сильные, резкие) T-SQL уловить не может и тогда транзакция остается незакомиченной. Даже советовали такие места помещать в динамический SQL а его выполнять в sp_execute которую обрамлять обработко исключений в T-SQL Скажите пожалуйста, может ли действительно 2-способ (ч/з T-SQL) когда либо оставлять не закомиченные транзакции? (1-способ (через Delphi) как я понимаю в принципе не может). И стоит ли мне всегда избавляться от этого 2-го способа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2018, 22:55 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
bilov, 1) Через Delphi можно работать так же, как если бы на сервере. За SDAC 6.11.23. ничего сказать не могу, но с помощью АДО в рамках одной сессии, запросто Delphi Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Проблем никаких нет, кроме ненужной загрузки сети. 2) Незаконченной транзакция может быть из-за криворукости программистов. Те-же бесконечные циклы (хотя они априори не должны находиться внутри транзакций)... Основное правило: транзакция должна быть короткой... 3) автор1-способ (через Delphi) как я понимаю в принципе не может Очень глубокое заблуждение... Возможно, именно Вашим способом и нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2018, 23:29 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
bilov, И да... Основное преимущество работы на MSSQL сервере: https://professorweb.ru/my/sql-server/2012/level3/3_2.php ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2018, 23:37 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
Gerasimenko, Блин. Издержки серых ников... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 04:08 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
bilov, Ошибка "Превышено время..." при работе дельфийской программы может возникать, когда сессионная настройка LOCK_TIMEOUT на SQL-сервере установлена в значение, отличное от значения по умолчанию. Если ты сам не изменял эту настройку, то вероятнее всего это сделал за тебя компонент доступа SDAC. Я, например, столкнулся с таким же поведением компонента при работе с FireDAC, (что оказалось неприятной неожиданностью после ADO). Блок try-catch в transact-sql отлавливает не все ошибки, поэтому "странности незакомиченой транзакции" могут возникать. Подробнее в справке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 08:48 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
МалвараGerasimenko, Блин. Издержки серых ников... Пёс его знает: у меня с двух разных машин и с разными антивирусами: усе у порядку... Но лучше перебдеть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 09:05 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
Gerasimenko, у меня прога лежит на самом компе-сервере, она сервер приложений и связывается с другими прогами клиентскими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 17:22 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
Uridian, компонент коннекшен у меня Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Из того что сказали Вы и большинство остальных я могу понять что от способа который без Delphi надо постепенно избавляться. С точки зрения сети оба способа эквивалентны так как моя прога лежит на самой машине-сервере ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 17:27 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
bilovUridian, компонент коннекшен у меня Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Из того что сказали Вы и большинство остальных я могу понять что от способа который без Delphi надо постепенно избавляться. С точки зрения сети оба способа эквивалентны так как моя прога лежит на самой машине-сервере C точностью до наоборот. MSSQL - сервер оптимизирует и компилирует свои конструкции. Через делфи, на сколько хватит оперативки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 18:01 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
Gerasimenko, Спасибо, услышал. Буду думать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 23:10 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
bilov Код: pascal 1. 2. 3. 4. Если верить в компилятор, библиотеку доступа, OLEDB драйвер, в Виндовс, в физическую сеть, то разницы нет. Но в серьёзной работе, надеюсь, за такое надают по рукам, когда что-то подвиснет и весь офис будет сидет в блокировке. Единственно возможный способ- делать это на sql сервере. Остальное- студенчество или (пост)модернизм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2018, 17:28 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
tunknown, У меня сомнения не насчет транзакции больше, а насчет обработки исключений. Вы считаете что Код: sql 1. 2. 3. 4. 5. 6. будет всегда обрабатывать исключения? И это также надежно как Код: pascal 1. ? А как же это статья ? "Ошибки, не обрабатываемые конструкцией TRY…CATCH Конструкции TRY…CATCH не обрабатывают следующие условия. ..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2018, 00:41 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
bilovУ меня сомнения не насчет транзакции больше, а насчет обработки исключений. Вы считаете что будет всегда обрабатывать исключения? И это также надежно как ? Это разные уровни обработки и их нужно применять по ситуации. Меня огорчает транзакция, начатая в Delphi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2018, 17:26 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
tunknown, Мне Код: pascal 1. тоже не очень нравится, по идее там где метод является частью атомарной операции логичнее, надежнее прописывать это дельфишным параметром этого метода, а не зависеть от Conn1.InTransaction. Но 10лет работает, не буду трогать его пока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2018, 22:48 |
|
||
|
Транзакции и исключения в MSSQL 2012 и Delphi 2010
|
|||
|---|---|---|---|
|
#18+
bilov, еще вот это гляньте. https://docs.microsoft.com/ru-ru/sql/t-sql/statements/set-xact-abort-transact-sql В моей практике такая команда уменьшала вероятность нарушения целостности данных. Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2018, 10:13 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39618563&tid=2041068]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
150ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 487ms |

| 0 / 0 |
