web-dev-qa-db-ja.com

T-SQLを使用してSQL Serverデータベースの読み取り専用ステータスを検出する方法

特定のデータベースがRead-Onlyに設定されているかどうかを確認するために、Microsoft SQL Serverに問い合わせる方法を知る必要があります。

T-SQLを使用してそれは可能ですか?

30
Giuseppe

情報は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

データベースの読み取り専用プロパティをチェックするために_sys.databases_をクエリすると、onlyデータベースがexplicitlyの場合に正しい情報が得られます読み取り専用モードに設定します。

パッシブサーバー(AlwaysOnテクノロジーセカンダリサーバーなど)にあるデータベースの場合、データベースに書き込むことはできませんが、_sys.databases_の読み取り専用モードはFalse(0)として設定されます。

したがって、次のステートメントを使用して、データベースの読み取り専用モードを確認することをお勧めします。

_SELECT DATABASEPROPERTYEX('MyDBNAme', 'Updateability');
_
18
Masood Hashim

このプロパティを表示または設定するための command を次に示します。

EXEC sp_dboption "AdventureWorks", "read only"

出力例

OptionName CurrentSetting    
read only OFF
6
JohnFx

私は、p.campbellの回答を使用して、Azure SQL DBがプライマリデータベースであるか、読み取り専用レプリカであるかを確認しようとしましたが、機能しませんでした。プライマリDBと返されたレプリカの両方のis_read_onlyフィールドに0がありました。

これが私のために働いたものです:

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

上記の選択ステートメントは、文字列「READ_ONLY」または「READ_WRITE」を返します。

5
Rafal Zajac