シングルユーザーモードで安全にデータベースをリストアする。

※用語集

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

 

 

以上、これで安全にリストアできます。

お気づきの点があればコメント頂けると幸いです。