Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/26: Рейтинг темы: голосов - 26, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 11.10.2007
Сообщений: 103
1

Прерванная процедура

17.04.2008, 16:45. Показов 5268. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Предположим, запущенная из клиента TOAD процедура работает неудовлетворительно медленно и должна быть изменена. Прерываю задачу на клиенте, изменяю процедуру, но она больше не компилируется -
TOAD фактически виснет. Переименовываю процедуру, компилирую, запускаю, но работает ещё медленнее. При особой настойчивости можно получить сообщение насчёт deadlock. При попытке посадить индекс в задействованняю таблицу получаю сообщение, что ресурс занят(процедура предварительно была, естественно, остановлена и с таблицей никто другой не работает). После перестартовки базы все становится, конечно, на свои места, изменённая процедура пашет нормально и под старым именем.
Всё говорит о том, что и после остановки задачи на клиенте она продолжает обрабатываться на сервере. Но не может же быть, чтобы единственным выходом из подобной ситуации была перестартовка базы...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2008, 16:45
Ответы с готовыми решениями:

прерванная транзакция
Начальные условия: В нашей сетке есть файл-сервер с базой mdb и кучка клиентов на C++. ...

Прерванная работа ОС
Компьютер стоял включённым, но с потухшими мониторами. Сел за него и по привычке решил обновить...

GULP BOWER прерванная инсталяция
Здравствуйте. Так случилось, что при установлении GULP пришлось перезагрузить комп. Как начать...

Прерванная операция в Ворд 2003
После переустановки Офис 2003 появился странный дефект: если кликнуть на гиперссылку, то появляется...

4
SINDY
13.05.2008, 15:01 2
Судя по описанию, ты завершаешь работу только клиентской программы. При этом сессия на сервере еще некоторое время 'живет', пока не будет убита специальным серверным процессом. И запущенная процедура продолжает работать, тормозит работу сервера в целом, не позволяет, естественно перекомпилировать себя и блокирует строки в изменяемой таблице. Deadlock'и возникают потому, что ты пытаешься другой процедурой сделать update уже блокированных строк.
Обычно нет необходимости перезапускать сервер - НАДО УБИТЬ СЕССИЮ отключенного клиентского приложения. Сделать это можно из SQL*Plus, но проще из TOADD (Kill/Trace Session). Но только под правами администратора базы.
0 / 0 / 0
Регистрация: 11.10.2007
Сообщений: 103
14.05.2008, 12:01  [ТС] 3
Большое спасибо. А как выглядит синтаксис в SQL PLUS (на случай,если
TOAD под рукой не имеется)?
Я тут думал-думал и предполагаю, что это может быть связано с
ROLLBACKом. То есть процедура прервана и начинает выполняться ROLLBACK
(COMMIT стоял в самом конце). который тоже долго выполняется - потому всё и висит... Или это не то? Я вообще заметил, что если посадить
COMMIT в LOOP - работает быстрее. Хотя это, безусловно, порочная практика...
Ещё раз спасибо за подробное разъяснение - думаю, что необходимость
опробавать твою рекомендацию не заставит себя долго ждать, - учимся на
своих ошибках (;
0
SINDY
18.05.2008, 08:25 4
Когда ты убьешь сессию - тогда ROLLBACK, конечно, будет выполняться.
Как убить сессию из SQL*Plus? Цитирую 'Oracle 7. Руководство администратора':
'...Для идентификации убиваемой сессии укажите ее индексный номер и
ее серийный номер. Чтобы определить индексный номер (SID) и
серийный номер сессии, опросите динамическую таблицу
производительности V$SESSION. Например, следующий запрос
идентифицирует все сессии для пользователя JWARD:

SELECT sid, serial#
FROM v$session
WHERE username ='JWARD'

SID SERIAL#
--------- ---------
7 15

Когда сессия снимается, ресурсы, удерживаемые ею (такие как
блокировки и области памяти), немедленно освобождаются и
становятся доступными другим сессиям.
...
Обзор V$SESSION также показывает состояние (STATUS) текущих
сессий. Строка для снятой сессии удаляется из этого обзора,
когда пользователь получает сообщение ORA-00028.

Следующий пример показывает, как АБД убивает неактивную сессию:

SELECT sid, serial#, status, server
FROM v$session
WHERE username = 'JWARD'

SID SERIAL# STATUS SERVER
---------- ------- -------- ---------
7 15 INACTIVE DEDICATED

ALTER SYSTEM KILL SESSION '7,15'

SELECT sid, serial#, status, server
FROM v$session
WHERE username = 'JWARD'

SID SERIAL# STATUS SERVER
---------- ------- -------- ---------
7 15 KILLED PSEUDO

Если активная сессия не может быть прервана (например, она
выполняет сетевой ввод-вывод или откатывает транзакцию), то
сессия не может быть снята до окончания этой операции. В этом
случае сессия удерживает все свои ресурсы вплоть до снятия.
Кроме того, сессия, выдавшая предложение ALTER SYSTEM для снятия
другой сессии, ожидает снятия сессии до 60 секунд; если
операция, которая не может быть прервана, продолжается дольше
одной минуты, то инициатор предложения ALTER SYSTEM получает
сообщение, указывающее, что сессия была 'помечена' для снятия.
Сессия, помеченная для снятия, выдается в обзоре V$SESSION с
состоянием KILLED и с сервером, отличным от PSEUDO.'
0 / 0 / 0
Регистрация: 11.10.2007
Сообщений: 103
25.05.2008, 13:06  [ТС] 5
Уф-ф... Наконец-то есть время ответить - был в командировках...
Да и отвечать-то, собственно, нечего - остаётся только поблагодарить за исчерпывающую инфу. Из TOAD - уже использовал, хотя проблема
долгого отката остаётся, никуда это не деть. Но, по крайней мере, всё теперь понятно. Без TOAD - тоже понятно, так что тему можно считать закрытой.
Ещё раз большое спасибо и... успехов!
0
25.05.2008, 13:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2008, 13:06
Помогаю со студенческими работами здесь

Прерванная установка Visual Studio 2010
Устанавливала на лаптоп Visual Studio пробная версия, так получилось, что понадобилось прервать...

Процедура ПередЗаписью и Процедура ПередЗаписьюНаСервере
В документе после нажатия на кнопку Провести и закрыть надо запросить информацию у пользователя :...

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

процедура
Помогите пожалуйста создать две таблицы, вторая связана с первой.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru