DBを読み取り専用にする時の動作
Webサイトメンテナンスの時など、ユーザに一時的にデータ更新をさせず、コンテンツだけは表示できるようにしたいとき、DBを読み取り専用にします。
メンテナンスモードとして実装する設定方法と、設定変更時の動作について、個々のクエリ情報はあっても、運用でセットするための情報がなかなか見つからなかったので、備忘録として残します。
●実行するクエリ
データベースの状態を変更するときは、データベースに対して接続されているアクセスを切断して編集中のトランザクションをロールバックし、読み取り専用の状態に設定変更した後、接続可能な設定に戻します。
クエリは次の通り
USE master;
GO
ALTER DATABASE <データベース名>
SET SINGLE_USERWITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE <データベース名>
SET READ_ONLY ※更新可に戻すときは「READ_WRITE」
GO
ALTER DATABASE <データベース名>SET MULTI_USER;
GO
※注:読み取り専用にするクエリ(
ALTER DATABASE <データベース名>
SET READ_ONLY ※更新可に戻すときは「READ_WRITE」)だけ実行してもエラーにはならず、クエリが完了しない状態になる
●定期的に実行する
定期的なメンテナンススケジュールに合わせて設定変更するには、次のようにSQL Management Studioの管理ツールにプランを作成します。
●手動での実行
イレギュラーで設定変更が必要になった場合は、次の通り、SQL Management Studioでデータベースのプロパティを変更するか、上記クエリを直接実行する。
- SQL Management Studioを起動
- 対象のデータベースのプロパティを開く
- 左ペインで「オプション」を選択
- 「状態」カテゴリで「読み取り専用」の設定を「True」に変更
※読み取り専用を解除する時は「False」
- 設定変更とデータベースへの接続が切断されても良いか、確認のメッセージがポップアップ
- データベース名に「読み取り専用」状態が追加される