如何使用T-SQL检测SQL Server数据库的只读状态?

Giu*_*ppe 29 t-sql database sql-server readonly

我需要知道如何查询Microsoft SQL Server,以查看是否已设置给定数据库Read-Only.

这是可能的,使用T-SQL?

p.c*_*ell 37

信息存储在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.
Run Code Online (Sandbox Code Playgroud)


小智 21

如果数据库已显式设置为只读模式,则查询sys.databases检查DB的只读属性将提供正确的信息.

对于被动服务器中的数据库(例如,在AlwaysOn技术辅助服务器中),即使无法写入数据库,其只读模式sys.databases仍将设置为False(0).

因此,建议使用以下语句检查数据库的只读模式:

SELECT DATABASEPROPERTYEX('MyDBNAme', 'Updateability');
Run Code Online (Sandbox Code Playgroud)

  • 所以这在 Azure 上运行良好: SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability'); (2认同)

Joh*_*nFx 6

这是一个显示或设置此属性的命令.

EXEC sp_dboption "AdventureWorks", "read only"
Run Code Online (Sandbox Code Playgroud)

样本输出

OptionName CurrentSetting    
read only OFF
Run Code Online (Sandbox Code Playgroud)


Raf*_*jac 5

我试图使用p.campbell的答案来检查我的Azure SQL DB是主要副本还是只读副本-它不起作用。返回的主数据库和副本在is_read_only字段上都为0。

这对我有用:

SELECT DATABASEPROPERTYEX('MyDBNAme', 'Updateability'); 
Run Code Online (Sandbox Code Playgroud)

上面的选择语句返回字符串“ READ_ONLY”或“ READ_WRITE”。