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

Вниз

Oracle/ Надо прибить сессии, использующие пакет   Найти похожие ветки 

 
AV ©   (2012-05-22 10:10) [0]

Что бы его перекомпилить (внес правку)
Как это сделать?

Только вышибу одного - второй залез..


 
AV ©   (2012-05-22 10:19) [1]

права убить сессиию есть,
но такой скрипт не работает, нет прав, видимо, т.к. не вижу вьюху

select
"ALTER SYSTEM KILL SESSION """|| sid||", "||serial#||""";" ,
s.MODULE, s.OSUSER, t.*
from dba_ddl_locks t ,
v$session s
where name = "PGDEB_API_IN" and t.type="Body"
and s.SID=t.session_id;

можно было бы получить скрипт, всех прибить и моментально запустить перекомпиляцию, пока никто не залез


 
AV ©   (2012-05-22 10:32) [2]

вообще не понимаю..
есть учетка, коннектится "as SYSDBA" и dba_ddl_locks не видит..


 
AV ©   (2012-05-22 11:28) [3]

А, может,  кто подскажет, как пакет совсем "свалить"?
Пусть побудет инвалидным пока, пусть ошибки полезут у юзеров,
главное не дать им юзать его, пока не подсуну поправленный.


 
Inovet ©   (2012-05-22 11:39) [4]

Клиент пусть сам проверяет свою версию и отключается.


 
AV ©   (2012-05-22 11:50) [5]

EXE не мой
не знаю как он там работает.

зы
пакет тоже не мой, не я писал, но пароль владельца знаю
Он из пакета дергает функцию, совсем простою
буквально -- если параметр в (список вариантов), то вернуть ДА --
Наблюдая, понял, что не все варианты в списке перечислены. Вот и хочу дописать
in (...., еще_один_вариант)


 
AV ©   (2012-05-22 12:49) [6]

перекомпилил таки,
но буду признателен, если подскажете как это можно было сделать

а не так как сделал, а именно: открыв справочник должностей юзеров, постоянно прибивал подозрительных и пытался компилить. В очередной раз получилось.


 
Pit   (2012-05-23 20:20) [7]

Бред какой-то... Ты что пытался с пакетом делать то?

Есть такое понятие как исходный код пакета, а есть его откомпиленная версия.

По-умолчанию, после сохранения кода пакета - он помечается неоткомпиленным. Первый же вызов этого пакета приведет к его компиляции (и блокировке всех других до окончания компиляции).

В чём у тебя проблема то была?


 
Petr V. Abramov ©   (2012-05-23 23:01) [8]

а в чем проблема перекомпилить-то???
ну получили бы юзеры existing state of packages has been discarded или как-то так, и вышли бы из программы в ужасе, перезашли бы, и все путем.


 
Pit   (2012-05-23 23:49) [9]

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


 
Pit   (2012-05-23 23:53) [10]

ваще дело обстоит как-то так:

1) для выполнения процедуры ALTER (изменение исходника пакета) требуется эксклюзивная сессия.
При выполнении пакета работает shared-сессия.

Соответственно, если речь про изменение исходников пакета - то при работающих сессиях произойдет блокировка, пока эксклюзивная сессия не захватит "управление", после чего уже все shared-сессии пытающиеся исполнить пакет будут залочены. После сохранения исходников первая же "вошедшая" в пакет сессия приведет к автоматической перекомпиляции, на время компиляции все сессии также будут залочены.


 
Petr V. Abramov ©   (2012-05-24 00:02) [11]


> Pit   (23.05.12 23:53) [10]

ну тут наверное не alter, а сreate or replace, что, правда,  сути не меняет.
повисит-повисит, да скомпилится, а остальные получат
ORA-04068: existing state of packages has been discarded


 
AV ©   (2012-05-24 11:53) [12]

Знаю ,что теоретически,

> после сохранения кода пакета - он помечается неоткомпиленным.
>  Первый же вызов этого пакета приведет к его компиляции

но получалось так:
поправил, нажал компилировать, все повисло


> повисит-повисит, да скомпилится

сколько повисит?
Висело до 20-30 минут. Потом процесс прибивал.


 
Pit   (2012-05-24 17:09) [13]

А это значит транзакция, затронувшая этот пакет продолжалась без комита более твоего времени ))
Не стоит так писать транзакции )


 
Petr V. Abramov ©   (2012-05-24 21:20) [14]


> Pit   (24.05.12 17:09) [13]
>
> А это значит транзакция, затронувшая этот пакет продолжалась
> без комита более твоего времени ))
> Не стоит так писать транзакции )
>

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


AV ©   (24.05.12 11:53) [12]
> сколько повисит?
> Висело до 20-30 минут. Потом процесс прибивал.

выясни, не самое ли очевидное.


 
Кщд   (2012-05-25 08:54) [15]


> Pit   (23.05.12 20:20) [7]
> По-умолчанию, после сохранения кода пакета - он помечается
> неоткомпиленным.


> Есть такое понятие как исходный код пакета, а есть его откомпиленная
> версия.

что такое компиляция - понятно, а что за зверь "сохранение кода пакета"?


> Petr V. Abramov ©   (23.05.12 23:01) [8]
> а в чем проблема перекомпилить-то???

проблема в том, что перекомпиляция модуля(например, пакета) в высоконагруженной среде - это, действительно, задача непростая.

>AV ©   (22.05.12 10:19) [1]
для появления dba_ddl_locks: catblock.sql
НО это неприятный и неэффективный способ по двум причинам:
1. при большой пользовательской активности на каждую убитую таким образом сессию - будет создано несколько новых)
2. это дико, когда пользователь час редактирует большую форму и внезапно получает "your session has been killed". многие при этом пытаются перелогиниться. только затем, чтобы через некоторое время снова попасть под комбайн смерти "alter system kill session" - неприятненько.)

Гарантированный результат достигается:
1. alter user NutsUser account lock;
2. dba_ddl_locks + alter system kill session.
Всё это делается в контексте регламентированного технологического окна.


 
Кщд   (2012-05-25 09:00) [16]


> Pit   (24.05.12 17:09) [13]
> А это значит транзакция, затронувшая этот пакет продолжалась
> без комита более твоего времени ))
> Не стоит так писать транзакции )

какие транзакции?


SQL> create table uuu (id number);

Table created

SQL> create or replace package body ptmp is
 2  
 3    procedure do_smth
 4    is
 5    begin
 6      insert into uuu values(1);
 7    end;
 8  
 9  end ptmp;
10  /

Package body created

SQL> create or replace package ptmp is
 2  
 3    procedure do_smth;
 4  
 5  end ptmp;
 6  /

Package created

SQL> exec ptmp.do_smth;

PL/SQL procedure successfully completed

SQL> alter package ptmp compile;

Package altered


 
AV ©   (2012-05-25 09:48) [17]


> Кщд

Спасибо.
особенно про catblock.sql


> Гарантированный результат достигается:
> 1. alter user NutsUser account lock;

прибить сессию - еще куда ни шло. Но запретить вообще все -
действительно
> Всё это делается в контексте регламентированного технологического
> окна.


 
Кщд   (2012-05-25 09:54) [18]

>AV ©   (25.05.12 09:48) [17]

> прибить сессию - еще куда ни шло. Но запретить вообще все
> -
> действительно

ещё раз: при большой активности пользователей на продуктиве иначе - никак


 
AV ©   (2012-05-25 10:46) [19]

Кщд, (не знаю как Вас по батюшке :),)
а может Вы подскажете осуществима ли такая идея:

1. Считываем всех, у кого есть грант на пакет, запоминаем
2. Отнимаем его у всех. Никого не надо выгонять совсем, просто никто больше не может пакетом воспользоваться.
3. Делаем что надо
4. Восстанавливаем гранты из запомненного.


 
AV ©   (2012-05-25 10:51) [20]

т.е. там же есть таблички sys где гранты прописаны,
считывая их, генерируем два запроса-строки. на выдачу прав и на отбор
запускаем на отбор
работаем
запускаем на выдачу


 
Pit   (2012-05-25 11:09) [21]


> что такое компиляция - понятно, а что за зверь "сохранение
> кода пакета"?

ну выполнение операции alt / create or replace - которое изменяет код пакета.


 
Кщд   (2012-05-25 11:21) [22]

>AV ©   (25.05.12 10:46) [19]
cчитаю, плохая идея с grant: в случае исключительной ситуации, некоторые пользователи останутся без grant

+ ко всему, придется раскручивать всё дерево зависимости этого пакета и делать revoke для всех зависящих от данного пакетов.

чем не устраивает вариант с account lock + kill session?


 
Кщд   (2012-05-25 11:23) [23]

>Pit   (25.05.12 11:09) [21]
>ну выполнение операции alt / create or replace - которое изменяет код пакета.
это перекомпиляция


 
AV ©   (2012-05-25 13:03) [24]


> чем не устраивает вариант с account lock + kill session?

да не, все нормально, так и сделаю в след. раз. Это же не долго.

а так.. ну.. тем что юзер может пока другим чем-то заняться, например.
ну там.. другое окно открыть, и набивать пока другие документы


 
Кщд   (2012-05-25 13:25) [25]

>AV ©   (25.05.12 13:03) [24]
>ну там.. другое окно открыть, и набивать пока другие документы
если в редактирование другого док-та вовлечена сущность, зависящая от перекомпилируемого пакета, то получите ровно ту же проблему, что в первом сообщении темы)


 
Pit   (2012-05-25 16:38) [26]


> это перекомпиляция

какая нафиг компиляция. Ты сам вверху писал о комманде типа:

alter package ptmp compile; - что же она тогда делает?

Создание / изменение ИСХОДНОГО кода пакета / процедуры / функции не приводит по-умолчанию к компиляции. Скомпилированное тело помечается как INVALID до первого вхождения, когда оно компилируется.

Можно откомпилить вручную.


 
Кщд   (2012-05-25 17:09) [27]

>Pit   (25.05.12 16:38) [26]

> Создание / изменение ИСХОДНОГО кода пакета / процедуры /
> функции не приводит по-умолчанию к компиляции. Скомпилированное
> тело помечается как INVALID до первого вхождения, когда
> оно компилируется.

это, простите, феерический бред
покажите лог из sqlplus созданного без ошибок компиляции пакета, у которого статус после компиляции "INVALID"

PS то, о чем говорите Вы, касается состояния зависимых от компилируемого объектов


 
Pit   (2012-05-25 18:28) [28]

да очень просто.

- Создайте пакет с помощью create or replace. Скомпильте его или используйте хотя бы один раз
- далее измените код пакета с помощью create or replace. Вот и всё.

Во втором случае АВТОМАТИЧЕСКОЙ компиляции не будет. Исходный код пакета будет ОТЛИЧАТЬСЯ от скомпилированной версии, которая будет помечена ошибочной (ну или там требующей перекомпила, смотря как интерпретировать).

Впрочем, вы утверждаете, что понятия компиляции вообще не существует. Уже отсюда у нас с вами разные дороги. Видимо, разный оракл используем, нет смысла спорить.

Впрочем, в моем мире оракла про компиляцию все же сказано. И создание кода пакета вовсе не означает его компиляцию, во что вы не верите.
Скомпилить пакет можно или вручную:

alter package ptmp compile;

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


 
Влад   (2012-05-25 19:51) [29]


> Pit   (25.05.12 18:28) [28]


> или просто дождаться, что кто-то заюзает этот пакет и он
> будет скомпилирован автоматически тогда.

ну, допустим, дождался. Это я же и есть. Поправил и нажал compile.

И? почему висело?


 
Кщд   (2012-05-25 20:21) [30]

>Pit   (25.05.12 18:28) [28]
хватит бредить
код из sqlplus



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

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

Наверх





Память: 0.53 MB
Время: 0.076 c
15-1334349002
Юрий
2012-04-14 00:30
2013.03.22
С днем рождения ! 14 апреля 2012 суббота


15-1340130061
Дмитрий С
2012-06-19 22:21
2013.03.22
Посоветуйте удобную TODO програмку.


9-1193310589
fars
2007-10-25 15:09
2013.03.22
Программирование логических игр


2-1342447542
Sergio_Leone
2012-07-16 18:05
2013.03.22
Как определить запуск 3D приложения?


8-1226478640
kalexi
2008-11-12 11:30
2013.03.22
Изменить размер изображения на низком уровне и без сглаживания





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский