Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Не работает dbcancel, db-library, MS SQL
|
|||
|---|---|---|---|
|
#18+
Всем привет Почему-то не отменяется select к БД (MS SQL) при работе через db Library 1) Заворачиваю Select к БД через dbcmd(dbproc, "Select...") 2) Запускаю выполнение запроса ret_code=dbsqlexec(dbproc); Запрос работает в БД, строки по нему не едут dbsqlexec управление не возвращает 3) В другом потоке вызываю dbcancel(dbproc), функция возвращает успех Select продолжает готовить выборку строк Подскажите, что я делаю не так??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 09:35 |
|
||
|
Не работает dbcancel, db-library, MS SQL
|
|||
|---|---|---|---|
|
#18+
все так, только отмена это не мгновенная операция. После db_cancel() сервер начинает останавливать работающий запрос, потом очищает уже подготовленный кусок результата, потом чистит свои внутренние буфера, потом сообщает клиенту. Потом интерфейсный драйвер на стороне клиента начинает очищать свои приемные буфера. И только потом dbsqlexec() вернется с ошибкой отмены. Соответственно, чем более тяжелый запрос был запущен изначально, тем дольше будет работать операция отмены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 18:19 |
|
||
|
Не работает dbcancel, db-library, MS SQL
|
|||
|---|---|---|---|
|
#18+
Подозрительно долго не возвращается управление. К примеру в OleDB запрос прерывается сразу же после выполнения ICommand::Cancel у команды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 18:56 |
|
||
|
Не работает dbcancel, db-library, MS SQL
|
|||
|---|---|---|---|
|
#18+
artiiВсем привет Почему-то не отменяется select к БД (MS SQL) при работе через db Library 1) Заворачиваю Select к БД через dbcmd(dbproc, "Select...") 2) Запускаю выполнение запроса ret_code=dbsqlexec(dbproc); Запрос работает в БД, строки по нему не едут dbsqlexec управление не возвращает 3) В другом потоке вызываю dbcancel(dbproc), функция возвращает успех Select продолжает готовить выборку строк Подскажите, что я делаю не так??? dbcancel() и подобные функции никогда не будут так работать (т.е. асинхронно). Он сработает, когда клиентское приложение получит управление для получения первой порции данных, вот тогда ты сможешь не выбирая остальные данные вызвать эту функцию для отмены выборки остальных строк и наборов. Вообще, выполняющийся запрос по хорошему нельзя остановить. Иногда поможет команда kill, но она привилегированная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 19:25 |
|
||
|
Не работает dbcancel, db-library, MS SQL
|
|||
|---|---|---|---|
|
#18+
MasterZivВообще, выполняющийся запрос по хорошему нельзя остановить. Иногда поможет команда kill, но она привилегированная. А в этом есть какая-то здравая логика? Допустим случайно вместо знака больше, поставили знак меньше в предикатах и отправили запрос на выполнение на пару дней или недель. Если я его запускал, то почему мне нужна какая-то привилегия, чтобы мой запрос тут же остановить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 19:59 |
|
||
|
Не работает dbcancel, db-library, MS SQL
|
|||
|---|---|---|---|
|
#18+
здравая логикаЕсли я его запускал, то почему мне нужна какая-то привилегия, чтобы мой запрос тут же остановить?Привилегии не требуются - нужны ресурсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 20:22 |
|
||
|
Не работает dbcancel, db-library, MS SQL
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovздравая логикаЕсли я его запускал, то почему мне нужна какая-то привилегия, чтобы мой запрос тут же остановить?Привилегии не требуются - нужны ресурсы. Какие ресурсы и их нужно больше чем для выполнения 2х дневного запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 20:26 |
|
||
|
Не работает dbcancel, db-library, MS SQL
|
|||
|---|---|---|---|
|
#18+
Какие ресурсыКакие ресурсы и их нужно больше чем для выполнения 2х дневного запроса?Простейший случай - модифицирующий запрос: Код: sql 1. забыли where и пошли модифицировать большую таблицу. Если запрос отменяется, то целостность требует сделать (неявный) rollback - чем больше модифицировали, тем дольше откатывать. Если просто "тяжёлый" select, то будут проблемы при конкурентном доступе - изолированность потребует создания версий или генерации журналов отката. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 21:03 |
|
||
|
Не работает dbcancel, db-library, MS SQL
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovКакие ресурсыКакие ресурсы и их нужно больше чем для выполнения 2х дневного запроса?Простейший случай - модифицирующий запрос: Код: sql 1. забыли where и пошли модифицировать большую таблицу. Если запрос отменяется, то целостность требует сделать (неявный) rollback - чем больше модифицировали, тем дольше откатывать. Если просто "тяжёлый" select, то будут проблемы при конкурентном доступе - изолированность потребует создания версий или генерации журналов отката. Это вы правильно заметили про DML. Что данные из андо будут обратно откатываться в базу данных. Но автор то про Select: artiiВсем привет Почему-то не отменяется select к БД (MS SQL) при работе через db Library 1) Заворачиваю Select к БД через dbcmd(dbproc, "Select...") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 21:30 |
|
||
|
Не работает dbcancel, db-library, MS SQL
|
|||
|---|---|---|---|
|
#18+
здравая логикаMasterZivВообще, выполняющийся запрос по хорошему нельзя остановить. Иногда поможет команда kill, но она привилегированная. А в этом есть какая-то здравая логика? Допустим случайно вместо знака больше, поставили знак меньше в предикатах и отправили запрос на выполнение на пару дней или недель. Если я его запускал, то почему мне нужна какая-то привилегия, чтобы мой запрос тут же остановить? Это вопрос не ко мне и не для этого форума. Логика такова, что kill может убить любую сессию, а не только свою. Поэтому это нельзя делать. А чтобы убить только свою одну сессию, приложение может просто закрыть эту сессию, соединение с сервером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 01:19 |
|
||
|
Не работает dbcancel, db-library, MS SQL
|
|||
|---|---|---|---|
|
#18+
автор то про Select, Там дело больше даже не в привилегиях, а в том, что взаимодействие клиента и сервера строго синхронное. Даже kill если вы выполните, то это далеко не всегда сразу остановит выполняющийся запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 01:22 |
|
||
|
Не работает dbcancel, db-library, MS SQL
|
|||
|---|---|---|---|
|
#18+
MasterZivавтор то про Select, Там дело больше даже не в привилегиях, а в том, что взаимодействие клиента и сервера строго синхронное. Даже kill если вы выполните, то это далеко не всегда сразу остановит выполняющийся запрос. А причем тут синхронное взаимодействие? kill-то по любому надо будет вызывать в другой сессии, т.е. асинхронно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 01:57 |
|
||
|
Не работает dbcancel, db-library, MS SQL
|
|||
|---|---|---|---|
|
#18+
в другой сессии, т.е. асинхронноMasterZivавтор то про Select, Там дело больше даже не в привилегиях, а в том, что взаимодействие клиента и сервера строго синхронное. Даже kill если вы выполните, то это далеко не всегда сразу остановит выполняющийся запрос. А причем тут синхронное взаимодействие? kill-то по любому надо будет вызывать в другой сессии, т.е. асинхронно. Так точно, в другой. Я это в общем говорил. О всей проблеме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 11:40 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38218205&tid=2020304]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 299ms |
| total: | 567ms |

| 0 / 0 |
