2016-06-29 17 views
2

Ich wollte eine Deadlock-Situation in der Oracle-Tabelle erstellen, die keine Antwort gibt und die gleiche Abfrage von der Java-Anwendung ausführen wird Könnten Sie bitte eine Beispielabfrage angeben, die diese Situation auf einer Tabelle (mit 4 Spalten) macht Sno, Name, Job, Abteilung).Wie man Deadlock-Situation im Orakel auf einer Tabelle, die einfache 4 Spalten (Sno, Name, Job, Dept) hat?

+0

Meinen Sie * Deadlock * oder nur ein * lock *? Ein Deadlock ist eine bestimmte Art von Sperre und würde die Dinge nicht hängen lassen, sondern würde schnell einen Fehler verursachen und einen der Prozesse unterbrechen. –

+0

Ich wollte Deadlock zu den Sitzungen machen – user3442562

Antwort

2

In Session 1:

DECLARE 
    v_row1 TABLE_NAME%ROWTYPE; 
    v_row2 TABLE_NAME%ROWTYPE; 
BEGIN 
    SELECT * 
    INTO v_row1 
    FROM table_name 
    WHERE sno = 1 
    FOR UPDATE; 

    DBMS_LOCK.SLEEP(seconds => 5); 

    SELECT * 
    INTO v_row2 
    FROM table_name 
    WHERE sno = 2 
    FOR UPDATE; 

    ROLLBACK; 
END; 
/

Dann in Session 2:

DECLARE 
    v_row1 TABLE_NAME%ROWTYPE; 
    v_row2 TABLE_NAME%ROWTYPE; 
BEGIN 
    SELECT * 
    INTO v_row2 
    FROM table_name 
    WHERE sno = 2 
    FOR UPDATE; 

    DBMS_LOCK.SLEEP(seconds => 5); 

    SELECT * 
    INTO v_row1 
    FROM table_name 
    WHERE sno = 1 
    FOR UPDATE; 

    ROLLBACK; 
END; 
/
+0

Vielen Dank für die Antwort, ich versuche, diese Situation zu machen .. Sie kennen das Ergebnis – user3442562

+0

Eine andere Möglichkeit ist, Aktualisierungen zu Zeilen in Sitzung 1 zu tun und sie nicht begehen und dann versuchen Führen Sie Aktualisierungen für dieselben Zeilen in Sitzung 2 durch. Sitzung 2 wird so lange angehalten, bis Sitzung 1 eine Festschreibung oder ein Rollback durchführt. – MT0

1

Ein Deadlock tritt auf, wenn zwei oder mehr Sitzungen für Daten, die von miteinander verriegelten warten, was in allen Sitzungen zu sein verstopft. In der Regel werden Deadlocks durch schlecht implementierte Sperren im Anwendungscode oder aufgrund eines Leistungsproblems oder aufgrund eines Konflikts zwischen zwei verschiedenen Prozessverarbeitungsdaten in der Datenbank verursacht.

Siehe: https://oracle-base.com/articles/misc/deadlocks

+0

danke für die antwort, ich versuche diese situation zu machen ..können sie das ergebnis wissen – user3442562