Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Вниз

Прервать выполнение запроса   Найти похожие ветки 

 
MakNik   (2004-07-21 09:53) [0]

Есть некий запрос, который выполняется достаточно долго (порядка 10 мин.)... Подскажите, плз., как после команды ADOQuery.Active:=true; ...  дать возможность пользователю корректно отказаться от завершения выполнения запроса?


 
Johnmen ©   (2004-07-21 09:54) [1]

Прервать выполняющийся запрос внешним воздействием не удастся...


 
Ega23 ©   (2004-07-21 09:57) [2]

Enterprise Manager -> Management -> Current activity -> Process Info -> Найти свой процесс и убить его.

Только это не корректное завершение, это не штатная ситуация.


 
MakNik   (2004-07-21 10:30) [3]


> Ega23 ©

... а как это сделать из приложения?


 
Ega23 ©   (2004-07-21 10:37) [4]

... а как это сделать из приложения?

Повторяю: Это НЕШТАТНАЯ ситуация, пользователь не должен такие вещи делать.


 
Fiend ©   (2004-07-21 10:51) [5]

он конечно не должен, но принципиально можно.
Для этого нужно использовать TADOCommand. Запрос ессесно выполнять через него. А у этого класса в свою очередь есть метод Cancel который и позволит остановить выполнение запроса. При этом надо не забыть поставить в свойствах ADOCommand асинхронное выполнение запроса.


 
Ega23 ©   (2004-07-21 11:04) [6]

Fiend ©   (21.07.04 10:51) [5]

Убивается ли при этом выполнение запроса непосредственно на сервере?


 
Fiend ©   (2004-07-21 11:15) [7]

То Ega23 ©   (21.07.04 11:04) [6]
а как же иначе?
канечна убивается


 
Johnmen ©   (2004-07-21 11:16) [8]

>Fiend ©   (21.07.04 11:15) [7]
>канечна убивается

Можно ткнуть в источник ?


 
Ega23 ©   (2004-07-21 11:17) [9]

Надо будет попробовать поэксперементировать...


 
Ega23 ©   (2004-07-21 11:21) [10]

вот пример:

if exists (select * from sysobjects where id = object_id(N"[S_MyProc]") and OBJECTPROPERTY(id, N"IsProcedure") = 1)
drop procedure [S_MyProc]
GO
CREATE PROCEDURE S_MyProc
As

While 0=0
begin
Select into #xxx * from Table1
Drop tble #xxx
end

GO

И на клиенте, соответственно:
Exec S_MyProc.

Убьётся ли такой запрос?


 
bushmen ©   (2004-07-21 11:25) [11]

> А у этого класса в свою очередь есть метод Cancel который и
> позволит остановить выполнение запроса.

Интересно, а как ты собираешься вызывать этот метод во время выполнения процедуры?


 
Анонимщик ©   (2004-07-21 11:55) [12]

Не знаю как в MSSQL, в Interbase есть такая же проблема. Решается, например, убиванием транзакции. На сервере запрос выполнение не прекратит. Можно попытаться использовать генератор, а в запросе - проверку генератора на какое-то значение. Если нужно снять запрос, значение генератора меняешь, и из запроса вываливаешься по невыполнению условия. Минус - генераторов на всех не напасешься. А вообще-то такие запросы очень часто (не буду утверждать, что всегда) долго выполняются из-за неправильного составления, ну, забыл связать таблицы, вот и результат - простое умножение таблиц.
Можешь привести текст запроса?


 
Fiend ©   (2004-07-21 13:15) [13]

То bushmen ©   (21.07.04 11:25) [11]
цитирую себя же:

> При этом надо не забыть поставить в свойствах ADOCommand
> асинхронное выполнение запроса.

Johnmen ©   (21.07.04 11:16) [8]
было установлено опытным путём.
метод описан с хелпе на АДОКомманд


 
Fiend ©   (2004-07-21 13:19) [14]

То Ega23 ©   (21.07.04 11:21) [10]
Если сам сервер в состоянии его прервать, то и тебе это удастся


 
Johnmen ©   (2004-07-21 13:30) [15]

>Fiend ©   (21.07.04 13:15) [13]

Т.е. ты уверен, что именно сервер бросил выполнять запрос ?

>Fiend ©   (21.07.04 13:19) [14]
>Если сам сервер в состоянии его прервать,

Вот в этом и сомнения.


 
Fiend ©   (2004-07-21 14:43) [16]

То Johnmen ©   (21.07.04 13:30) [15]
ну конечно, уверен. Я смотрел в current activity.
Подобные вещи я еще сквозь БДЕ проджелывал, но там технология немного сложнее :)

Архитектура ЬС СКЛ сервера изначально была таковой, еще когда МС его совместно с Сибэйзом разрабатывал. И Сибэйз тоже унаследовал это полезное временами свойство.

А вот в документации на ИБ написано, что фундамент они заложили для остановки запросов, но не реализовали. Могу строки из мануала в ПДФ найти, если интересно.


 
Johnmen ©   (2004-07-21 14:54) [17]

>Fiend ©   (21.07.04 14:43) [16]
>ну конечно, уверен. Я смотрел в current activity.

Благодарю.

Что значит "смотрел в current activity" и что там видно ?


 
Fiend ©   (2004-07-21 15:04) [18]

Там показывает активность сервера по коннектам.
Запускаем запрос и смортим, оно пишет мол выполняю то-то и текст запроса показывает. Прерываем - показывает на моём коннекте, мол сплю, жду запросов.

ты же ведь Enterprise manager видел?


 
Johnmen ©   (2004-07-21 15:10) [19]

Понятно. Еще раз спасибо.

>ты же ведь Enterprise manager видел?

:) Дык...
Только тек.активности не видел. Не туда смотрел ?


 
Fiend ©   (2004-07-21 15:15) [20]

наверна, там путь к нему такой
Сервер->Management->Current Activity-> а дальше либо процессы посмотреть, либо блокировки по объектам либо по процессам.


> >ты же ведь Enterprise manager видел?
>
> :) Дык...

извини что усомнился :)


 
Johnmen ©   (2004-07-21 15:21) [21]

Я кажись понял. Ты смотришь на сервере активность ? А мне сервер не доступен. Я только клиент. И видимо мне не дозволено смотреть...
:)


 
Fiend ©   (2004-07-21 15:24) [22]

Та неееее, с клиента тоже можно. Главное ЕМ иметь под рукой.
На счёт прав конечно не помню, ибо я то хожу всегда под админом.


 
Ega23 ©   (2004-07-21 15:38) [23]

Главное ЕМ иметь под рукой.

Гы, вот мы и вернулись к [2].


 
Fiend ©   (2004-07-21 15:42) [24]

то Ega23 ©   (21.07.04 15:38) [23]
ты вериятно не почитал ветку. Это мы уже говорим о том чтобы удостовериться в остановке выполнения


 
Ega23 ©   (2004-07-21 15:50) [25]

Так я и без твоего ADOCommand.Cancel могу это сделать. Всё скриптом обычным делается.


 
Fiend ©   (2004-07-21 15:51) [26]

ну для этого надо с админскими правами работать


 
Ega23 ©   (2004-07-21 15:54) [27]

ну для этого надо с админскими правами работать

Не уверен.
Вечером поиграюсь с этими делами, завтра постараюсь некий "отчёт" состряпать.


 
Fiend ©   (2004-07-21 16:03) [28]

А я вот 100% уверен.
из скрипта можно воспользоваться только KILL
но на него соответствующие права

KILL permissions default to the members of the sysadmin and processadmin fixed database roles, and are not transferable.

из чего следует что права нельзя даже передать не админу. Посему, даже не играйся. :)


 
Ega23 ©   (2004-07-21 16:16) [29]

А у меня основной коннект с базой всегда по админовской роли идёт.


 
Fiend ©   (2004-07-21 16:20) [30]

То Ega23 ©   (21.07.04 16:16) [29]
Из клиентской программы? которая фиг знает где? Админский коннект? Ну ты даёшь!!!
Просто "мастер безопасности"!!! :)


 
Ega23 ©   (2004-07-21 16:30) [31]

Fiend ©   (21.07.04 16:20) [30]

А что смешного?
Первоначальный запрос к базе - юзер имеет права только на чтение одной таблицы, в которой лежат админовский логин и пароль (зашифрованные, естественно). Клиент их получает, декодирует и делает реконнект, но уже как админ.
Но: интерфейсно ты никаких различий не увидишь.


 
Fiend ©   (2004-07-21 16:58) [32]

То Ega23 ©   (21.07.04 16:30) [31]
А прикинь, я поломаю механизм "дешифрования"


 
Ega23 ©   (2004-07-21 17:06) [33]

А прикинь, я поломаю механизм "дешифрования"

С таким же успехои ты сам сервер поломать можешь.


 
Fiend ©   (2004-07-21 17:54) [34]

Не, ну ты не сравнивай сервер со своим ПО. Или в майкрософт работаешь?


 
Ega23 ©   (2004-07-21 18:11) [35]

Не, ну ты не сравнивай сервер со своим ПО. Или в майкрософт работаешь?

1. Сломать можно свё, вопрос времени.
2. Если человек умеет "ломать" ПО в поисках админовкого доступа к базе, то по специфике работы такие люди на объектах сами админами становятся. :о)


 
Соловьев ©   (2004-07-21 18:14) [36]


> Первоначальный запрос к базе - юзер имеет права только на
> чтение одной таблицы, в которой лежат админовский логин
> и пароль

а не изобретаешь ли ты велосипед? неужели MS SQL так слаб? Все хаят IB ,так там роли хоть есть.


 
Ega23 ©   (2004-07-21 18:30) [37]

а не изобретаешь ли ты велосипед? неужели MS SQL так слаб? Все хаят IB ,так там роли хоть есть.

Роли и в MS SQL есть.

Дело в том, что очень часто клиенту приходится выполнять различные вещи (типа backup/restore, или запуск xp_...), которые требуют роли админа. При этом давать напрямую роль админа юзеру - нехорошо. Вот и приходится так изгаляться.

Я уже как-то раз расписывал логику работы моего клиента, обсуждение было очень бурным. В двух словах: есть таблица, так сказать, операций, которые можно проводить с клиента. Это промотр/модификация справочных таблиц, получение различных отчётов и т.п. Также есть таблица юзеров, где каждому юзеру прописаны права на работу с клиентской программой. С одной стороны всё это можно расписать путём введения различных ролей и раздачи этим ролям прав на работу с конечными таблицами. Но: уровень подготовки "администраторов" на объектах весьма слаб. Поэтому мы постарались максимально ограничить работу администратора с "родными" средствами MS SQL (Enterprise Manager в чатности).
Вот отсюда и родилась такая "дикая" логика раздачи прав.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.028 c
1-1091337420
Navi
2004-08-01 09:17
2004.08.15
Code Explorer


9-1083140607
Tsaiper
2004-04-28 12:23
2004.08.15
нужен DDUTIL.PAS


14-1091281401
VID
2004-07-31 17:43
2004.08.15
Где скачать красивый трёхмерный бильярд ?


14-1091081332
Труп Васи Доброго
2004-07-29 10:08
2004.08.15
TTreeView??????


8-1086000556
Dr.Alex
2004-05-31 14:49
2004.08.15
12 - кадр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский