シングルユーザーモードで安全にデータベースをリストアする。
※用語集
DB:データベース
DBをリストア際、一度に一人だけしかDBにアクセスできないようにすることで、安全にリストアすることができます。
ここではSQL Server 2012での実施方法を記載します。
OracleDBでもシングルユーザーモードが用意されていることは確認しています。
それ以外のDBは確認していません。
1.AUTO_UPDATE_STATISTICS_ASYNC オプションを OFF に設定する。
DBをシングルユーザーモードに設定する前にAUTO_UPDATE_STATISTICS_ASYNC オプションをOFFにする必要があります。
※SQL Server 2012の既定値ではOFFのようです。
このオプションが ON に設定されていると、統計の更新に使用されるバックグラウンド スレッドによってデータベースへの接続が使用されるため、シングル ユーザー モードではデータベースにアクセスできなくなることがあるそうです。
1.1.DBのAUTO_UPDATE_STATISTICS_ASYNCの設定を確認する。
次のクエリで確認できます。
is_auto_update_stats_async_on列にON/OFFの値が入ってきます。
SELECT Name,is_auto_update_stats_async_on
FROM sys.databases
sys.databasesの列はこちらのサイトに記載されています。
http://technet.microsoft.com/ja-jp/library/ms178534.aspx
1.2.DBのAUTO_UPDATE_STATISTICS_ASYNCの設定を変更する。
OFFに設定するクエリです。
ALTER DATABASE <DB名>
SET AUTO_UPDATE_STATISTICS_ASYNC OFF
ONに設定するクエリです。
ALTER DATABASE <DB名>
SET AUTO_UPDATE_STATISTICS_ASYNC ON
ALTER DATABASE SETのオプショはこちらに記載されています。
http://technet.microsoft.com/ja-jp/library/bb522682.aspx
2.対象DBをシングルユーザーモードに変更する。
DB毎にシングルユーザーモードを変更します。
USE master;
GO
ALTER DATABASE <DB名>
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE SETのオプショはこちらに記載されています。
http://technet.microsoft.com/ja-jp/library/bb522682.aspx
3.DBをリストアします。
次のクエリでリストアします。
RESTORE DATABASE <DB名>
FROM DISK= N'<バックアップファイルパス>' WITH REPLACE
RESTORE詳細はここでは記載しませんので、こちらをご参照ください。
http://technet.microsoft.com/ja-jp/library/ms186858.aspx
4.変更した設定を元に戻す。
最後に、変更した設定を元に戻します。
4.1.シングルユーザーモードを元に戻す。
複数のユーザーでDBにサクセス出来るようにするために設定を変更します。
USE master; GO ALTER DATABASE <DB名> SET MULTI_USER; GO
4.2.DBのAUTO_UPDATE_STATISTICS_ASYNCの設定を戻す。
元の設定がOFFだった場合はONに戻します。
ALTER DATABASE <DB名>
SET AUTO_UPDATE_STATISTICS_ASYNC ON
以上、これで安全にリストアできます。
お気づきの点があればコメント頂けると幸いです。