Dans une instance SQL Server 2008 R2 Deux bases de données (le second étant une restauration/copie du premier) ont été configurées par rapport aux mêmes fichiers .MDF et .LDF.
Comment ira-t-je sur la base de la seconde ou de copier/déplacer les fichiers pour le second sans affecter la première (production!) DB?
Mise à jour: En effet, l'un d'entre eux est en veille/en lecture seule.
Pour une base de données dans SQL Server, il existe un paramètre appelé Auto-Fermer , qui est destiné à minimiser la quantité de ressources utilisée lors de l'exécution de SQL Server, mais aucun utilisateur ne fait activement les choses.
Ce paramètre est activé par défaut dans les instances Express Edition, car ceux-ci fonctionnent généralement sur les postes de travail de développeur où les performances ne sont pas critiques et que les ressources sont nécessaires pour d'autres applications.
Lorsque les ressources sont publiées par cette fonctionnalité, la mise en œuvre comprend la fermeture des poignées de fichier associées aux fichiers de base de données (* .MDF, * .ldf, etc.) sur le disque. Cela signifie que toute autre application peut potentiellement les ouvrir, y compris la même ou une autre instance de SQL Server.
Lors du test de ce scénario, j'ai découvert qu'il n'y a pas de contrainte à l'intérieur du serveur SQL (au moins dans cette version particulière) qui empêche la connexion d'une base de données au même ensemble de fichiers sur disque, tant qu'ils sont lisibles. Bien que ce n'était pas une bonne/sûre, bien sûr, c'est un soulagement de savoir que seule une des bases de données peut être écrite à la fois, car les fichiers seront exclusivement verrouillés par SQL Server lorsque l'une des bases de données est ouverte. . Les autres bases de données (s) ne seront pas accessibles.
Pour annuler la situation:
Détachez la ou les bases de données Vous ne voulez pas. Cela supprime la base de données de l'instance, mais laisse les fichiers sur le disque seul (alors que DROP DATABASE
Supprimez les fichiers sur disque). Il peut être nécessaire de redémarrer l'instance pour l'obtenir pour reconnaître que la base de données que vous souhaitez conserver est accessible.
Désactiver la fermeture automatique de la base de données principale, pour mieux empêcher cela de se produire à nouveau. Vous voudrez peut-être également le désactiver dans la base de données du système modèle (le cas échéant) de nouvelles bases de données n'hérité pas ce paramètre. Pour un système de production, je vous recommande de vous assurer que la fermeture automatique est désactivée sur chaque Base de données; J'aime utiliser la gestion basée sur les politiques pour faire le contrôle périodiquement, mais il y a beaucoup de façons d'y aller.