2011-05-09 5 views

Odpowiedz

9

Nie można wylogować się z bazy danych Oracle bez popełnienia lub wycofania. Możliwe, że aplikacja kliencka uległa awarii lub została przymusowo zakończona i nie miała szansy na wylogowanie, pozostawiając sesję na serwerze, który trzyma pewne blokady. W takim przypadku DBA musiałaby zabić tę sesję.

Jeśli jesteś DBA i nie jesteś pewien, co sesja musi być zabity, można uruchomić następujące zapytanie aby uzyskać informacje na temat różnych sesjach, które są posiadających zamki, które blokują inne sesje

SELECT ses.sid, ses.serial#, ses.username, ses.program, ses.osuser, ses.machine 
    FROM v$session ses, 
     dba_blockers blk 
WHERE blk.holding_session = ses.sid 

Po zidentyfikowaniu, która sesja (y), aby zabić

ALTER SYSTEM KILL SESSION '<<sid>>, <<serial#>>' 
+0

Dzięki @JustinCave za odpowiedź. Aby wyjaśnić, czy sesja nie zostanie wyraźnie zakończona, nigdy nie zakończy się automatycznie? –

+1

@RussellSilva - To zależy, co masz na myśli przez "automatyczne". Jeśli aplikacja kliencka ulegnie awarii, można włączyć wykrywanie niedziałającego połączenia (DCD) na serwerze bazy danych. To spowoduje, że baza danych będzie okresowo wysyłała polecenia ping do klienta, aby ustalić, czy nadal działa i czy zabić sesję, jeśli klient się zawiesił. Dzieje się to jednak stosunkowo szybko, więc nie było to związane z pierwotnym pytaniem. Możesz skonfigurować Oracle, aby zabijał sesje, jeśli są one zbyt długo nieaktywne. W każdym z tych przypadków sesja jest jawnie zakończona przez "rollback", jest po prostu zakończona przez bazę danych. –

3

Jeśli sesja nie wycofać wyraźnie, jeśli serwer bazy danych nie może dotrzeć do klienta, jego aktywność zostanie wycofana automatycznie, a następnie będzie zakończyć sesję.

Serwer często jest całkiem zadowolony, jeśli klient nie wysyła do niego żądania przez wiele godzin. Sprawdź, czy SQLNET.EXPIRE_TIME jest ustawiony na wszystko na serwerze. Jeśli jest to wartość niezerowa, to tyle minut będzie czekać przed sprawdzeniem, czy połączenie klienta nie działa. Jeśli jest równa zero, nie będzie sprawdzać i będzie świadomy tylko, jeśli stwierdzi, że klient nie działa, odpowiadając na żądanie klienta.

Również wycofanie może zająć trochę czasu. Jeśli wykonasz dużo pracy, może to potrwać kilka godzin. Wszystko, co czeka na tę sesję, będzie czekało, aż wycofanie się zakończy.

Powiązane problemy