Как определить состояние базы данных SQL Server только для чтения, используя T-SQL? - PullRequest
27 голосов
/ 28 мая 2010

Мне нужно знать, как опросить Microsoft SQL Server, чтобы узнать, установлена ​​ли для данной базы данных Read-Only или нет.

Возможно ли это с использованием T-SQL?

Ответы [ 4 ]

37 голосов
/ 28 мая 2010

Информация хранится в 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.
17 голосов
/ 21 ноября 2016

Запрос sys.databases для проверки свойства БД только для чтения только даст правильную информацию, если для базы данных явно установлен в режим только для чтения.

Для баз данных, которые находятся на пассивных серверах (например, в вторичных серверах технологии AlwaysOn), даже если базы данных не могут быть записаны, их режим только для чтения в sys.databases все равно будет установлен как False(0).

Следовательно, рекомендуется проверять режим баз данных только для чтения, используя оператор:

SELECT DATABASEPROPERTYEX('MyDBNAme', 'Updateability');
6 голосов
/ 28 мая 2010

Вот команда для отображения или установки этого свойства.

EXEC sp_dboption "AdventureWorks", "read only"

Пример вывода

OptionName CurrentSetting    
read only OFF
5 голосов
/ 15 декабря 2015

Я пытался использовать ответ p.campbell, чтобы проверить, является ли моя БД Azure SQL основной или доступной только для чтения - она ​​не сработала И основная база данных, и возвращенная реплика имели значение 0 в поле is_read_only.

Вот что у меня сработало:

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

Приведенный выше оператор выбора возвращает строку «READ_ONLY» или «READ_WRITE».

...