Heim  >  Artikel  >  Datenbank  >  Was ist der Grund, warum Oracle die Tabelle sperrt?

Was ist der Grund, warum Oracle die Tabelle sperrt?

WBOY
WBOYOriginal
2022-02-17 17:49:5314529Durchsuche

In Oracle besteht der Grund für das Sperren der Tabelle darin, dass, wenn ein Programm eine Einfügung für eine Tabelle ausführt und noch kein Commit durchgeführt wurde, ein anderes Programm ebenfalls eine Einfügung für dieselbe Tabelle ausführt, dann eine Ausnahme wegen Ressourcenauslastung auftritt , Tisch sperren.

Was ist der Grund, warum Oracle die Tabelle sperrt?

Die Betriebsumgebung dieses Tutorials: Windows 10-System, Oracle 11g-Version, 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 Dieses Mal ist die Ausnahme, wenn die Ressource ausgelastet ist, die Sperrtabelle /o-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 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 Es wird vergessen, die Zeilendaten zu übermitteln, 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 Datenbankrolle an. Stellen Sie zunächst das spezifische Zeitformat ein, um die spezifische Zeit anzuzeigen 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.

Empfohlenes Tutorial: „

Oracle Video Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Grund, warum Oracle die Tabelle sperrt?. 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