J'ai besoin de savoir comment interroger un serveur Microsoft SQL, pour voir si une base de données donnée a été définie sur Read-Only
ou pas.
Est-ce possible, en utilisant T-SQL?
Les informations sont stockées dans sys.databases
.
SELECT name, is_read_only
FROM sys.databases
WHERE name = 'MyDBNAme'
GO
--returns 1 in is_read_only when database is set to read-only mode.
L'interrogation de sys.databases
Pour vérifier la propriété en lecture seule d'une base de données niquement donnera les bonnes informations si la base de données a été explicitement définie en mode lecture seule.
Pour les bases de données qui se trouvent dans les serveurs passifs (par exemple, dans les serveurs secondaires de la technologie AlwaysOn), même si les bases de données ne peuvent pas être écrites, leur mode de lecture seule dans sys.databases
Sera toujours défini comme False(0)
.
Par conséquent, il est conseillé de vérifier le mode de lecture seule des bases de données à l'aide de l'instruction:
SELECT DATABASEPROPERTYEX('MyDBNAme', 'Updateability');
Voici une commande pour afficher ou définir cette propriété.
EXEC sp_dboption "AdventureWorks", "read only"
Exemple de sortie
OptionName CurrentSetting
read only OFF
J'essayais d'utiliser la réponse de p.campbell pour vérifier si ma base de données Azure SQL est la principale ou la réplique en lecture seule - cela n'a pas fonctionné. La base de données principale et la réplique renvoyées avaient toutes deux 0 dans le champ is_read_only.
Voici ce qui a fonctionné pour moi:
SELECT DATABASEPROPERTYEX('MyDBNAme', 'Updateability');
l'instruction select ci-dessus renvoie la chaîne 'READ_ONLY' ou 'READ_WRITE'.