2009-09-09 17 views
6
> ALTER PACKAGE blah COMPILE; 
(wait about 10 minutes) 
> ORA-04021: timeout occurred while waiting to lock object 

Rozumiem, dlaczego pojawia się błąd przekroczenia limitu czasu (pakiet jest używany).Czy domyślny limit czasu blokady Oracle obiektu może zostać zmieniony?

Czy ktoś wie, czy istnieje sposób na zmianę domyślnego interwału oczekiwania na 10 minut? Czy można to skonfigurować na poziomie bazy danych/sesji/instrukcji?

Dzięki

Odpowiedz

6

nie jest parametrem DDL_LOCK_TIMEOUT od 11gR1:

DDL_LOCK_TIMEOUT określa termin, jak długo DDL oświadczenia będzie czekać w kolejce blokady DML. Domyślna wartość zero wskazuje status NOWAIT. Maksymalna wartość 1 000 000 sekund spowoduje, że instrukcja DDL będzie czekać na zawsze, aby uzyskać blokadę DML.

Nie jestem pewien, czy można zmienić domyślny limit czasu w poprzednich wersjach.

+0

Dzięki. Szkoda, że ​​nie ma 10g. – cagcowboy

+0

to faktycznie nie działa dla mnie .. czy próbowałeś tego? Zrobiłem 'alter session set ddl_lock_timeout = 5;' następnie 'alter package xxx compile;' ale nadal czekałem kilka minut – ShoeLace

+2

@ShoeLace Myślę, że zmieni to zachowanie tylko wtedy, gdy czekasz na DML, na przykład próbując upuścić tabelę podczas gdy ktoś ma niezapowiedzianą transakcję na wierszach tej tabeli (gdzie domyślnym zachowaniem jest natychmiastowe zgłoszenie błędu). Prawdopodobnie nie będzie działać podczas wymiany aktualnie używanego pakietu (domyślnym zachowaniem jest oczekiwanie, aż pakiet nie będzie już używany). –

Powiązane problemy