Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не работает dbcancel, db-library, MS SQL / 13 сообщений из 13, страница 1 из 1
09.04.2013, 09:35
    #38218205
artii
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает dbcancel, db-library, MS SQL
Всем привет

Почему-то не отменяется select к БД (MS SQL) при работе через db Library

1) Заворачиваю Select к БД через dbcmd(dbproc, "Select...")
2) Запускаю выполнение запроса ret_code=dbsqlexec(dbproc);

Запрос работает в БД, строки по нему не едут dbsqlexec управление не возвращает

3) В другом потоке вызываю dbcancel(dbproc), функция возвращает успех

Select продолжает готовить выборку строк

Подскажите, что я делаю не так???
...
Рейтинг: 0 / 0
09.04.2013, 18:19
    #38219321
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает dbcancel, db-library, MS SQL
все так, только отмена это не мгновенная операция. После db_cancel() сервер начинает останавливать работающий запрос, потом очищает уже подготовленный кусок результата, потом чистит свои внутренние буфера, потом сообщает клиенту. Потом интерфейсный драйвер на стороне клиента начинает очищать свои приемные буфера. И только потом dbsqlexec() вернется с ошибкой отмены.
Соответственно, чем более тяжелый запрос был запущен изначально, тем дольше будет работать операция отмены.
...
Рейтинг: 0 / 0
09.04.2013, 18:56
    #38219368
artii
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает dbcancel, db-library, MS SQL
Подозрительно долго не возвращается управление.
К примеру в OleDB запрос прерывается сразу же после выполнения ICommand::Cancel у команды.
...
Рейтинг: 0 / 0
09.04.2013, 19:25
    #38219396
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает dbcancel, db-library, MS SQL
artiiВсем привет

Почему-то не отменяется select к БД (MS SQL) при работе через db Library

1) Заворачиваю Select к БД через dbcmd(dbproc, "Select...")
2) Запускаю выполнение запроса ret_code=dbsqlexec(dbproc);

Запрос работает в БД, строки по нему не едут dbsqlexec управление не возвращает

3) В другом потоке вызываю dbcancel(dbproc), функция возвращает успех

Select продолжает готовить выборку строк

Подскажите, что я делаю не так???

dbcancel() и подобные функции никогда не будут так работать (т.е. асинхронно).

Он сработает, когда клиентское приложение получит управление для получения первой порции данных, вот тогда ты сможешь не выбирая остальные данные вызвать эту функцию для отмены выборки остальных строк и наборов.

Вообще, выполняющийся запрос по хорошему нельзя остановить. Иногда поможет команда kill, но она привилегированная.
...
Рейтинг: 0 / 0
09.04.2013, 19:59
    #38219422
Не работает dbcancel, db-library, MS SQL
MasterZivВообще, выполняющийся запрос по хорошему нельзя остановить. Иногда поможет команда kill, но она привилегированная.
А в этом есть какая-то здравая логика?
Допустим случайно вместо знака больше, поставили знак меньше в предикатах и отправили запрос на выполнение на пару дней или недель. Если я его запускал, то почему мне нужна какая-то привилегия, чтобы мой запрос тут же остановить?
...
Рейтинг: 0 / 0
09.04.2013, 20:22
    #38219447
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает dbcancel, db-library, MS SQL
здравая логикаЕсли я его запускал, то почему мне нужна какая-то привилегия, чтобы мой запрос тут же остановить?Привилегии не требуются - нужны ресурсы.
...
Рейтинг: 0 / 0
09.04.2013, 20:26
    #38219449
Не работает dbcancel, db-library, MS SQL
Basil A. Sidorovздравая логикаЕсли я его запускал, то почему мне нужна какая-то привилегия, чтобы мой запрос тут же остановить?Привилегии не требуются - нужны ресурсы.
Какие ресурсы и их нужно больше чем для выполнения 2х дневного запроса?
...
Рейтинг: 0 / 0
09.04.2013, 21:03
    #38219482
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает dbcancel, db-library, MS SQL
Какие ресурсыКакие ресурсы и их нужно больше чем для выполнения 2х дневного запроса?Простейший случай - модифицирующий запрос:
Код: sql
1.
update таблица(поле) set поле = значение

забыли where и пошли модифицировать большую таблицу.
Если запрос отменяется, то целостность требует сделать (неявный) rollback - чем больше модифицировали, тем дольше откатывать.
Если просто "тяжёлый" select, то будут проблемы при конкурентном доступе - изолированность потребует создания версий или генерации журналов отката.
...
Рейтинг: 0 / 0
09.04.2013, 21:30
    #38219510
Не работает dbcancel, db-library, MS SQL
Basil A. SidorovКакие ресурсыКакие ресурсы и их нужно больше чем для выполнения 2х дневного запроса?Простейший случай - модифицирующий запрос:
Код: sql
1.
update таблица(поле) set поле = значение

забыли where и пошли модифицировать большую таблицу.
Если запрос отменяется, то целостность требует сделать (неявный) rollback - чем больше модифицировали, тем дольше откатывать.
Если просто "тяжёлый" select, то будут проблемы при конкурентном доступе - изолированность потребует создания версий или генерации журналов отката.
Это вы правильно заметили про DML. Что данные из андо будут обратно откатываться в базу данных.
Но автор то про Select:
artiiВсем привет

Почему-то не отменяется select к БД (MS SQL) при работе через db Library

1) Заворачиваю Select к БД через dbcmd(dbproc, "Select...")
...
Рейтинг: 0 / 0
10.04.2013, 01:19
    #38219621
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает dbcancel, db-library, MS SQL
здравая логикаMasterZivВообще, выполняющийся запрос по хорошему нельзя остановить. Иногда поможет команда kill, но она привилегированная.
А в этом есть какая-то здравая логика?
Допустим случайно вместо знака больше, поставили знак меньше в предикатах и отправили запрос на выполнение на пару дней или недель. Если я его запускал, то почему мне нужна какая-то привилегия, чтобы мой запрос тут же остановить?

Это вопрос не ко мне и не для этого форума.
Логика такова, что kill может убить любую сессию, а не только свою. Поэтому это нельзя делать.
А чтобы убить только свою одну сессию, приложение может просто закрыть эту сессию, соединение с сервером.
...
Рейтинг: 0 / 0
10.04.2013, 01:22
    #38219623
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает dbcancel, db-library, MS SQL
автор то про Select,

Там дело больше даже не в привилегиях, а в том, что взаимодействие клиента и сервера строго синхронное.
Даже kill если вы выполните, то это далеко не всегда сразу остановит выполняющийся запрос.
...
Рейтинг: 0 / 0
10.04.2013, 01:57
    #38219634
Не работает dbcancel, db-library, MS SQL
MasterZivавтор то про Select,

Там дело больше даже не в привилегиях, а в том, что взаимодействие клиента и сервера строго синхронное.
Даже kill если вы выполните, то это далеко не всегда сразу остановит выполняющийся запрос.
А причем тут синхронное взаимодействие? kill-то по любому надо будет вызывать в другой сессии, т.е. асинхронно.
...
Рейтинг: 0 / 0
10.04.2013, 11:40
    #38220007
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает dbcancel, db-library, MS SQL
в другой сессии, т.е. асинхронноMasterZivавтор то про Select,

Там дело больше даже не в привилегиях, а в том, что взаимодействие клиента и сервера строго синхронное.
Даже kill если вы выполните, то это далеко не всегда сразу остановит выполняющийся запрос.
А причем тут синхронное взаимодействие? kill-то по любому надо будет вызывать в другой сессии, т.е. асинхронно.

Так точно, в другой. Я это в общем говорил. О всей проблеме.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не работает dbcancel, db-library, MS SQL / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]