システム データベースのリストア手順

みなさん、こんにちは。今回はシステム データベースのリストア手順についてご紹介します。

システム データベースをバックアップからリストアする場合は、まず master データベースからおこないます。その際、 SQL Server は一度シングルインスタンスモードで起動する必要があります。

本手順は SQL Server 2012 を使用して、ユーザー データベースも含めてシステム データベースをバックアップからリストアし、データベース全体をバックアップ取得時点の状態に戻す方法について記載しています。

 

■前提条件   

1. オンライン バックアップ(完全バックアップ)を取得済みであること。

    ※本手順では、バックアップファイルを下記の名前で作成しています。

              ・master  データベース: master.bak

              ・msdb データベース:msdb.bak

              ・model データベース:model.bak

              ・test データベース: test.bak         ※ユーザー データベース

2. インスタンスが起動できる状態であること。

    ※インスタンスが起動できない状態の場合は、master データベースの再構築が必要です。

 

■手順

1. 構成マネージャで、SQL Server サービスが起動していることを確認します。

2. 任意のフォルダに、取得済みのバックアップ ファイルをコピーします。

    ※本手順では、C:\work にバックアップ ファイルをコピーしています。

3. コマンド プロンプトを起動し、下記のコマンドを実行してユーザー データベース (test) をリストアします。

     -------------------------------------------------------------------------------------------------

    C:\> sqlcmd -E -SServerA
    1> RESTORE DATABASE test FROM DISK = 'C:\work\test.bak' WITH REPLACE       
    2> go

    -------------------------------------------------------------------------------------------------

※本手順では、サーバー名を ServerA としています。

※WITH REPLACE オプションをつけて実行することにより、指定したデータベースと同じ名前のデータベースが既に存在していても、データベースとその関連ファイルが作成されます。
その場合、既存のデータベースは削除されます。   

※本手順では、既定のインスタンスに接続しています。名前付きインスタンスの場合は下記のように sqlcmd ユーティリティによる接続時にインスタンス名の指定が必要です。

    ----------------------------------------------------------------------------------------

    C:\> sqlcmd -E -SServerA\instancename

    ----------------------------------------------------------------------------------------

4. 構成マネージャから SQL Server サービスを 停止します。SQL Server Agent サービスなど、SQL Server 関連の他のサービスが起動している場合は、それらのサービスもすべて停止します。

フェールオーバークラスタインスタンスの場合は、ディスク、サーバー名 (IP アドレス、ネットワーク名) リソースはオンラインの状態を保ち、それ以外のリソース (SQL Server, SQL Server Agent など) をオフラインにします。

 

5. コマンド プロンプトを起動し、下記のコマンドを実行して SQL Server をシングルインスタンスモードで起動します。

フェールオーバークラスタインスタンスの場合は、現在クラスタグループを所有しているノード (アクティブノード) で実行します。

 

    -----------------------------------------------------------------------------------------------------------------

    cd C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn 

    sqlservr -m -c

    -----------------------------------------------------------------------------------------------------------------

    ※ 上記のパスは、SQL Server 2012 のデフォルトです。

    ※ -c オプションを使用することにより、 コマンド プロンプトからの SQL Server の起動に要する時間を短縮することができます。

    ※  名前付きインスタンスとして SQL Server 2012 をインストールしている場合は、フォルダー パスの 「MSSQL11.MSSQLSERVER」 を 「MSSQL11.インスタンス名」 へ変更する必要があります。また、下記のように sqlservr  アプリケーションの実行時に -s オプションを使用して、インスタンス名を指定する必要があります。

    -----------------------------------------------------------------------------------------------------------------

    sqlservr -m -sinstancename -c

    -----------------------------------------------------------------------------------------------------------------

     

   

6. もう一つコマンドプロンプトを起動し、下記のコマンドを実行して master データベースをリストアします。

    ※WITH REPLACE  オプションをつけて実行することにより、指定したデータベースと同じ名前のデータベースが既に存在していても、データベースとその関連ファイルが作成されます。
       その場合、既存のデータベースは削除されます。

    ※リストアが成功した場合は、 SQL Server が自動的にシャットダウンされます。

    ----------------------------------------------------------------------------------------------------------------------  

    C:\> sqlcmd -E -SServerA
    1> RESTORE DATABASE master FROM DISK = 'C:\work\master.bak' WITH REPLACE    
    2> go

    ------------------------------------------------------------------------------------------------------------------------ 

7. 構成マネージャから SQL Server サービスを起動します。

    ※SQL Server 関連の他のサービスは、ここではまだ起動しません。

8. コマンド プロンプトを起動し、下記のコマンドを実行して msdb データベースをリストアします。

    ------------------------------------------------------------------------------------------------------------------ 

    C:\> sqlcmd -E -SServerA
1> RESTORE DATABASE msdb FROM DISK = 'C:\work\msdb.bak' WITH REPLACE
2> go

    ------------------------------------------------------------------------------------------------------------------ 

    ※ レプリケーションを利用している場合は、ここで distibution データベースをリストアします。

9. 続けて、下記のコマンドを実行して  model データベースをリストアします。

    -------------------------------------------------------------------------------------------------------------------- 

    1> RESTORE DATABASE model FROM DISK = 'C:\work\model.bak' WITH REPLACE    
    2> go

    -------------------------------------------------------------------------------------------------------------------- 

10. 構成マネージャから SQL Server サービスを再起動します。

11. 構成マネージャから SQL Server Agent サービスなど、SQL Server 関連の他のサービスを起動します。

 

 ※tempdb データベースは自動的に再構築されるので、復元は不要です。

 

以上で、システム データベースとユーザー データベースの復元は完了です。データベースはバックアップ取得時点の状態に戻っています。

 

<参考情報>
 https://msdn.microsoft.com/ja-jp/library/ms190679(v=sql.105).aspx
  master データベースを復元する方法 (Transact-SQL)