web-dev-qa-db-fra.com

Comment détecter un état de lecture seule de la base de données SQL Server à l'aide de T-SQL?

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?

30
Giuseppe

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.
37
p.campbell

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');
18
Masood Hashim

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
6
JohnFx

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'.

5
Rafal Zajac