AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Noch offene Transaktionen seitens des Servers löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Noch offene Transaktionen seitens des Servers löschen

Ein Thema von mschaefer · begonnen am 5. Apr 2009 · letzter Beitrag vom 5. Apr 2009
Antwort Antwort
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#1

Noch offene Transaktionen seitens des Servers löschen

  Alt 5. Apr 2009, 16: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
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Noch offene Transaktionen seitens des Servers löschen

  Alt 5. Apr 2009, 19:39
Zitat von mschaefer:
Wie kann ich noch offene Transaktionen seitens des Servers löschen?
Die MON$ATTACHMENTS und MON$STATEMENTS Tabellen bieten diese Möglichkeit. Beispiele:


http://www.firebirdsql.org/rlsnotesh...l#25-new-admin

Zitat:
To cancel all current activity for a specified connection:
SQL-Code:
DELETE FROM MON$STATEMENTS
  WHERE MON$ATTACHMENT_ID = 32
Zitat:
To disconnect all clients except the “Me” connection:
SQL-Code:
DELETE FROM MON$ATTACHMENTS
  WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION
Ab FireBird 2.5
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#3

Re: Noch offene Transaktionen seitens des Servers löschen

  Alt 5. Apr 2009, 20:06
Klasse Michael!

Danach habe ich mir die Fingerkuppen schon wundgegoogelt. H
abe da nämlich so eine VPN-Verbindung zum Fb-Server wo schon
mal eine Abfrage hängenbleibt und da hilft das natürlich.

Grüße // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz