Ich habe Code geschrieben, um eine SQL Server-Datenbank zu aktualisieren. Bevor ich die Datenbank aktualisieren, erreichen ich eine exklusive Sperre über:Test vor dem Versuch, eine exklusive Sperre zu aktivieren
ALTER DATABASE Test SET SINGLE_USER WITH NO_WAIT
Allerdings würde ich die Datenbank testen gerne zu sehen, wenn die exklusive Sperre ist möglich vor ich den obigen Code ausführen. Der Test muss nicht zu 100% perfekt sein, ich möchte nur die Möglichkeit einer Zeitüberschreitung vermeiden, wenn ich versuche, eine exklusive Sperre zu erhalten.
Zu diesem Zweck habe ich den Code unten geschrieben:
SELECT
*
FROM
sys.db_tran_locks
WHERE
resource_database_id = DB_ID('Test') AND
request_session_id <> @@SPID
Ich gehe davon aus, dass, wenn es 1 oder mehr Zeile zurückgegeben, dann muss die Datenbank im Einsatz sein. Ist das wahr? Oder ist es nicht so einfach?
UPDATE Taking @ gbn Kommentare zu berücksichtigen, habe ich beschlossen, Rollbacks bestehender Verbindungen zu zwingen, die folgende Anweisung:
ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Bevor Sie diesen Code ausgeführt wird, werde ich dem Benutzer die Gelegenheit geben, abmelden Ich möchte jedoch, dass der Benutzer die Liste der aktiven Verbindungen zur Datenbank sehen kann, damit er eine fundierte Entscheidung treffen kann. Was mich zu dieser Frage führt.
In diesem Fall versuche ich festzustellen, ob ich die Datenbank auf eine Verbindung reduzieren kann. Gibt es eine Möglichkeit, den aktuellen Satz von Verbindungen abzufragen? – Mitkins