|
|
|
Разница провайдеров SQLOLEDB, MSOLEDBSQL и SQLNCLI11 по работе с транзакциями
|
|||
|---|---|---|---|
|
#18+
Коллеги, приветствую! Обнаружил не понятное мне поведение ADODB.Connection.BeginTrans в части транзакций. Никак не могу понять, в чём дело. Есть тестовый код: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Для SQLOLEDB выдача в профайлере MSSQL сервера (версия 11.0.2100.60) такая: set implicit_transactions on go select top 1 * from sys.all_views go IF @@TRANCOUNT > 0 COMMIT TRAN go И это правильно, т.к. ADODB так работает с транзакциями - через set implicit_transactions on. А для MSOLEDBSQL и SQLNCLI11 такая: select top 1 * from sys.all_views И это не верно - транзакции вообще нет! С чем это может быть связано? Может, параметры MSOLEDBSQL и SQLNCLI11? Благодарю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2020, 03:43 |
|
||
|
Разница провайдеров SQLOLEDB, MSOLEDBSQL и SQLNCLI11 по работе с транзакциями
|
|||
|---|---|---|---|
|
#18+
А если писать так ? Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2020, 12:02 |
|
||
|
Разница провайдеров SQLOLEDB, MSOLEDBSQL и SQLNCLI11 по работе с транзакциями
|
|||
|---|---|---|---|
|
#18+
DimaBr, Ну это понятно, что можно. Но дело в том, что Код: plaintext Код: plaintext Повайдер MSOLEDBSQL я только планирую использовать. Начал тестировать с ним, понял, что Код: plaintext Вот и озадачился... Возможно параметры провайдера MSOLEDBSQL надо как-то задавать в Код: plaintext Но порыв интернет, ничего не нашел по этому поводу. Обращаюсь к сообществу. Может, кто-то сталкивался с подобным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2020, 12:16 |
|
||
|
Разница провайдеров SQLOLEDB, MSOLEDBSQL и SQLNCLI11 по работе с транзакциями
|
|||
|---|---|---|---|
|
#18+
На всякий случай обновил сервер до 11.0.7001.0 отсюда https://www.microsoft.com/ru-RU/download/details.aspx?id=56040 Эффект нулевой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2020, 12:31 |
|
||
|
Разница провайдеров SQLOLEDB, MSOLEDBSQL и SQLNCLI11 по работе с транзакциями
|
|||
|---|---|---|---|
|
#18+
Dimitry TimokhovС чем это может быть связано? Очевидно с тем, что MS SQL так и не научился в транзакции. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2020, 13:11 |
|
||
|
Разница провайдеров SQLOLEDB, MSOLEDBSQL и SQLNCLI11 по работе с транзакциями
|
|||
|---|---|---|---|
|
#18+
PS: У тебя внутри транзакции ровно один запрос да и тот select. В этом случае транзакция не имеет смысла вообще, поэтому хитрый драйвер её и не стартует. Дай ему хотя бы два запроса, причём DML. Или используй TIL отличный от умолчательного dirty read. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2020, 13:24 |
|
||
|
Разница провайдеров SQLOLEDB, MSOLEDBSQL и SQLNCLI11 по работе с транзакциями
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, В том то и дело, что всё это я уже проверил. 1. Даже по BOL при implicit_transations ON даже обычный select поднимает транзакцию (неявную). 2. В любом случае должен быть вызов implicit_transations ON. Его нет. 3. Вот ниже пример Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. А это выдача профайлера: create table _test (i int) go insert _test values(123) go insert _test values(123) go drop table _test go В общем, есть у меня ощущение, что у меня что-то поломалось в компьютере. Понять бы, что именно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2020, 13:35 |
|
||
|
Разница провайдеров SQLOLEDB, MSOLEDBSQL и SQLNCLI11 по работе с транзакциями
|
|||
|---|---|---|---|
|
#18+
Хммм... Странно. А если попробовать инсерты отроллбэчить? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2020, 13:42 |
|
||
|
Разница провайдеров SQLOLEDB, MSOLEDBSQL и SQLNCLI11 по работе с транзакциями
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Все пробовал: у меня MSOLEDBSQL (как и SQLNCLI11) полностью "кладут" на транзакции. А OLEDBSQL работает верно. В том то и дело, что странно. Я хотел MSOLEDBSQL заюзать еще полгода назад. Тогда плотно его тестировал. Не могу поверить, что я пропустил, что тогда он тоже не делал транзакций. Т.е. такое ощущение, что у меня именно перестали работать транзакции в MSOLEDBSQL. Может какая-то настройка сбилась. Но интернет молчит, что такое вообще возможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2020, 16:10 |
|
||
|
Разница провайдеров SQLOLEDB, MSOLEDBSQL и SQLNCLI11 по работе с транзакциями
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Дмитрий, а можете код проверить для MSOLEDBSQL (или SQLNCLI11)? В логе, что будет? Как у меня или всё же будет работа с транзакциями? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2020, 16:13 |
|
||
|
Разница провайдеров SQLOLEDB, MSOLEDBSQL и SQLNCLI11 по работе с транзакциями
|
|||
|---|---|---|---|
|
#18+
Коллеги, если нет времени с дельфи возиться, то есть VBScript Кому не сложно, просто его запустите (я просто в проводнике на него кликаю) - что будет в логах? Будет работа с транзакциями? Спасибо! ЗЫ Только имя сервера поправить надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2020, 16:50 |
|
||
|
Разница провайдеров SQLOLEDB, MSOLEDBSQL и SQLNCLI11 по работе с транзакциями
|
|||
|---|---|---|---|
|
#18+
Ложечки нашлись, но осадочек остался. В общем, BEGIN TRAN, COMMIT и ROLLBACK таки есть - в профайлере надо было настроить секцию Transactions (вторая с конца). Но (тот самый осадочек)! При использовании SQLOLEDB код: Код: plaintext 1. 2. 3. 4. дает такой результат: Код: plaintext 1. 2. 3. 4. 5. Т.е. автоматом TIL восстанавливался до значения по умолчанию в MSSQL - READ COMMITTED. При использовании MSOLEDBSQL тот же самый код дает уже такой вывод: Код: plaintext 1. 2. 3. Тут явно не ставится TIL. Хотя при анализе transaction_isolation_level таблицы sys.dm_exec_sessions видно, что TIL меняется. Но! В чем самое плохое - после cnn.CommitTrans TIL не меняется автоматом в READ COMMITTED. Понимаю, что, возможно, это даже логично - не менять неявно TIL. Но! TIL реально меняется только в одном случае - при вызове cnn.BeginTrans. Что? Мне еще раз вызывать cnn.BeginTrans/cnn.CommitTrans, чтобы сменить TIL? Бред, имхо. Тогда вопрос возникает, как в ADODB вообще правильно менять TIL? Или никто этого не делает с клиента? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2020, 19:35 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39978339&tid=2038156]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 342ms |

| 0 / 0 |
