Einzelnen Beitrag anzeigen

Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#1

Noch offene Transaktionen seitens des Servers löschen

  Alt 5. Apr 2009, 17:51
Datenbank: Firebird • Version: 2.1 • Zugriff über: Zeos
Moin, moin,

Wie kann ich noch offene Transaktionen seitens des Servers löschen? Würde gerne einen Client, wenn er länger als 20 Minuten eine Transaktion
offen hält "rausschmeissen". Kann ich das irgendwie mit einer Stored-Procedure lösen? Wie ist das eventuell bei anderen DBMS ?

Grüße // Martin



PS 1: Bei Oracle
-----------------------------------------------------------------------------------------------------------------------------------
Schliessen einer Sesssion: Die V$SESSION dynamic performance table hat angenommen folgende Sessions eingetragen:

SELECT sid, serial#, username FROM v$session

SID··SERIAL#··USERNAME
--- --------- ----------------
48········28 OPS$BQUIGLEY
10········11 OPS$SWIFT
11········39 OPS$OBRIEN
12········13 SYSTEM
13········08 SCOTT


Das folgende Statement löscht die Verbindung von Scott´s User-Session, die SID und SERIAL# Werte aus der Tabelle V$SESSION verwendet.

Code:
ALTER SYSTEM KILL SESSION '13, 8';
Sessions können auch durch den Oracle-Server gekillt werden. Hierzu ist der Parameter SQLNET.EXPIRE_TIME in der Datei sqlnet.ora anzupassen. Die Parameteranpassung kann über den Net-Manger erfolgen: LOKAL->Profil->Allgemein->Erweitert->TNS-Zeitüberschreitungswert.

-----------------------------------------------------------------------------------------------------------------------------------



PS 2: Bei PostGres
-----------------------------------------------------------------------------------------------------------------------------------
Die PID für den Prozess einer SQL-Abfrage kann man bei PosGres in der Tabelle pg_stat_activity finden.

Bisher ist mir kein Weg bekannt diese Abzubrechen
-----------------------------------------------------------------------------------------------------------------------------------



PS 3: Bei MS-SQL-Server
-----------------------------------------------------------------------------------------------------------------------------------
ID´s Ermitteln
Die session_id-Spalte kann man aus der dynamischen Verwaltungssichten sys.dm_tran_locks, sys.dm_exec_sessions und sys.dm_exec_requests abfragen, um einen Bericht über die aktiven Sitzungs-ID-Werte zu erhalten. Sie können auch die SPID-Spalte anzeigen, die von der gespeicherten Systemprozedur sp_who zurückgegeben wird. Wenn für einen bestimmten SPID-Wert ein Rollback ausgeführt wird, enthält die cmd-Spalte im sp_who-Resultset für diesen SPID-Wert den Eintrag KILLED/ROLLBACK.

Wenn eine bestimmte Verbindung eine Datenbankressource sperrt und den Fortschritt einer anderen Transaktion blockiert, wird die Sitzungs-ID der blockierenden Verbindung in der blocking_session_id-Spalte von sys.dm_exec_requests oder der von sp_who zurückgegebenen blk-Spalte angezeigt.


Code:
KILL { session ID | UOW } [ WITH STATUSONLY ]
Argumente
session ID
Die Sitzungs-ID des zu beendenden Prozesses. session ID ist eine eindeutige ganze Zahl (int), die jeder Benutzerverbindung beim Herstellen der Verbindung zugewiesen wird. Der Sitzungs-ID-Wert ist für die Dauer der Verbindung an die Verbindung gebunden. Beim Beenden der Verbindung wird der ganzzahlige Wert freigegeben und kann einer neuen Verbindung zugewiesen werden.

Verwenden Sie KILL session ID, um reguläre verteilte und nicht verteilte Transaktionen zu beenden, die einer bestimmten Sitzungs-ID zugeordnet sind.

UOW
Identifiziert die Arbeitseinheits-ID (Unit of Work, UOW) verteilter Transaktionen. UOW ist ein GUID, der aus der request_owner_guid-Spalte der dynamischen Verwaltungssicht sys.dm_tran_locks abgerufen werden kann. UOW kann auch aus dem Fehlerprotokoll oder über den MS DTC-Monitor ermittelt werden. Weitere Informationen zum Überwachen von verteilten Transaktionen finden Sie in der MS DTC-Dokumentation.

Verwenden Sie KILL UOW zum Beenden verwaister verteilter Transaktionen. Diese Transaktionen sind keiner echten Sitzungs-ID, sondern künstlich der Sitzungs-ID = '-2' zugeordnet. Diese Sitzungs-ID ermöglicht das Identifizieren verwaister Transaktionen, indem die Sitzungs-ID-Spalte in den dynamischen Verwaltungssichten sys.dm_tran_locks, sys.dm_exec_sessions oder sys.dm_exec_requests abgefragt wird.

WITH STATUSONLY
Generiert einen Fortschrittsbericht für einen angegebenen session ID- oder UOW-Wert, für den aufgrund einer früheren KILL-Anweisung ein Rollback ausgeführt wird. Durch KILL WITH STATUSONLY wird der durch session ID oder UOW angegebene Prozess weder beendet noch wird ein Rollback ausgeführt. Es wird lediglich der aktuelle Fortschritt des Rollbacks angezeigt.


-----------------------------------------------------------------------------------------------------------------------------------
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat