J'ai une base de données bloquée en mode de récupération pendant quelques jours déjà. Il y a plusieurs threads à ce sujet, mais les solutions ne fonctionnent pas pour moi.
Voici ce que j'ai déjà essayé:
RESTORE DATABASE [DBNAME] WITH RECOVERY
Error: Exclusive access could not be obtained because the database is in use.
ALTER DATABASE [DBNAME] SET OFFLINE WITH ROLLBACK IMMEDIATE
Error: ALTER DATABASE failed because a lock could not be placed on database 'DBNAME'
I get the same error when trying to set the db to SINGLE_USER
exec sp_who2 --> nothing that contains my database, so nothing that I can kill
(Or I need to look for something else ??)
Je ne peux pas simplement arrêter le service SQL, car il contient trop de bases de données qui ne peuvent pas descendre.
Qui sait ce que je peux faire pour obtenir la base de données du mode de récupération? À la fois l'emplacement principal et miroir est l'état de la base de données "en récupération".
J'ai trouvé un processus dans sp_who2
avec commande DB STARTUP
.
À sys.dm_tran_locks
, Je vois que cette session a un resource_database_id
Pour la base de données qui est en récupération, cela empêche la base de données enfermée. Quelqu'un sait comment résoudre ce problème sans arrêter SQL Server?
Redémarrez le point d'extrémité de la mise en miroir DB:
--To stop
ALTER ENDPOINT<Endpoint Name> STATE=STOPPED
--To start
ALTER ENDPOINT<Endpoint Name> STATE=STARTED
Tech Remarque: S'il existe plusieurs bases de données, pas seulement celle des erreurs, puis arrêtez-vous et démarrez le point d'achat affecte tous les bases de données sur ce point de terminaison. Cela peut causer des problèmes sur un système de production comme SharePoint. Pour corriger, allez à l'autre serveur de base de données en miroir et entrez les mêmes commandes: Alter EndPoint State = stoppé alt AlterPoint State = démarré
Comment trouver le nom du point final? Sélectionnez * à partir de sys.endpoints <- Fonctionne pour SQL 2012 Le nom sera de "Type = 4" pour la mise en miroir.
Je l'ai fait et j'ai attendu.
ALTER DATABASE <datbasename> SET PARTNER OFF;
cela a effectivement fonctionné et je pourrais courir:
RESTORE DATABASE <datbasename> WITH RECOVERY;
Aujourd'hui, j'ai rencontré le même problème. Lors de la configuration de la mise en miroir dans SQL Server 2012, j'ai observé que mon statut de base de données de miroir est en mode de récupération. Ce que j'ai fait est
alter database database_name set partner off
Maintenant, mon statut de base de données de miroir est la restauration du mode.
Après avoir travaillé pour moi sur le serveur principal.
ALTER DATABASE <datbasename> SET PARTNER OFF;
RESTORE DATABASE <datbasename> WITH RECOVERY;
Impossible d'obtenir la base de données de l'état "en récupération" sur la boîte en miroir. Essayé de: déposez la base de données, mettez-la en mode d'urgence le mettre en mode utilisateur unique, mettez-le hors ligne
rien n'a fonctionné, a obtenu les erreurs suivantes:
"Seuls les processus d'utilisateur peuvent être tués. Blah bla" "La base de données est utilisée bla bla"
J'ai arrêté et démarré SQL Server Service et "Mirroring EndPoint" sur l'instance en miroir, mais n'a pas réparer le problème. Montrant toujours la base de données "en récupération" état.
Solution : J'ai arrêté le service SQL Server et supprimé le fichier journal (.ldf) de la base de données. A commencé le service SQL Server et étonnamment travaillé; La base de données était en ligne. J'ai laissé tomber la base de données et la mise en miroir reconfiguré.