Der Grund, warum Oracle die Tabelle sperrt, ist: Wenn ein Programm eine Einfügung für eine Tabelle ausführt und noch nicht festgeschrieben wurde, führt ein anderes Programm ebenfalls eine Einfügung für dieselbe Tabelle aus. Zu diesem Zeitpunkt tritt eine Ausnahme wegen Ressourcenauslastung auf eine Tischsperre.
Das Betriebssystem dieses Tutorials: Windows 10-System, Oracle Version 19c, Dell G3-Computer.
Was ist der Grund, warum Oracle die Tabelle sperrt?
Die Hauptgründe für das Sperren der Tabelle sind:
(1) Programm A führt die Einfügung von TabelleA aus, und vor dem Festschreiben fügt Programm B auch TabelleA ein Zeit Eine Ausnahme, die auftritt, wenn Ressourcen ausgelastet sind, ist die Sperrtabelle
(2) Die Sperrtabelle tritt häufig bei Parallelität und nicht bei Parallelität auf (parallel: Wenn ein Thread die Datenbank betreibt, kann der andere Thread die Datenbank, die CPU und die E/A nicht bedienen Zuweisungsprinzip)
Methoden zur Verringerung der Wahrscheinlichkeit, die Tabelle zu sperren:
(1) Reduzieren Sie die Zeit zwischen der Ausführung von Einfügungs-, Aktualisierungs- und Löschanweisungen und dem Festschreiben. Insbesondere wird die Stapelausführung in eine Einzelausführung geändert und die Nichtausführungsgeschwindigkeit von SQL selbst optimiert
(2) Wenn die Transaktion abnormal zurückgesetzt wird
Der Grund für das Sperren der Tabelle kann sein, dass die Zeilendaten geändert wurden und vergessen zu senden, was ebenfalls dazu führt, dass die Tabelle gesperrt wird.
1. Es wird empfohlen, den Grund für die Sperrung der Uhr zu prüfen, bevor Sie eine Entscheidung treffen.
1 Der Code für die Sperrtabellenabfrage hat die folgende Form:
select count(*) from v$locked_object; select * from v$locked_object;
2. Überprüfen Sie, welche Tabelle gesperrt ist
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
3 Überprüfen Sie, welche Sitzung die Sperre verursacht
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
5. Kill Löschen Sie den entsprechenden Prozess.
Führen Sie den Befehl aus: alter system kill session'1025,41'; , es fordert: Testbenutzer ist gesperrt. Melden Sie sich als Benutzer mit der zu entsperrenden DBA-Rolle an. Stellen Sie zunächst das spezifische Zeitformat ein, um die spezifische Zeit anzuzeigen.
2 Zeit
select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid and b.SQL_ID = c.sql_id and c.sql_id = '' order by b.logon_time;
3. Entsperren
SQL> alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss’;
Benutzer geändert.
Das obige ist der detaillierte Inhalt vonSo überprüfen Sie den Grund der Sperrtabelle in Oracle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!