Supprimer des verrous (lock) actifs d'une base de données Sql Serveur

Souvent quand on essaye de restaurer une base de données, on se retrouve dans la situation où le serveur refuse la restauration parce qu'on a encore de transactions en attente. Même s'il ne s'agit pas de vrai transactions de mise à jour de base. Dans ces cas il faut aller rechercher les verrous et les supprimer un à un. Ca marche si on fait manuellement ce travail.

Mais qu'est ce qui ce passe si on a un serveur de tests qu'on a besoin de raffraichir automatiquement tout les jours avec une sauvegarde base de production ? On peut restaurer manuellement s'il y a des erreurs suite à la restauration. Mieux, on peut rajouter dans le script de restauration avant la restauration effective une suppression des verrous. Ci-dessous un exemple de script :

Use master
go
PRINT 'Supprimer les connexions actives'
declare @databasename nvarchar(100)
declare @sess_id int
declare @kill_session varchar(20)
set @databasename = N'Nom de la base de données'
DECLARE session_id_cursor CURSOR FOR
SELECT DISTINCT request_session_id FROM master.sys.dm_tran_locks WHERE resource_type = 'DATABASE' AND resource_database_id =
db_id(@databasename) and request_session_id<>@@spid
OPEN session_id_cursor
FETCH NEXT FROM session_id_cursor INTO @sess_id
WHILE @@FETCH_STATUS = 0
BEGIN
set @kill_session = 'kill '+ convert(varchar(10),@sess_id) + ';'
exec (@kill_session)
print 'Supprimé ' + cast(@sess_id as varchar(10))
FETCH NEXT FROM session_id_cursor
INTO @sess_id
END
CLOSE session_id_cursor
DEALLOCATE session_id_cursor
go
-- suivi par la restauration effective

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Related posts

Add comment


(Will show your Gravatar icon)  

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Live preview

January 6. 2009 02:10