可用性グループに対するセカンダリ データベースの手動準備 (SQL Server)
このトピックでは、SQL Server Management Studio、Transact-SQL、または PowerShell を使用して、SQL Server 2012 で AlwaysOn 可用性グループのセカンダリ データベースを準備する方法について説明します。 セカンダリ データベースを準備するには、2 つの手順を実行する必要があります。まず、RESTORE WITH NORECOVERY を使用して、プライマリ データベースの最新のバックアップとそれ以降のログ バックアップを、セカンダリ レプリカをホストする各サーバー インスタンスに復元します。次に、復元したデータベースを可用性グループに参加させます。
ヒント |
---|
既存のログ配布構成がある場合は、ログ配布プライマリ データベースとその 1 つ以上のセカンダリ データベースを、AlwaysOn プライマリ データベースと 1 つ以上の AlwaysOn セカンダリ データベースに変換できる場合があります。 詳細については、「ログ配布から AlwaysOn 可用性グループへの移行の前提条件 (SQL Server)」を参照してください。 |
作業を開始する準備:
前提条件と制限
推奨事項
セキュリティ
以下を使用してセカンダリ データベースを準備するには:
SQL Server Management Studio
Transact-SQL
PowerShell
関連するバックアップおよび復元のタスク
補足情報: セカンダリ データベースを準備した後
作業を開始する準備
前提条件と制限
データベースを配置するシステムのディスク ドライブに、セカンダリ データベース用に十分な空き領域があることを確認します。
セカンダリ データベースの名前は、プライマリ データベースの名前と同じである必要があります。
すべて復元操作に RESTORE WITH NORECOVERY を使用します。
セカンダリ データベースをプライマリ データベースとは異なるファイル パス (ドライブ文字を含む) に配置する必要がある場合は、復元コマンドでデータベース ファイルごとに WITH MOVE オプションも使用して、それらのファイルをセカンダリ データベースのパスに指定する必要があります。
データベースのファイル グループをファイル グループごとに復元する場合は、必ずデータベース全体を復元してください。
データベースの復元後、復元された最後のデータ バックアップの後に作成されたすべてのログ バックアップを復元する必要があります (WITH NORECOVERY)。
推奨事項
SQL Server のスタンドアロン インスタンスでは、可能であれば、特定のセカンダリ データベースのファイル パス (ドライブ文字を含む) は、対応するプライマリ データベースのパスと一致させることをお勧めします。 セカンダリ データベースの作成時にデータベース ファイルを移動し、その後でセカンダリ データベースにファイルを追加しようとした場合、ファイルの追加操作が失敗し、セカンダリ データベースが中断される可能性があるためです。
セカンダリ データベースを準備する場合は、セカンダリ レプリカの初期化が完了するまでの間、可用性グループ内のデータベースでスケジュールされているログ パックアップを一時停止することを強くお勧めします。
セキュリティ
データベースをバックアップするときに、TRUSTWORTHY データベース プロパティは OFF に設定されます。 したがって、新たに復元されたデータベースでは TRUSTWORTHY は常に OFF です。
権限
BACKUP DATABASE 権限と BACKUP LOG 権限は、既定では、sysadmin 固定サーバー ロール、db_owner 固定データベース ロール、および db_backupoperator 固定データベース ロールのメンバーに与えられています。 詳細については、「BACKUP (Transact-SQL)」を参照してください。
復元するデータベースがサーバー インスタンスに存在しない場合、RESTORE ステートメントに CREATE DATABASE 権限が必要です。 詳細については、「RESTORE (Transact-SQL)」を参照してください。
SQL Server Management Studio の使用
注 |
---|
バックアップ ファイルと復元ファイルのパスが、プライマリ レプリカをホストするサーバー インスタンスと、セカンダリ レプリカをホストする各インスタンスとで同じ場合は、新しい可用性グループ ウィザード、可用性グループへのレプリカ追加ウィザード、または可用性グループへのデータベース追加ウィザードを使用して、セカンダリ データベースを作成できます。 |
セカンダリ データベースを準備するには
プライマリ データベースの最新のバックアップがない場合は、データベースの新しい完全バックアップか差分バックアップを作成してください。 このバックアップとそれ以降のすべてのログ バックアップは、推奨されるネットワーク共有に配置することをお勧めします。
プライマリ データベースの新しいログ バックアップを 1 つ以上作成します。
セカンダリ レプリカをホストするサーバー インスタンスで、プライマリ データベースの完全バックアップ (および必要に応じて差分バックアップ)、それ以降のすべてのログ バックアップの順で復元します。
[データベースの復元] の [オプション] ページで、[データベースは操作不可状態のままで、コミットされていないトランザクションはロールバックしない。別のトランザクション ログは復元できます (RESTORE WITH NORECOVERY)] を選択します。
プライマリ データベースとセカンダリ データベースのファイル パスが異なる場合、たとえばプライマリ データベースはドライブ "F:" にあり、セカンダリ レプリカをホストするサーバー インスタンスに F: ドライブがない場合は、WITH 句に MOVE オプションを含めてください。
セカンダリ データベースの構成を完了するには、セカンダリ データベースを可用性グループに参加させる必要があります。 詳細については、「可用性グループへのセカンダリ データベースの参加 (SQL Server)」を参照してください。
注 |
---|
これらのバックアップ操作および復元操作の実行方法については、このセクションの「関連するバックアップと復元のタスク」を参照してください。 |
関連するバックアップおよび復元のタスク
データベースのバックアップを作成するには
ログ バックアップを作成するには
バックアップを復元するには
[先頭に戻る]
Transact-SQL の使用
セカンダリ データベースを準備するには
注 |
---|
この手順の例については、このトピックの「例 (Transact-SQL)」を参照してください。 |
プライマリ データベースの最新の完全バックアップがない場合は、プライマリ レプリカをホストするサーバー インスタンスに接続し、データベースの完全バックアップを作成してください。 このバックアップとそれ以降のすべてのログ バックアップは、推奨されるネットワーク共有に配置することをお勧めします。
セカンダリ レプリカをホストするサーバー インスタンスで、プライマリ データベースの完全バックアップ (および必要に応じて差分バックアップ)、それ以降のすべてのログ バックアップの順で復元します。 すべて復元操作に WITH NORECOVERY を使用します。
プライマリ データベースとセカンダリ データベースのファイル パスが異なる場合、たとえばプライマリ データベースはドライブ "F:" にあり、セカンダリ レプリカをホストするサーバー インスタンスに F: ドライブがない場合は、WITH 句に MOVE オプションを含めてください。
必要なログ バックアップ以降にプライマリ データベースのログ バックアップを作成した場合は、それらのログ バックアップもセカンダリ レプリカをホストするサーバー インスタンスにコピーして、各ログ バックアップをセカンダリ データベースに適用する必要があります。その際には古いものから順に適用し、毎回 RESTORE WITH NORECOVERY を使用します。
注 プライマリ データベースを作成したばかりでログ バックアップがまだ作成されていない場合や、復旧モデルを単純から完全に変更したばかりの場合には、ログ バックアップが存在しない可能性があります。
セカンダリ データベースの構成を完了するには、セカンダリ データベースを可用性グループに参加させる必要があります。 詳細については、「可用性グループへのセカンダリ データベースの参加 (SQL Server)」を参照してください。
注 |
---|
これらのバックアップ操作および復元操作の実行方法については、このトピックの「関連するバックアップと復元のタスク」を参照してください。 |
Transact-SQL の例
次の例では、セカンダリ データベースを準備します。 この例では、既定で単純復旧モデルを使用する AdventureWorks2012 サンプル データベースを使用します。
AdventureWorks2012 データベースを使用するには、完全復旧モデルが使用されるように変更します。
USE master; GO ALTER DATABASE MyDB1 SET RECOVERY FULL; GO
データベースの復旧モデルを SIMPLE から FULL に変更した後は、完全バックアップを作成します。作成した完全バックアップはセカンダリ データベースの作成に使用できます。 復旧モデルを変更した直後なので、新しいメディア セットを作成するには WITH FORMAT オプションを指定します。 これにより、完全復旧モデルのバックアップを、単純復旧モデルで作成された以前のバックアップと分離できます。 この例では、バックアップ ファイル (C:\ AdventureWorks2012 .bak) をデータベースと同じドライブに作成します。
注 運用データベースを使用する場合は、必ず別のデバイスにバックアップしてください。
プライマリ レプリカをホストするサーバー インスタンス (INSTANCE01) 上で、次のとおりプライマリ データベースの完全バックアップを作成します。
BACKUP DATABASE MyDB1 TO DISK = 'C:\MyDB1.bak' WITH FORMAT GO
セカンダリ レプリカをホストするサーバー インスタンスに完全バックアップをコピーします。
RESTORE WITH NORECOVERY を使用して、セカンダリ レプリカをホストするサーバー インスタンスに完全バックアップを復元します。 復元コマンドは、プライマリ データベースとセカンダリ データベースのパスが同じかどうかによって変わります。
パスが同じ場合は、次のようにします。
セカンダリ レプリカをホストするコンピューターで、次のとおり完全バックアップを復元します。
RESTORE DATABASE MyDB1 FROM DISK = 'C:\MyDB1.bak' WITH NORECOVERY GO
パスが異なる場合は、次のようにします。
セカンダリ データベースのパスがプライマリ データベースのパスと異なる (たとえば、ドライブ文字が異なる) 場合、セカンダリ データベースを作成するには、復元操作に MOVE 句が必要です。
重要 プライマリ データベースとセカンダリ データベースのパス名が異なる場合は、ファイルを追加することはできません。 ファイル追加操作のログの受信時に、セカンダリ レプリカのサーバー インスタンスがプライマリ データベースで使用されるのと同じパスに新しいファイルを配置しようとするためです。
たとえば、次のコマンドは、既定の SQL Server 2012 インスタンスのデータ ディレクトリ (C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA) に存在するプライマリ データベースのバックアップを復元します。 データベースの復元操作では、別のクラスター ノードのセカンダリ レプリカをホストする、AlwaysOn1 という SQL Server 2012 のリモート インスタンスのデータ ディレクトリにデータベースを移動する必要があります。 ここでは、データとログ ファイルが C:\Program Files\Microsoft SQL Server\MSSQL11.ALWAYSON1\MSSQL\DATA ディレクトリに復元されます。 この復元操作では WITH NORECOVERY を使用してセカンダリ データベースを復元するデータベースに残します。
RESTORE DATABASE MyDB1 FROM DISK='C:\MyDB1.bak' WITH NORECOVERY, MOVE 'MyDB1_Data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.ALWAYSON1\MSSQL\DATA\MyDB1_Data.mdf', MOVE 'MyDB1_Log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.ALWAYSON1\MSSQL\DATA\MyDB1_Data.ldf'; GO
完全バックアップを復元した後、プライマリ データベースでログ バックアップを作成する必要があります。 たとえば、次の Transact-SQL ステートメントは、ログを E:\MyDB1_log.bak というバックアップ ファイルにバックアップします。
BACKUP LOG MyDB1 TO DISK = 'E:\MyDB1_log.bak' GO
データベースをセカンダリ レプリカに参加させるには、必要なログ バックアップ (およびそれ以降のすべてのログ バックアップ) を事前に適用する必要があります。
たとえば、次の Transact-SQL ステートメントは、最初のログを C:\MyDB1.bak から復元します。
RESTORE LOG MyDB1 FROM DISK = 'E:\MyDB1_log.bak' WITH FILE=1, NORECOVERY GO
データベースをセカンダリ レプリカに参加させる前に追加のログ バックアップが行われた場合は、RESTORE WITH NORECOVERY を使用して、それらすべてのログ バックアップもセカンダリ レプリカをホストするサーバー インスタンスに順番に復元する必要があります。
たとえば、次の Transact-SQL ステートメントは、2 つの追加のログを E:\MyDB1_log.bak から復元します。
RESTORE LOG MyDB1 FROM DISK = 'E:\MyDB1_log.bak' WITH FILE=2, NORECOVERY GO RESTORE LOG MyDB1 FROM DISK = 'E:\MyDB1_log.bak' WITH FILE=3, NORECOVERY GO
[先頭に戻る]
PowerShell の使用
セカンダリ データベースを準備するには
プライマリ データベースの最新のバックアップを作成する必要がある場合は、プライマリ レプリカをホストするサーバー インスタンスにディレクトリを変更します (cd)。
Backup-SqlDatabase コマンドレットを使用して各バックアップを作成します。
ディレクトリ変更コマンド (cd) を使用して、セカンダリ レプリカをホストするサーバー インスタンスに移動します。
各プライマリ データベースのデータベースおよびログ バックアップを復元するには、restore-SqlDatabase コマンドレットを使用して、NoRecovery 復元パラメーターを指定します。 プライマリ レプリカをホストするコンピューターとターゲット セカンダリ レプリカをホストするコンピューターとでファイル パスが異なる場合は、RelocateFile 復元パラメーターも使用します。
注 コマンドレットの構文を表示するには、SQL Server PowerShell 環境で Get-Help コマンドレットを使用します。 詳細については、「SQL Server PowerShell のヘルプの参照」を参照してください。
セカンダリ データベースの構成を完了するには、セカンダリ データベースを可用性グループに参加させる必要があります。 詳細については、「可用性グループへのセカンダリ データベースの参加 (SQL Server)」を参照してください。
SQL Server PowerShell プロバイダーを設定して使用するには
バックアップと復元のスクリプトとコマンドのサンプル
次の PowerShell コマンドは、データベースの完全バックアップとトランザクション ログをネットワーク共有にバックアップし、その共有からこれらのバックアップを復元します。 この例では、データベースの復元先のファイル パスとデータベースがバックアップされたファイル パスが同じであると想定しています。
# Create database backup
Backup-SqlDatabase -Database "MyDB1" -BackupFile "\\share\backups\MyDB1.bak" -ServerInstance "SourceMachine\Instance"
# Create log backup
Backup-SqlDatabase -Database "MyDB1" -BackupAction "Log" -BackupFile "\\share\backups\MyDB1.trn" -ServerInstance "SourceMachine\Instance"
# Restore database backup
Restore-SqlDatabase -Database "MyDB1" -BackupFile "\\share\backups\MyDB1.bak" -NoRecovery -ServerInstance "DestinationMachine\Instance"
# Restore log backup
Restore-SqlDatabase -Database "MyDB1" -BackupFile "\\share\backups\MyDB1.trn" -RestoreAction "Log" -NoRecovery –ServerInstance "DestinationMachine\Instance"
補足情報: セカンダリ データベースを準備した後
セカンダリ データベースの構成を完了するには、新たに復元したデータベースを可用性グループに参加させる必要があります。 詳細については、「可用性グループへのセカンダリ データベースの参加 (SQL Server)」を参照してください。