J'ai plusieurs bases de données pour changer de mode de Single-User à Multi-User .
Je peux l'utiliser pour changer une base de données.
USE master; GO ALTER DATABASE CDN_Ceramika SET MULTI_USER; GO
Est-il possible de changer de mode pour quelques bases ou n'importe quelle requête, lorsque le mode sera changé pour Multi-User juste quand un mode est Single-User ?
3 Réponses :
Vous pouvez utiliser la procédure système non documentée sp_msforeachdb:
USE master;
EXEC sys.sp_MSforeachdb 'IF ''?'' NOT IN (''master'',''msdb'',''tempdb'',''model'') BEGIN
ALTER DATABASE ? SET MULTI_USER;
END;';
Dois-je changer quelque chose dans ce code? Je suis novice en SQL. Lorsque j'exécute votre code, j'ai une longue erreur. Exemple ci-dessous: Msg 207, Niveau 16, État 1, Ligne 1 Nom de colonne non valide 'master'. Msg 207, niveau 16, état 1, ligne 1 Nom de colonne non valide «maître». Msg 207, niveau 16, état 1, ligne 1 Nom de colonne non valide «maître». Msg 207, niveau 16, état 1, ligne 1 Nom de colonne non valide «maître». Msg 207, niveau 16, état 1, ligne 1 Nom de colonne non valide 'tempdb'. Msg 207, niveau 16, état 1, ligne 1
J'avais manqué les citations autour du premier ? , @BElluu. Essayez maintenant.
J'ai cette erreur maintenant. Msg 5058, niveau 16, état 5, ligne 2 L'option 'MULTI_USER' ne peut pas être définie dans la base de données 'master'. Msg 5058, niveau 16, état 4, ligne 2 L'option 'MULTI_USER' ne peut pas être définie dans la base de données 'tempdb'.
Typo de tempdb mais aucune idée de la raison pour laquelle vous obtenez l'erreur concernant master . a-t-il changé les autres bases de données? (Cela aurait dû faire, si ce n'était pas le cas, alors quelque chose d'autre sous-jacent ici dont vous ne nous avez pas informés)
@BElluu si vous êtes un débutant ... comment les bases de données se sont-elles retrouvées en mode mono-utilisateur? Y avait-il un problème? Un script de maintenance a mal tourné? Au lieu d'essayer des scripts au hasard, inspectez-les d'abord. Peut-être qu'au lieu d'utiliser sp_MSforeachdb ', vous devriez générer le script ALTER DATABASE pour chaque base de données (par exemple en lisant sys.databases) et l'inspecter avant de l'exécuter
Faites un clic droit sur la base de données que vous souhaitez modifier, puis cliquez sur Propriétés.
Cliquez sur Options et faites défiler vers le bas, puis réglez-le comme vous pouvez le voir ci-dessous:
Cliquez sur OK et il sera défini.
l'affiche indique clairement qu'elle souhaite automatiser toutes les bases de données!
Pourquoi la marque vers le bas? La question a été posée par un novice en SQL, ce que l'utilisateur a admis. Alors je lui ai donné une réponse simple, sans utiliser de script.
Je soupçonne à cause de la raison donnée par Mitch. Si vous avez beaucoup de bases de données, ce serait au mieux fastidieux.
@Birel en plus de l'OP déjà utilise la commande T-SQL ALTER DATABASE produite par cette boîte de dialogue.
Si vous êtes nouveau dans la gestion de base de données, je déconseille d'utiliser sys.sp_MSforeachdb . Bien qu'elle ne soit pas documentée, c'est une fonction très populaire parmi les administrateurs de base de données qui savent et vérifient quatre fois ce qu'ils font. Cet article explique certains des ses pièges.
Il est généralement plus sûr de générer les chaînes de commande que vous souhaitez exécuter avec SQL, de les inspecter, de résoudre les problèmes et d'exécuter le script résultant. Probablement dans une transaction le cas échéant.
Comme le montre l'article, sp_MSforeachdb interroge la table sys.databases . Vous pouvez faire de même, par exemple avec:
select 'ALTER DATABASE [' + name + '] SET MULTI_USER;'
from sys.databases
where name not in ('master','tempdb','model','msdb')
and [user_access_desc] != 'MULTI_USER'
Pour générer ALTER DATABASE pour toutes les bases de données que vous voulez, dont les noms correspondent au WHERE Clause . Vous pouvez également écrire:
select 'ALTER DATABASE [' + name + '] SET MULTI_USER;'
from sys.databases
where name not in ('master','tempdb','model','msdb')
pour exclure les bases de données qui sont déjà en mode multi-utilisateurs