Je suis actuellement en train de détacher une base de données de développement sur le serveur de production. Comme il s'agit d'un serveur de production, je ne souhaite pas redémarrer le service SQL. C'est le pire des cas.Détacher la base de données/mettre hors ligne échoue
Évidemment, j'ai essayé de le détacher via SSMS. M'a dit qu'il y avait une connexion active et je l'ai déconnecté. En détachant la deuxième fois, il m'a dit que c'était impossible car il était utilisé.
J'ai essayé EXEC sp_detach_db
'DB' sans chance.
J'ai essayé de mettre la base de données hors ligne. Cela a duré environ 15 minutes quand je me suis ennuyé et l'ai éteint.
De toute façon, j'ai tout essayé ... Je me suis assuré que toutes les connexions ont été tuées en utilisant l'indicateur de connexions dans la base de données de détachement en utilisant SSMS.
Les éléments suivants sont retournés 0:
USE master SELECT * FROM sys.sysprocesses OÙ dbid = DB_ID ('DB')
Et ce qui suit est en cours d'exécution pendant 18 minutes maintenant:
ALTER DATABASE DB mis hors ligne avec ROLLBACK IMMEDIATE
J'ai redémarré SMSS régulièrement pendant tout cela pour s'assurer que SSMS n'était pas le coupable en verrouillant quelque chose de manière invisible.
N'y at-il pas un moyen de le forcer? Le schéma de la base de données est quelque chose que j'aime beaucoup, mais les données sont inutilisables.
Espérons qu'il y a une sorte de solution rapide? :)
Le DBA va essayer de réinitialiser le processus ce soir, mais je voudrais savoir le correctif pour cela au cas où.
Thx! Ps: J'utilise DTC ... alors peut-être que cela pourrait expliquer pourquoi ma base de données a été bloquée tout à coup?
modifier:
que je fais maintenant ce qui suit qui se traduit par une exécution infinie de la dernière partie. La première requête renvoie même 0, donc je suppose que l'assassinat des utilisateurs n'aura même pas d'importance.
UTILISATION [maître] GO
SELECT * FROM sys.sysprocesses WHERE dbid = DB_ID ('Base')
aller
DECLARE @return_value int
EXEC = @return_value [dbo].[Usp_KillUsers] @p_DBName = 'Database'
SELECT 'Valeur de retour' = @return_value
GO
ALTER DATABASE SET OFFLINE AVEC ROLLBACK IMMEDIATE
GO
Aussi pour ces tâches, j'aime placer un «maître d'utilisation» explicite au début pour m'assurer que je n'utilise pas le DB que j'essaie de détacher. –
Je suis sûr à 100% que je n'utilise pas la base de données. J'ai vérifié chaque endroit que vous pouvez vérifier pour vous assurer qu'aucune connexion n'est active sur cette base de données. – SpoBo