Est-il nécessaire de mettre la base de données en mode mono-utilisateur avant de restaurer une base de données? Si c'est le cas, lequel est plus préférable de mettre le serveur SQL en mode mono-utilisateur ou de mettre la base de données uniquement en mode mono-utilisateur avant de restaurer! Je vous remercie.
Vous n'auriez besoin de mettre les instances SQL Server en mode mono-utilisateur que si vous restaurez la base de données master
. Pour les bases de données user
, vous devez vous assurer qu'il n'y a pas de connexion active à la base de données que vous restaurez. Vous devez soit déterminer et tuer tout SPID actif (qui ne nécessiterait pas que la base de données soit en mode mono-utilisateur), soit mettre la base de données en mode mono-utilisateur en utilisant l'un des éléments suivants (référençant une publication de Greg Robidoux Obtenir un accès exclusif pour restaurer les bases de données SQL Server :
ALTER DATABASE [Test4] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
OR
ALTER DATABASE [Test4] SET SINGLE_USER WITH ROLLBACK AFTER 30
OR
ALTER DATABASE [Test4] SET SINGLE_USER WITH NO_WAIT
Une fois que la base de données a été mise en mode mono-utilisateur, vous avez un accès exclusif à la base de données et pouvez ensuite effectuer la restauration sans problème.
Remarque: lorsque vous utilisez l'option ROLLBACK, vous annulez toutes les transactions ouvertes qui existent toujours pour la base de données. Le processus de restauration devrait fonctionner sans problème, mais si vous avez des transactions très longues, le processus de restauration pourrait prendre beaucoup de temps, alors soyez conscient de ce qui est en cours d'exécution sur vos systèmes. Pour les systèmes de test et de développement, car vous effectuez une restauration, vous ne vous souciez pas des transactions de toute façon, donc le retour en arrière ne devrait pas être un problème, mais vous devez toujours être conscient que les transactions à long terme peuvent prendre un certain temps à revenir en arrière.
Vous ne pouvez pas restaurer la base de données si vous êtes connecté à cette base de données, vous obtiendrez l'erreur:
RESTORE ne peut pas traiter la base de données 'my_db_name' car elle est utilisée par cette session
Cela signifie que vous devez restaurer la base de données en cours de connexion à une autre base de données, (recommandé) master
.
Mais si vous mettez la base de données dans single_user
(avant la restauration) à partir de master
, il est possible que quelqu'un se connecte à cette base de données entre votre mise à single_user
et restauration.
Pour éviter cette situation, mettez simplement votre base de données offline
et non dans single_user
:
alter database ... set offline with rollback immediate;
restore database ...;