oracle sleep или lock для проверки обработки - PullRequest
0 голосов
/ 15 сентября 2010

Я просто хочу посмотреть, вставляются ли данные в таблицу или нет ..

Итак, я написал так:

select count(*) from emp;
dbms_lock.sleep(1);
select count(*) from emp;

чтобы он спал 1 мин. Даже после сна, если 1-й и 2-й счет отличаются, данные вставляются в таблицу.

В противном случае вставки не происходят.

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

И если это неправильно, как это реализовать.

Ответы [ 5 ]

3 голосов
/ 15 сентября 2010

Только ваш PL / SQL-блок будет усыплен.Если вы хотите поспать минуту, передайте 60 (секунд) сна.

1 голос
/ 16 сентября 2010

Вы можете использовать USER_LOCK.SLEEP, если не хотите предоставлять EXECUTE для DBMS_LOCK, что может быть более разрушительным.Аргументы разные, но вы можете достичь одного и того же.

USER_LOCK.SLEEP PROCEDURE SLEEP Имя аргумента Тип In / Out По умолчанию?


TENS_OF_MILLISECS NUMBER IN

DBMS_LOCK.SLEEP ПРОЦЕДУРА SLEEP Аргумент Имя Тип In / Out По умолчанию?


SECONDS NUMBER IN

0 голосов
/ 17 сентября 2010

Прежде всего, извините за мой английский :-D AFAIK select count (*) тратит впустую ресурс.Я предлагаю вам создать триггер для увеличения количества строк, вставленных в другое место.Ваше запланированное задание затем проверяет количество вставленных строк и сбрасывает его до нуля до выхода.Таким образом, вы будете знать, сколько строк вставлено между прогонами и сколько.

create table emp_stat(inserted int);

insert into emp_stat values(0);
commit;

create trigger emp_trigger 
before insert on emp for each row 
begin 
    if ( inserting ) then 
        update emp_stat set inserted = inserted + 1; 
    end if; 
end; 
0 голосов
/ 15 сентября 2010

Как вы вставляете в таблицу? Это партия? OLTP? Я не думаю, что вы предложили это практично, но не могу предложить другой путь, пока не будет предоставлена ​​дополнительная информация. Дайте нам немного больше информации о процессе.

0 голосов
/ 15 сентября 2010

Чтобы быть более понятным, вы не знаете, не происходит ли вставка;все, что вы знаете, это то, что количество зафиксированных записей не изменилось.Если у вас есть доступ к V$TRANSACTION, вы можете просмотреть USED_UBLK и USED_UREC, чтобы убедиться, что транзакция в полете вызывает изменения.

...