2012-12-12 12 views
15

Mam problem podczas próby zaktualizowania wartości kolumny w sqlplus.Usuwanie blokad w Oracle 10

Po prostu nie będzie kompletny i po prostu się zawiesi. Zastanawiam się, czy istnieje jakaś siła, by usunąć zamki w wyroczni?

Zauważyłem tabeli o nazwie v $ locked_object która nie zawiera onject ID istotnych dla kwestii mam.

Mam nadzieję, że wyjaśniłem to wystarczająco dobrze.

Z góry dziękuję za pomoc!

+1

Czy znalazłeś _what_ proces blokował obiekt i co ten proces robił? Na pewno lepiej jest naprawić problem, niż go hakować? (Jestem prawie pewien, że odpowiedź na twoje pytanie brzmi "nie"). – Ben

Odpowiedz

46

To będzie dokładnie służyć swój cel:

SELECT SESSION_ID FROM DBA_DML_LOCKS WHERE NAME = <TABLE_NAME>; 

Użyj SESSION_ID znalezienia odpowiedniego SERIAL# z tym stwierdzeniem:

SELECT SID, SERIAL# FROM V$SESSION WHERE SID IN (
    SELECT SESSION_ID FROM DBA_DML_LOCKS WHERE NAME = <TABLE_NAME> 
); 

zlokalizować wykraczająca krotki SID, SERIAL# i zwolnić go tak:

ALTER SYSTEM KILL SESSION 'SID, SERIAL#'; 
+0

Udało mi się rozwiązać ten problem, znajdując sesję wstrzymywania w aplikacji po sprawdzeniu dba_blockers. Ale zapamięta polecenie ALTER na przyszłość. Nie może głosować w górę odpowiedzi z powodu niskiego powtórzenia. Dzięki –

+0

Zgaduję, że możesz teraz głosować w górę :) Dzięki – Mari

0

Prawdopodobnie ktoś inny zaktualizował ten sam stół i jeszcze się nie zatwierdził. To może być nawet ty (w innym narzędziu lub innej sesji).

Najprostszym sposobem na pozbycie się blokady jest popełnić pracę w drugiej sesji.

+0

Witam Udało mi się znaleźć przyczynę tego problemu, patrząc w DBA_BLOCKERS. Otrzymałem identyfikator sesji i ją zabiłem. –

1

Zarządzane w celu rozwiązania tego problemu.

Zajrzałem do tabeli DBA_BLOCKERS i otrzymałem identyfikator sesji. Następnie zabity sesji i zamek został usunięty.

Powiązane problemy