How to detect a SQL Server database's read-only status using T-SQL?

喜你入骨 提交于 2019-11-29 16:02:52

问题


I need to know how to interrogate a Microsoft SQL Server, to see if a given database has been set to Read-Only or not.

Is that possible, using T-SQL?


回答1:


The information is stored in 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.



回答2:


Querying sys.databases for checking a DB's Read-Only property will only give the right information if the database has been explicitly set to Read-Only mode.

For databases that are in the passive servers (e.g. in AlwaysOn technology Secondary Servers), even though the databases cannot be written into, their Read-Only mode in sys.databases would still be set as False(0).

Hence, it is advisable to check the Read-Only mode of databases using the statement:

SELECT DATABASEPROPERTYEX('MyDBNAme', 'Updateability');



回答3:


Here is a command to display or set this property.

EXEC sp_dboption "AdventureWorks", "read only"

Sample output

OptionName CurrentSetting    
read only OFF



回答4:


I was trying to use the p.campbell's answer to check if my Azure SQL DB is the primary one or the read only replica - it didn't work. Both the primary DB and the replica returned had 0 on the is_read_only field.

Here's what worked for me:

SELECT DATABASEPROPERTYEX('MyDBNAme', 'Updateability'); 

the above select statement returns string 'READ_ONLY' or 'READ_WRITE'.



来源:https://stackoverflow.com/questions/2930251/how-to-detect-a-sql-server-databases-read-only-status-using-t-sql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!