2010-03-04 20 views
21

Byłem ciekawy, w jaki sposób klient cienkiego klienta JDBC w terminalu Oralce realizuje limit czasu zapytania. Można to ustawić, wywołując metodę setQueryTimeout java.sql.Statement (int seconds) .W jaki sposób jest realizowany limit czasu zapytania JDBC Oracle?

Czy jest to realizowane w samym sterowniku po stronie klienta? Czy nowy wątek został zainicjowany i połączony z ? A może sterownik JDBC po prostu wysyła parametr do Oracle, a następnie egzekwuje limit czasu?

Po przekroczeniu limitu czasu, jakie zasoby na kliencie i bazy danych są wydawane, a które się kręcą? Czy firma Oracle kontynuuje , aby uruchomić zapytanie, mimo że klient go porzucił lub zakończył działanie podając ? Czy po stronie klienta nadal znajduje się obiekt kursora?

Dziękuję

Odpowiedz

11

Tanel Poder napisał article o tym, jak działa Anuluj poprzez OCI (Oracle Call Interface). Chyba coś podobnego robi się dla JDBC. Jeśli używasz grubego sterownika, przez OCI, możesz spróbować śledzić sesję (poprzez ustawienia sqlnet.ora) i zobaczyć, co zostanie zarejestrowane.

+0

Czy to oznacza, że ​​sterownik JDBC spawnuje kolejny bieżnik dla zapytania i czeka na jego wyłączenie, a następnie wysyła OCICancel? – oneself

+0

Nie można powiedzieć, czy jest to osobny wątek, czy tylko pętla z napisem "Cokolwiek z serwera ... czy upłynął limit czasu ... Cokolwiek z serwera ... zostało przekroczone." –

1

wiem, że zapytanie nie będzie kontynuowana po stronie serwera, gdy zostanie osiągnięty limit czasu. Istnieje pewna opcja zamiaru/sygnału wysłana do serwera przed lub po przekroczeniu limitu czasu, aby wskazać, że serwer powinien się zatrzymać. Zweryfikowałem to, patrząc na serwer w różnych tabelach V $, aby sprawdzić, czy zapytanie jest uruchomione. (V $ SESSION, V $ SQL, itp.)

2

Gdy kwerenda faktycznie przestaje działać podczas korzystania z metody setTimeOut, wyjątek SQL z kodem błędu Oracle ORA-01013 - user requested cancel of current operation jest wyrzucany z serwera Oracle.

Oznaczałoby to, że operacja została anulowana z wdziękiem (jeśli chodzi o wyrocznię lub tyle wyroczni może) - ponieważ to wyrocznia wysyła tę wiadomość.

15

Według Oracle JDBC FAQ

komunikat limitu czasu wątku. Ten wątek jest tworzony, jeśli wykonasz dowolną instrukcję z limitem czasu. Utworzono tylko jeden wątek, niezależnie od liczby instrukcji lub połączeń. Ten wątek trwa przez całe życie maszyny wirtualnej.

Powiązane problemy