powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ждать без sleep
83 сообщений из 83, показаны все 4 страниц
ждать без sleep
    #34591773
Muxx1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как можно ждать в функции без использования системных ресурсов, не используя функцию процедуры dbms_lock.sleep.То есть есть ли какой-то аналог этой процедуры?
Просто подключение пакета сопряжено с некоторыми трудностями.
...
Рейтинг: 0 / 0
ждать без sleep
    #34591781
db-man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
l_start := sysdate;
while sysdate - l_start <  10  /  24 / 3600  loop
  null; -- или любая операция занимающая время
end loop;
...
Рейтинг: 0 / 0
ждать без sleep
    #34591787
Muxx1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ресурсы эта штука не жрет. Это же сколько сравнений надо сделать, чтоб одну секунду прождать?
...
Рейтинг: 0 / 0
ждать без sleep
    #34591810
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986А ресурсы эта штука не жрет. Это же сколько сравнений надо сделать, чтоб одну секунду прождать?

Ещё как жрёт!

PS. На дурацкие вопросы, можно получить только дурацкие ответы.
...
Рейтинг: 0 / 0
ждать без sleep
    #34591820
a398
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Muxx1986Просто подключение пакета сопряжено с некоторыми трудностями.
Решать их.
...
Рейтинг: 0 / 0
ждать без sleep
    #34591827
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986не используя dbms_lock.sleep. Просто подключение пакета сопряжено с некоторыми трудностями.Лучше их преодолеть. Например, DBA может обврапить этот вызов отдельной процедурой и выдать права только на неё.
Хотя после прогона парочки прогонов токих вечных циклов он сам прибежит искать консенсус :)

Ещё под выдерживание таймаута можно приспособить dbms_pipe, utl_tcp, utl_http, ... :)
...
Рейтинг: 0 / 0
ждать без sleep
    #34591828
db-man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Muxx1986А ресурсы эта штука не жрет. Это же сколько сравнений надо сделать, чтоб одну секунду прождать?
Жрёт :)

А итераций не очень много:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
declare
  l_start date;
  cntr number;
  dummy number;
begin
  l_start := sysdate;
  cntr :=  0 ;
  while sysdate - l_start <  10  /  24 / 3600  loop
    cntr := cntr +  1 ;
  end loop;
  dbms_output.put_line('Iterations with NULL: ' || cntr);
  l_start := sysdate;
  cntr :=  0 ;
  while sysdate - l_start <  10  /  24 / 3600  loop
    dummy := sin(cos(tan(cntr)));
    cntr := cntr +  1 ;
  end loop;
  dbms_output.put_line('Iterations with OPs: ' || cntr);
end;

Iterations with NULL:  135315 
Iterations with OPs:  8023 
Для точности лучше не sysdate использовать, а dbms_utility.get_time
Еще наверняка можно на Java написать. Может кто умеет?
...
Рейтинг: 0 / 0
ждать без sleep
    #34591830
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986Просто подключение пакета сопряжено с некоторыми трудностями.
Полагаю, Вам лучше эти трудности преодолеть.
Sleep, конечно, сделать можно - например, повиснуть на блокировке, которая освободится через заданное время параллельным процессом (на вскидку - можно соорудить из двух job и dbms_pipe), то это сильно напоминает удаление гланд через задний проход.
...
Рейтинг: 0 / 0
ждать без sleep
    #34591834
Muxx1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие остроумные ответы. Можно было бы просто написать "Не знаю".
Возможности обойтись без dbms_lock.sleep нету?
...
Рейтинг: 0 / 0
ждать без sleep
    #34591861
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986Какие остроумные ответы. Можно было бы просто написать "Не знаю".
Возможности обойтись без dbms_lock.sleep нету?
Вы читать не умеете? Вам предложили несколько вариантов на выбор, но все сходятся в том, что лучшим решением будет все-таки использование dbms_lock.sleep.
...
Рейтинг: 0 / 0
ждать без sleep
    #34591865
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986Какие остроумные ответы. Что ж. Тогда создавай себе и решай свои проблемы сам.
...
Рейтинг: 0 / 0
ждать без sleep
    #34591867
slepslap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Muxx1986Какие остроумные ответы. Можно было бы просто написать "Не знаю".
Возможности обойтись без dbms_lock.sleep нету?

Блокировки допустимы?
...
Рейтинг: 0 / 0
ждать без sleep
    #34591925
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
db-man
Код: plaintext
1.
2.
3.
l_start := sysdate;
while sysdate - l_start <  10  /  24 / 3600  loop
  null; -- или любая операция занимающая время
end loop;


убивать на месте
...
Рейтинг: 0 / 0
ждать без sleep
    #34591932
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slepslap Muxx1986Какие остроумные ответы. Можно было бы просто написать "Не знаю".
Возможности обойтись без dbms_lock.sleep нету?

Блокировки допустимы?

зачем решать через жопу то что всегда можно решить прямо ?
...
Рейтинг: 0 / 0
ждать без sleep
    #34591942
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slepslap Muxx1986Какие остроумные ответы. Можно было бы просто написать "Не знаю".
Возможности обойтись без dbms_lock.sleep нету?

Блокировки допустимы?

авторподключение пакета (dbms_lock) сопряжено с некоторыми трудностями


PS. Воистину, на одну здравую мысль есть бесконечное множество дурацких.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592044
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab slepslapБлокировки допустимы?Твоя мысль неочевидна. Но если ты на вопрос отвечаешь словами автора, то сам же попадпешь в то самое множество
...
Рейтинг: 0 / 0
ждать без sleep
    #34592074
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а этот sleep - он точно нужен? Может, без него можно обойтись? Чего вы ждёте-то на сервере/от сервера?
...
Рейтинг: 0 / 0
ждать без sleep
    #34592092
db-man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
убивать на месте
Угу. Но это они сами виноваты - привилегию не хотят давать :)

Еще вот что есть: SYS.DBMS_BACKUP_RESTORE.SLEEP(10);
Но на этот пакет у вас 100% нет прав.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592098
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
db-man убивать на месте
Угу. Но это они сами виноваты - привилегию не хотят давать :)
Справедливости ради следует отметить, что не всегда возможно дать привилегии без остановки эксплуатируемой прикладной системы.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592124
evgenyg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вызов :dbms_lock.sleep == semtimedop (SunOS star 5.10)
Таким образом напишите программку на C которая получит номер светофора используемый ораклом вызовите ее из оракла и будет вам счастье
...
Рейтинг: 0 / 0
ждать без sleep
    #34592151
Сына
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgenygВызов :dbms_lock.sleep == semtimedop (SunOS star 5.10)
Таким образом напишите программку на C которая получит номер светофора используемый ораклом вызовите ее из оракла и будет вам счастье
Гыг )))
...
Рейтинг: 0 / 0
ждать без sleep
    #34592172
db-man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or replace
procedure my_sleep( p_sleep in number )
as language java
name 'java.lang.Thread.sleep( long )';
/

SQL> begin
   2     my_sleep( 5000 );
   3   end;
   4   /

PL/SQL procedure successfully completed.

Elapsed:  00 : 00 : 05 . 00 
...
Рейтинг: 0 / 0
ждать без sleep
    #34592178
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
db-manas language java
А теперь вернемся к вопросу о ресурсах... Во что, говорите, обходится запуск такой функции?
...
Рейтинг: 0 / 0
ждать без sleep
    #34592211
Фотография Fucker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)зачем решать через жопу то что всегда можно решить прямо ?Как один из вариантов объяснения причин: http://www.neuro.net.ru/bibliot/b003/sx04060.html

А может мы просто отстали от жизни и это мода нынче такая: http://voffka.com/archives/2007/06/13/036254.html

Fucker
...
Рейтинг: 0 / 0
ждать без sleep
    #34592214
evgenyg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сына evgenygВызов :dbms_lock.sleep == semtimedop (SunOS star 5.10)
Таким образом напишите программку на C которая получит номер светофора используемый ораклом вызовите ее из оракла и будет вам счастье
Гыг )))
semop, semtimedop - semaphore operations , а как я это назвал без разницы :).
...
Рейтинг: 0 / 0
ждать без sleep
    #34592237
Сына
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgenygа как я это назвал без разницы :).
Да я подоброму :)
...
Рейтинг: 0 / 0
ждать без sleep
    #34592261
Muxx1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quot andreymx]а этот sleep - он точно нужен? Может, без него можно обойтись? Чего вы ждёте-то на сервере/от сервера?[[/quot]

В функции запускается job. И нужно подождать его завершения для продолжения работы функции.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592275
slepslap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
slepslap Muxx1986Какие остроумные ответы. Можно было бы просто написать "Не знаю".
Возможности обойтись без dbms_lock.sleep нету?

Блокировки допустимы?

Если блокировки допустимы, то можно реализовать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
-- Запускается некая служебная сессия, которая блокирует специально созданную таблицу
drop table sleep_table;
create table sleep_table
(
  id varchar2( 10 )
);
insert into sleep_table values('1');
commit;
select * from sleep_table for update;

-- в рабочих сессиях запускается оператор select for update с указанием времени ожидания wait n
select * from sleep_table for update wait  10 ;

select * from sleep_table for update wait  4 ;


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SQL> set timing on
SQL> select * from sleep_table for update wait  10 ;
select * from sleep_table for update wait  10 
              *
ERROR at line  1 :
ORA- 30006 : resource busy; acquire with WAIT timeout expired


Elapsed:  00 : 00 : 10 . 02 
SQL> select * from sleep_table for update wait  4 ;
select * from sleep_table for update wait  4 
              *
ERROR at line  1 :
ORA- 30006 : resource busy; acquire with WAIT timeout expired


Elapsed:  00 : 00 : 04 . 01 

Необходимо только оформить это все красиво в PL/SQL с обработкой исключения и вызова в виде отдельной процедуры.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592284
Jannny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986 andreymxа этот sleep - он точно нужен? Может, без него можно обойтись? Чего вы ждёте-то на сервере/от сервера?[В функции запускается job. И нужно подождать его завершения для продолжения работы функции.А запускать надо именно job-ом? Есть показания?
...
Рейтинг: 0 / 0
ждать без sleep
    #34592294
Muxx1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть список функций в формате CHAR. Они содержат DML и COMMIT. Их нельзя менять.
Надо их выполнить. Я для этого использую job. Можно ли иначе?
...
Рейтинг: 0 / 0
ждать без sleep
    #34592302
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986 andreymxа этот sleep - он точно нужен? Может, без него можно обойтись? Чего вы ждёте-то на сервере/от сервера?[В функции запускается job. И нужно подождать его завершения для продолжения работы функции.почему-то так и подумал... Но вопрос Jannny я бы тоже задал.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592307
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986quot andreymx]а этот sleep - он точно нужен? Может, без него можно обойтись? Чего вы ждёте-то на сервере/от сервера?[

В функции запускается job. И нужно подождать его завершения для продолжения работы функции.[/quot]

В этом случае sleep - решает второстепенную задачу. Как бы надо прочуствовать разницу между sleep (сон) и wait (ожидание). Можно спать когда кого то ждёшь, но сон не означает ожидание кого либо.

А почему job нельзя запустить синхронно в текущей сессии?
...
Рейтинг: 0 / 0
ждать без sleep
    #34592310
ГостЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Muxx1986Есть список функций в формате CHAR. Они содержат DML и COMMIT. Их нельзя менять.
Надо их выполнить. Я для этого использую job. Можно ли иначе?
1) Не использовать ddl
2) автономка
Код: plaintext
PRAGMA AUTONOMOUS_TRANSACTION;
3) хз
...
Рейтинг: 0 / 0
ждать без sleep
    #34592311
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986В функции запускается job. И нужно подождать его завершения для продолжения работы функции.
Сеемееееен Семеныч!
Ну так бы и говорили - надо дождаться завершения работы job...
Все просто - в job развешиваете пользовательскую блокировку (dbms_lock), процесс пытается ее захватить в несовместимой mode.
Все.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592314
Jannny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986Есть список функций в формате CHAR. Они содержат DML и COMMIT. Их нельзя менять.
Надо их выполнить. Я для этого использую job. Можно ли иначе?Имеется ввиду, что они не должны закоммитить данные текущей транзакции или что?
...
Рейтинг: 0 / 0
ждать без sleep
    #34592331
Muxx1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey anonimousСеемееееен Семеныч!
Ну так бы и говорили - надо дождаться завершения работы job...
Все просто - в job развешиваете пользовательскую блокировку (dbms_lock), процесс пытается ее захватить в несовместимой mode.
Все.

Можно поподробней? Права на dbms_lock есть только через роль.Так сработает?
...
Рейтинг: 0 / 0
ждать без sleep
    #34592337
Muxx1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JannyИмеется ввиду, что они не должны закоммитить данные текущей транзакции или что?

Функции работают с одной таблицей. И необходимо добиться их последовательного выполнения.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592340
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous db-man убивать на месте
Угу. Но это они сами виноваты - привилегию не хотят давать :)
Справедливости ради следует отметить, что не всегда возможно дать привилегии без остановки эксплуатируемой прикладной системы.

убивать всех.
лень админа не повод ставить на колени сервер
...
Рейтинг: 0 / 0
ждать без sleep
    #34592365
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986Можно поподробней? Права на dbms_lock есть только через роль.Так сработает?
Боюсь, что права потребуются прямые.
Но без dbms_lock можно легко обойтись - создайте служебную табличку с одной строкой. job делает update locktable set status='done' , приложение - select for update и проверяет статус :)
...
Рейтинг: 0 / 0
ждать без sleep
    #34592368
Jannny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986 JannyИмеется ввиду, что они не должны закоммитить данные текущей транзакции или что?Функции работают с одной таблицей. И необходимо добиться их последовательного выполнения.Ну так а зачем джоб? Запускаете последовательно(динамикой). То, что у Вас коммиты посередине, можно "прикрыть" автономной транзакцией, но целостности транзакции Вам все равно не получить - что так, что этак...
...
Рейтинг: 0 / 0
ждать без sleep
    #34592371
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) andrey_anonymous db-man убивать на месте
Угу. Но это они сами виноваты - привилегию не хотят давать :)
Справедливости ради следует отметить, что не всегда возможно дать привилегии без остановки эксплуатируемой прикладной системы.
лень админа не повод ставить на колени сервер
Ви нэ понялы - это может зависеть от дизайна системы, а не от лени админа.
Если, к примеру, нужный пакет постоянно используется каким-нть очень нужным "вечным" job, то пишите письма... ;)
...
Рейтинг: 0 / 0
ждать без sleep
    #34592374
Muxx1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А статус оно как проверяет? Не очень понятно.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592376
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все как обычно До сих пор в памяти жив тот Кондратий, который меня чуть не охватил, когда я узрел (в очень сурьезном продукте) подобный sleep через цикл там где можно было обойтись select for update !!!
...
Рейтинг: 0 / 0
ждать без sleep
    #34592377
Partos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The query would then look like this:
1 SELECT S.USERNAME,S.SID,P.SPID
2 FROM V$SESSION S,V$PROCESS P
3 WHERE S.PADDR=P.ADDR AND
4* S.USERNAME='SCOTT'
SQL> /
USERNAME SID SPID
------------------------------ ---------- ------------
SCOTT 36 12518


Attaching the debugger to the given session can now be done by the following command:

SQL> oradebug setospid 12518
Oracle pid: 19, Unix process pid: 12518, image: oracle10g@medo.noip.com

Suspending and resuming sessions
This example is given only for completeness, In reality, need for suspending user sessions arises
very infrequently, and even then, we should look for an alternative solution, if possible.
Suspending and resuming a session is an internal operation and, as such, should be used only when
truly necessary or requested by oracle support.
We can suspend the session that we have attached our debugger to, by using the following
command:

SQL> oradebug suspend
Statement processed.

The process that debugger is attached to will be suspended. It is important not to try that with the
sessions that are connected through the dispatcher (MTS) because, the session will find
another free shared server process to execute its SQL command. This is well suited for dedicated
server sessions only. The dedicated server session that I attached my process to
will appear to be hanging and will not react to SQL. Reaction will come only when I resume
the session with the following command:

SQL> oradebug resume
Statement processed.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592385
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986А статус оно как проверяет? Не очень понятно.
Пропустил пост с назначением job. Присоединяюсь к Janny, скорее всего job не нужен.

...статус же проверять надо чтобы убедиться, что сессия не захватила блокировку до того, как ее зацепил job.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592386
Partos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только на это надо привелегии sysdba
...
Рейтинг: 0 / 0
ждать без sleep
    #34592390
Muxx1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Gluk

Можешь написать как нужно сделать?
...
Рейтинг: 0 / 0
ждать без sleep
    #34592392
slepslap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous Muxx1986Можно поподробней? Права на dbms_lock есть только через роль.Так сработает?
Боюсь, что права потребуются прямые.
Но без dbms_lock можно легко обойтись - создайте служебную табличку с одной строкой. job делает update locktable set status='done' , приложение - select for update и проверяет статус :)

А мой способ не лучше, которй я выше написал?
...
Рейтинг: 0 / 0
ждать без sleep
    #34592393
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous Gluk (Kazan) andrey_anonymous db-man убивать на месте
Угу. Но это они сами виноваты - привилегию не хотят давать :)
Справедливости ради следует отметить, что не всегда возможно дать привилегии без остановки эксплуатируемой прикладной системы.
лень админа не повод ставить на колени сервер
Ви нэ понялы - это может зависеть от дизайна системы, а не от лени админа.
Если, к примеру, нужный пакет постоянно используется каким-нть очень нужным "вечным" job, то пишите письма... ;)

См. мой предыдущий пост.
Я не был бы столь кровожаден будь ситуация менее жизненной
...
Рейтинг: 0 / 0
ждать без sleep
    #34592401
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986To Gluk

Можешь написать как нужно сделать?

могу
сколько заплатишь ?
...
Рейтинг: 0 / 0
ждать без sleep
    #34592404
slepslap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Partos
SQL> oradebug resume
Statement processed.

oradebug - это средство для админов при работе с саппортом. Вы предлагаете его использовать для решения пользовательских задач
...
Рейтинг: 0 / 0
ждать без sleep
    #34592405
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГостЪ Muxx1986Есть список функций в формате CHAR. Они содержат DML и COMMIT. Их нельзя менять.
Надо их выполнить. Я для этого использую job. Можно ли иначе?
1) Не использовать ddl
2) автономка
Код: plaintext
PRAGMA AUTONOMOUS_TRANSACTION;
3) хз

Чтобы операцией DBMS_JOB.SUBMIT поместить job в очередь на выполнение нужно выполнить COMMIT. Так что ссылка на COMMIT как на некое препятствие выглядит нелогично, он всё равно нужен.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592412
a398
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymousи проверяет статус :)
что-то я не уловил. как часто проверяет статус?
...
Рейтинг: 0 / 0
ждать без sleep
    #34592419
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slepslapА мой способ не лучше, которй я выше написал?
Это решение к задаче в оригинальной формулировке, в то время как автор решает совсем другую ;)
...
Рейтинг: 0 / 0
ждать без sleep
    #34592420
Muxx1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если делать динамическим SQL через insert, то там в функции COMMIT не может применятся.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592422
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a398 andrey_anonymousи проверяет статус :)
что-то я не уловил. как часто проверяет статус?
Адын разЪ, если не 'done', то откат до припасенного savepoint и новая попытка :)
...
Рейтинг: 0 / 0
ждать без sleep
    #34592427
ГостЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenab ГостЪ Muxx1986Есть список функций в формате CHAR. Они содержат DML и COMMIT. Их нельзя менять.
Надо их выполнить. Я для этого использую job. Можно ли иначе?
1) Не использовать ddl
2) автономка
Код: plaintext
PRAGMA AUTONOMOUS_TRANSACTION;
3) хз

Чтобы операцией DBMS_JOB.SUBMIT поместить job в очередь на выполнение нужно выполнить COMMIT. Так что ссылка на COMMIT как на некое препятствие выглядит нелогично, он всё равно нужен.

Это был ответ на вопрос, можно ли иначе ( т.е. без job'ов) :)
...
Рейтинг: 0 / 0
ждать без sleep
    #34592428
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a398 andrey_anonymousи проверяет статус :)
что-то я не уловил. как часто проверяет статус?

Кляуза for update WAIT X определяет периодичность проверки.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592431
a398
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous a398 andrey_anonymousи проверяет статус :)
что-то я не уловил. как часто проверяет статус?
Адын разЪ, если не 'done', то откат до припасенного savepoint и новая попытка :)
и оно ресурсов не потребляет?
...
Рейтинг: 0 / 0
ждать без sleep
    #34592434
Partos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slepslap Partos
SQL> oradebug resume
Statement processed.

oradebug - это средство для админов при работе с саппортом. Вы предлагаете его использовать для решения пользовательских задач

Я знаю что это за средство. Предлагаю, точно так же как и Факер, не заниматься анальным сексом и использовать dbms_lock.sleep. Реальных причин чтоб его не использовать и тем более реально объяснённых причин "в чём его проблемно подключить" я пока так и не увидел.

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

З.Ы. Иногда эту вещь можно использовать не только при общении с сапортом!
...
Рейтинг: 0 / 0
ждать без sleep
    #34592439
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabКляуза for update WAIT X определяет периодичность проверки.
wait x не нужен, ему надо завершения job дождаться. Поэтому просто for update.
А на самом деле и job не нужен - autonomous transaction спасет отца русской демократии
...
Рейтинг: 0 / 0
ждать без sleep
    #34592440
a398
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenab a398 andrey_anonymousи проверяет статус :)
что-то я не уловил. как часто проверяет статус?
Кляуза for update WAIT X определяет периодичность проверки.
был не прав. сенкс.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592441
Muxx1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если делать динамическим SQL через insert, то там в функции COMMIT не может применятся.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592442
slepslap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PartosЗ.Ы. Иногда эту вещь можно использовать не только при общении с сапортом!

ага, особенно в клиентских приложениях
...
Рейтинг: 0 / 0
ждать без sleep
    #34592446
slepslap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous slepslapА мой способ не лучше, которй я выше написал?
Это решение к задаче в оригинальной формулировке, в то время как автор решает совсем другую ;)

бред
...
Рейтинг: 0 / 0
ждать без sleep
    #34592448
Partos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slepslap PartosЗ.Ы. Иногда эту вещь можно использовать не только при общении с сапортом!

ага, особенно в клиентских приложениях

Именно!!
...
Рейтинг: 0 / 0
ждать без sleep
    #34592449
Jannny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986Если делать динамическим SQL через insert, то там в функции COMMIT не может применятся.Переведите...
...
Рейтинг: 0 / 0
ждать без sleep
    #34592451
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slepslap andrey_anonymous slepslapА мой способ не лучше, которй я выше написал?
Это решение к задаче в оригинальной формулировке, в то время как автор решает совсем другую ;)бред
Доктор, перечтите форум и сдерживайтесь, пожалуйста, по мере возможности.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592458
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГостЪ mcureenab ГостЪ Muxx1986Есть список функций в формате CHAR. Они содержат DML и COMMIT. Их нельзя менять.
Надо их выполнить. Я для этого использую job. Можно ли иначе?
1) Не использовать ddl
2) автономка
Код: plaintext
PRAGMA AUTONOMOUS_TRANSACTION;
3) хз

Чтобы операцией DBMS_JOB.SUBMIT поместить job в очередь на выполнение нужно выполнить COMMIT. Так что ссылка на COMMIT как на некое препятствие выглядит нелогично, он всё равно нужен.

Это был ответ на вопрос, можно ли иначе ( т.е. без job'ов) :)

Логика железная.
- Я хочу яблок, но их неу у меня.
- Купи слона.


Собственно нужно использовать AUTONOMOUS_TRANSACTION, а всё остальное тут нахрен не нужно, а скорее всего и AUTONOMOUS_TRANSACTION тоже.

PS. Админ прав, что не даёт системных привилегий на всякие глупости.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592481
ГостЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenab ГостЪ mcureenab ГостЪ Muxx1986Есть список функций в формате CHAR. Они содержат DML и COMMIT. Их нельзя менять.
Надо их выполнить. Я для этого использую job. Можно ли иначе?
1) Не использовать ddl
2) автономка
Код: plaintext
PRAGMA AUTONOMOUS_TRANSACTION;
3) хз

Чтобы операцией DBMS_JOB.SUBMIT поместить job в очередь на выполнение нужно выполнить COMMIT. Так что ссылка на COMMIT как на некое препятствие выглядит нелогично, он всё равно нужен.

Это был ответ на вопрос, можно ли иначе ( т.е. без job'ов) :)

Логика железная.
- Я хочу яблок, но их неу у меня.
- Купи слона.


Собственно нужно использовать AUTONOMOUS_TRANSACTION, а всё остальное тут нахрен не нужно, а скорее всего и AUTONOMOUS_TRANSACTION тоже.

PS. Админ прав, что не даёт системных привилегий на всякие глупости.

Логики не понял:)
Как автор создаёт job нам неизвестно, может в начале своей транзакции и делает commit,
может через dbms_scheduler (там кажется создание job'а идет в автономке)
но факт, что он избегает commit'а , который в jobe.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592496
Splain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx1986Как можно ждать в функции без использования системных ресурсов, не используя функцию процедуры dbms_lock.sleep.То есть есть ли какой-то аналог этой процедуры?
Просто подключение пакета сопряжено с некоторыми трудностями.

Какая версия Oracle?
...
Рейтинг: 0 / 0
ждать без sleep
    #34592547
Muxx1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
9i
...
Рейтинг: 0 / 0
ждать без sleep
    #34592602
Splain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxx19869i

Тогда придется самостоятельно все писать.

Общая идеология следующая.

Создаете job. В нем выполняете функцию. Если выполнилась удачно, в этом job запускаете новый job, в котором выполняете действия после удачного выполнения. Если неудачно, то другой job - с действиями после неудачного выполнения.

Писать в первое время много. Можно поискать готовые решения механизма для 9i.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592612
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SplainСоздаете job. В нем выполняете функцию. Если выполнилась удачно, в этом job запускаете новый job, в котором выполняете действия после удачного выполнения. Если неудачно, то другой job - с действиями после неудачного выполнения.


В тему не вникал, просто любопытно:
а что в один job все это засунуть не судьба ???
...
Рейтинг: 0 / 0
ждать без sleep
    #34592648
Splain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)
В тему не вникал, просто любопытно:
а что в один job все это засунуть не судьба ???

Думаю что можно.
Но автор упорно хочет выполнять функции в отдельных job-ах.
...
Рейтинг: 0 / 0
ждать без sleep
    #34592660
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор странный, это факт
...
Рейтинг: 0 / 0
ждать без sleep
    #34592673
ГостЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Splain Muxx19869i

Тогда придется самостоятельно все писать.
...


А если не самостоятельно , то что имелось ввиду?

P.S Автор немножко партизан:)
...
Рейтинг: 0 / 0
ждать без sleep
    #34592710
Splain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГостЪ
А если не самостоятельно , то что имелось ввиду?


В 10g по слухам подобное можно сделать с помощью пакета DBMS_SCHEDULER
Oracle® Database Administrator's Guide 10g Release 2 Scheduler Concepts
...
Рейтинг: 0 / 0
ждать без sleep
    #34593252
spat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Splain Gluk (Kazan)
В тему не вникал, просто любопытно:
а что в один job все это засунуть не судьба ???

Думаю что можно.
Но автор упорно хочет выполнять функции в отдельных job-ах.

А потом автор придёт с вопросом, почему у него в системе кол-во одновременно открытых сессий достигло максимума. Джоба - фоновый процесс, и если нет необходимости именно в фоновой работе (например, расчёт каких-нибудь отчётов по расписанию), имхо, обойдитесь лучше другими более лёгкими для базы средствами в рамках своей сессии.
...
Рейтинг: 0 / 0
ждать без sleep
    #34593609
Splain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spat
А потом автор придёт с вопросом, почему у него в системе кол-во одновременно открытых сессий достигло максимума.

См. параметр JOB_QUEUE_PROCESSES
...
Рейтинг: 0 / 0
ждать без sleep
    #34593718
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spat Splain Gluk (Kazan)
В тему не вникал, просто любопытно:
а что в один job все это засунуть не судьба ???

Думаю что можно.
Но автор упорно хочет выполнять функции в отдельных job-ах.

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

низачот
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ждать без sleep
    #39706880
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые, тема старая, но в поиске вылезает первой,
прошло много лет - появились новые варианты для гурманов, не употребляющих dbms_lock,
цитата отсюда:
https://oracledeli.wordpress.com/2017/03/31/plsql-sleep-without-using-dbms_lock/

Option 1: APEX_UTIL.sleep
If APEX is installed you can use the procedure “PAUSE” from the publicly available package APEX_UTIL.

Example – “Wait 5 seconds”:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
SET SERVEROUTPUT ON ;
BEGIN
    DBMS_OUTPUT.PUT_LINE('Start ' || to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
    APEX_UTIL.PAUSE(5);
    DBMS_OUTPUT.PUT_LINE('End   ' || to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
END;
/


Option 2: java.lang.Thread.sleep
An other option is the use of the method “sleep” from the Java class “Thread”, which you can easily use through providing a simple PL/SQL wrapper procedure:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR REPLACE PROCEDURE SLEEP (P_MILLI_SECONDS IN NUMBER) 
AS LANGUAGE JAVA NAME 'java.lang.Thread.sleep(long)';
Note: Please remember, that “Thread.sleep” uses milli seconds!

Example – “Wait 5 seconds”:

SET SERVEROUTPUT ON ;
BEGIN
    DBMS_OUTPUT.PUT_LINE('Start ' || to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
    SLEEP(5 * 1000);
    DBMS_OUTPUT.PUT_LINE('End   ' || to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
END;
/
...
Рейтинг: 0 / 0
ждать без sleep
    #39706888
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А для Оракла 18 новое щастье:
цитата отсюда https://oracle-base.com/articles/18c/dbms_session-sleep-18c

DBMS_SESSION.SLEEP Replaces DBMS_LOCK.SLEEP in Oracle Database 18c
The SLEEP procedure is added to the DBMS_SESSION package and deprecated from the DBMS_LOCK package in Oracle Database 18c.


The SLEEP procedure is added to the DBMS_SESSION package, so it is available to all sessions with no additional grants needed and no dependency on the DBMS_LOCK package.

The procedure suspends the session for the specified number of seconds. The seconds parameter can accept any valid number, including fractions of a second.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SET SERVEROUTPUT ON
BEGIN
  sys.DBMS_OUTPUT.put_line('Time 1: ' || TO_CHAR(SYSTIMESTAMP, 'HH24:MI:SS.FF'));

  -- Pause for 1 second.
  sys.DBMS_SESSION.sleep(1);

  sys.DBMS_OUTPUT.put_line('Time 2: ' || TO_CHAR(SYSTIMESTAMP, 'HH24:MI:SS.FF'));

  -- Pause for half a second.
  sys.DBMS_SESSION.sleep(0.5);

  sys.DBMS_OUTPUT.put_line('Time 3: ' || TO_CHAR(SYSTIMESTAMP, 'HH24:MI:SS.FF'));
END;
/
Time 1: 19:52:52.957473000
Time 2: 19:52:53.957187000
Time 3: 19:52:54.457213000

PL/SQL procedure successfully completed.

SQL>



ВАЖНО:
The Oracle 18c documentation no longer lists the SLEEP procedure in the DBMS_LOCK package, but it is still present for backwards compatibility. It is now deprecated, so you should transition your code to use the DBMS_SESSION package instead, and revoke any grants to the DBMS_LOCK package where they were only granted to give access to the SLEEP procedure.
...
Рейтинг: 0 / 0
83 сообщений из 83, показаны все 4 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ждать без sleep
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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