Sql-Server

設置 READ_Write 的含義

  • May 8, 2020

我正在尋找更新READ_ONLY數據庫上的幾個使用者。

由於數據庫在全球範圍內 24/7 全天候使用,並且維護視窗剛剛過去,我想在活動較少的時候執行此操作(以便能夠遵守最後期限)。

我目前正在考慮使用:

USE MASTER
GO
ALTER DATABASE SQL SET READ_WRITE
GO
USE SQL
GO
EXEC sp_addrolemember N'db_datareader', N'USER'
GO
USE MASTER
GO
ALTER DATABASE SQL SET READ_ONLY
GO

但是我想:

  1. 保證這不會無限期掛起
  2. 確保在此操作期間不能將任何內容寫入數據庫

由於我無法將這些命令放入事務中,並且我在 DEV 或 STG 環境中沒有方便的應用程序伺服器來預先測試更改,因此是否有任何關於更改read_only單個操作的狀態的文件?(我確實測試了 T-SQL 語句,它們可以工作)

另外,由於這需要對數據庫進行排他鎖,我是否有可能通過我的語句?

我傾向於只是提出這將不得不等到下一個維護視窗期。但我希望這裡有人可以證明我錯了。

您可以將數據庫設置為,SINGLE_USER以便在執行更改時沒有其他會話可以進入。此外,sp_addrolemember已棄用;你應該ALTER ROLE改用。最後,請養成使用語句終止符的習慣。

USE master;
GO

ALTER DATABASE SQL SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE SQL SET READ_WRITE;
GO

USE SQL;
GO

ALTER ROLE db_datareader ADD MEMBER [USER];
GO

USE master;
GO

ALTER DATABASE SQL SET READ_ONLY;
ALTER DATABASE SQL SET MULTI_USER;
GO

引用自:https://dba.stackexchange.com/questions/96209