Heim  >  Artikel  >  So überprüfen Sie den Grund der Sperrtabelle in Oracle

So überprüfen Sie den Grund der Sperrtabelle in Oracle

小老鼠
小老鼠Original
2023-07-05 15:09:452922Durchsuche

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.

So überprüfen Sie den Grund der Sperrtabelle in Oracle

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn