Always On 可用性グループに対するセカンダリ データベースの準備Prepare a secondary database for an Always On availability group

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

このトピックでは、SQL Server Management StudioSQL Server Management StudioTransact-SQLTransact-SQL、または PowerShell を使用して、SQL ServerSQL Server で AlwaysOn 可用性グループのデータベースを準備する方法について説明します。This topic describes how to prepare a database for an Always On availability group in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or PowerShell. データベースの準備には、2 つの手順が必要です。Preparing a database requires two steps:

  1. RESTORE WITH NORECOVERY を使用して、セカンダリ レプリカをホストする各サーバー インスタンスに、プライマリ データベースの最新のデータベース バックアップと以降のログ バックアップを復元します。Restore a recent database backup of the primary database and subsequent log backups onto each server instance that hosts the secondary replica, using RESTORE WITH NORECOVERY
  2. 復元したデータベースを可用性グループに参加させます。Join the restored database to the availability group.

ヒント

既存のログ配布構成がある場合は、ログ配布プライマリ データベースとその 1 つ以上のセカンダリ データベースを、可用性グループ プライマリ レプリカと 1 つ以上のセカンダリ レプリカに変換できる場合があります。If you have an existing log shipping configuration, you might be able to convert the log shipping primary database along with one or more of its secondary databases to an availability group primary replica and one or more secondary replicas. 詳細については、「Always On 可用性グループにログ配布を移行する前提条件」を参照してください。For more information, see Prerequisites for migrating from log Shipping to Always On Availability Groups (SQL Server).

前提条件と制限Prerequisites and restrictions

  • データベースを配置するシステムのディスク ドライブに、セカンダリ データベース用に十分な空き領域があることを確認します。Make sure that the system where you plan to place database possesses a disk drive with sufficient space for the secondary databases.

  • セカンダリ データベースの名前は、プライマリ データベースの名前と同じである必要があります。The name of the secondary database must be the same as the name of the primary database.

  • すべて復元操作に RESTORE WITH NORECOVERY を使用します。Use RESTORE WITH NORECOVERY for every restore operation.

  • セカンダリ データベースをプライマリ データベースとは異なるファイル パス (ドライブ文字を含む) に配置する必要がある場合は、復元コマンドでデータベース ファイルごとに WITH MOVE オプションも使用して、それらのファイルをセカンダリ データベースのパスに指定する必要があります。If the secondary database needs to reside on a different file path (including the drive letter) than the primary database, the restore command must also use the WITH MOVE option for each of the database files to specify them to the path of the secondary database.

  • データベースのファイル グループをファイル グループごとに復元する場合は、必ずデータベース全体を復元してください。If you restore the database filegroup by filegroup, be sure to restore the whole database.

  • データベースの復元後、復元された最後のデータ バックアップの後に作成されたすべてのログ バックアップを復元する必要があります (WITH NORECOVERY)。After restoring the database, you must restore (WITH NORECOVERY) every log backup created since the last restored data backup.

推奨事項Recommendations

  • SQL ServerSQL Serverのスタンドアロン インスタンスでは、可能であれば、特定のセカンダリ データベースのファイル パス (ドライブ文字を含む) は、対応するプライマリ データベースのパスと一致させることをお勧めします。On stand-alone instances of SQL ServerSQL Server, we recommend that, if possible, the file path (including the drive letter) of a given secondary database be identical to the path of the corresponding primary database. セカンダリ データベースの作成時にデータベース ファイルを移動し、その後でセカンダリ データベースにファイルを追加しようとした場合、ファイルの追加操作が失敗し、セカンダリ データベースが中断される可能性があるためです。This is because if you move the database files when creating a secondary database, a later add-file operation might fail on the secondary database and cause the secondary database to be suspended.

  • セカンダリ データベースを準備する場合は、セカンダリ レプリカの初期化が完了するまでの間、可用性グループ内のデータベースでスケジュールされているログ パックアップを一時停止することを強くお勧めします。Before preparing your secondary databases, we strongly recommend that you suspend scheduled log backups on the databases in the availability group until the initialization of secondary replicas has completed.

セキュリティSecurity

データベースをバックアップするときに、 TRUSTWORTHY データベース プロパティ は OFF に設定されます。When a database is backed up, the TRUSTWORTHY database property is set to OFF. したがって、新たに復元されたデータベースでは TRUSTWORTHY は常に OFF です。Therefore, TRUSTWORTHY is always OFF on a newly restored database.

PermissionsPermissions

BACKUP DATABASE 権限と BACKUP LOG 権限は、既定では、 sysadmin 固定サーバー ロール、 db_owner 固定データベース ロール、および db_backupoperator 固定データベース ロールのメンバーに与えられています。BACKUP DATABASE and BACKUP LOG permissions default to members of the sysadmin fixed server role and the db_owner and db_backupoperator fixed database roles. 詳細については、「 BACKUP (Transact-SQL)」を参照してください。For more information, see BACKUP (Transact-SQL).

復元するデータベースがサーバー インスタンスに存在しない場合、RESTORE ステートメントに CREATE DATABASE 権限が必要です。When the database being restored does not exist on the server instance, the RESTORE statement requires CREATE DATABASE permissions. 詳細については、「 RESTORE (Transact-SQL)で復元することはできません。For more information, see RESTORE (Transact-SQL).

SQL Server Management Studio の使用Use SQL Server Management Studio

注意

バックアップ ファイルと復元ファイルのパスが、プライマリ レプリカをホストするサーバー インスタンスとセカンダリ レプリカをホストする各インスタンスとで同じ場合は、新しい可用性グループ ウィザード可用性グループへのレプリカ追加ウィザード、または可用性グループへのデータベース追加ウィザードを使用して、セカンダリ レプリカ データベースを作成できます。If the backup and restore file paths are identical between the server instance that hosts the primary replica and every instance that hosts a secondary replica, you should be able create secondary replica databases by with New Availability Group Wizard, Add Replica to Availability Group Wizard, or Add Database to Availability Group Wizard.

セカンダリ データベースを準備するにはTo prepare a secondary database

  1. プライマリ データベースの最新のバックアップがない場合は、データベースの新しい完全バックアップか差分バックアップを作成してください。Unless you already have a recent database backup of the primary database, create a new full or differential database backup. このバックアップとそれ以降のすべてのログ バックアップは、推奨されるネットワーク共有に配置することをお勧めします。As a best practice, place this backup and any subsequent log backups onto the recommended network share.

  2. プライマリ データベースの新しいログ バックアップを 1 つ以上作成します。Create at least one new log backup of the primary database.

注意

プライマリ レプリカのデータベースでトランザクション ログ バックアップがまだキャプチャされていない場合は、トランザクション ログ バックアップが不要な可能性があります。A transaction log backup may not be required if a transaction log backup has not been previously captured on the database in the primary replica. Microsoft では、可用性グループに新しいデータベースを追加するたびにトランザクション ログ バックアップを実行することをお勧めします。Microsoft recommends taking a transaction log backup each time a new database is joined to the availability group.

  1. セカンダリ レプリカをホストするサーバー インスタンスで、プライマリ データベースの完全バックアップ (および必要に応じて差分バックアップ)、それ以降のすべてのログ バックアップの順で復元します。On the server instance that hosts the secondary replica, restore the full database backup of the primary database (and optionally a differential backup) followed by any subsequent log backups.

    [データベースの復元] の [オプション] ページで、 [データベースは操作不可状態のままで、コミットされていないトランザクションはロールバックしない。別のトランザクション ログは復元できます] (RESTORE WITH NORECOVERY) を選択します。On the RESTORE DATABASE Options page, select Leave the database non-operational, and do not roll back the uncommitted transactions. Additional transaction logs can be restored. (RESTORE WITH NORECOVERY).

    プライマリ データベースとセカンダリ データベースのファイル パスが異なる場合、たとえばプライマリ データベースはドライブ "F:" にあり、セカンダリ レプリカをホストするサーバー インスタンスに F: ドライブがない場合は、WITH 句に MOVE オプションを含めてください。If the file paths of the primary database and the secondary database differ, for example, if the primary database is on drive 'F:' but the server instance that hosts the secondary replica lacks an F: drive, include the MOVE option in your WITH clause.

  2. セカンダリ データベースの構成を完了するには、セカンダリ データベースを可用性グループに参加させる必要があります。To complete configuration of the secondary database, you need to join the secondary database to the availability group. 詳細については、「可用性グループへのセカンダリ データベースの参加 (SQL Server)」を参照してください。For more information, Join a Secondary Database to an Availability Group (SQL Server).

注意

これらのバックアップ操作および復元操作の実行方法については、このセクションの「 関連するバックアップおよび復元のタスク」を参照してください。For information about how to perform these backup and restore operations, see Related Backup and Restore Tasks, later in this section.

関連するバックアップおよび復元のタスクRelated Backup and Restore Tasks

データベースのバックアップを作成するにはTo create a database backup

ログ バックアップを作成するにはTo create a log backup

バックアップを復元するにはTo restore backups

Transact-SQL の使用Using Transact-SQL

セカンダリ データベースを準備するにはTo prepare a secondary database

注意

この手順の例については、このトピックの「 例 (Transact-SQL)」を参照してください。For an example of this procedure, see Example (Transact-SQL), earlier in this topic.

  1. プライマリ データベースの最新の完全バックアップがない場合は、プライマリ レプリカをホストするサーバー インスタンスに接続し、データベースの完全バックアップを作成してください。Unless you have a recent full backup of the primary database, connect to the server instance that hosts the primary replica and create a full database backup. このバックアップとそれ以降のすべてのログ バックアップは、推奨されるネットワーク共有に配置することをお勧めします。As a best practice, place this backup and any subsequent log backups onto the recommended network share.

  2. セカンダリ レプリカをホストするサーバー インスタンスで、プライマリ データベースの完全バックアップ (および必要に応じて差分バックアップ)、それ以降のすべてのログ バックアップの順で復元します。On the server instance that hosts the secondary replica, restore the full database backup of the primary database (and optionally a differential backup) followed by all subsequent log backups. すべて復元操作に WITH NORECOVERY を使用します。Use WITH NORECOVERY for every restore operation.

    プライマリ データベースとセカンダリ データベースのファイル パスが異なる場合、たとえばプライマリ データベースはドライブ "F:" にあり、セカンダリ レプリカをホストするサーバー インスタンスに F: ドライブがない場合は、WITH 句に MOVE オプションを含めてください。If the file paths of the primary database and the secondary database differ, for example, if the primary database is on drive 'F:' but the server instance that hosts the secondary replica lacks an F: drive, include the MOVE option in your WITH clause.

  3. 必要なログ バックアップ以降にプライマリ データベースのログ バックアップを作成した場合は、それらのログ バックアップもセカンダリ レプリカをホストするサーバー インスタンスにコピーして、各ログ バックアップをセカンダリ データベースに適用する必要があります。その際には古いものから順に適用し、毎回 RESTORE WITH NORECOVERY を使用します。If any log backups have been taken on the primary database since the required log backup, you must also copy these to the server instance that hosts the secondary replica and apply each of those log backups to the secondary database, starting with the earliest and always using RESTORE WITH NORECOVERY.

    注意

    プライマリ データベースを作成したばかりでログ バックアップがまだ作成されていない場合や、復旧モデルを単純から完全に変更したばかりの場合には、ログ バックアップが存在しない可能性があります。A log backup would not exist if the primary database has just been created and no log backup has been taken yet or if the recovery model has just been changed from simple to full.

  4. セカンダリ データベースの構成を完了するには、セカンダリ データベースを可用性グループに参加させる必要があります。To complete configuration of the secondary database, you need to join the secondary database to the availability group. 詳細については、「可用性グループへのセカンダリ データベースの参加 (SQL Server)」を参照してください。For more information, Join a Secondary Database to an Availability Group (SQL Server).

注意

これらのバックアップ操作および復元操作の実行方法については、このトピックの「 関連するバックアップおよび復元のタスク」を参照してください。For information about how to perform these backup and restore operations, see Related Backup and Restore Tasks, later in this topic.

Transact-SQL の例Transact-SQL Example

次の例では、セカンダリ データベースを準備します。The following example prepares a secondary database. この例では、既定で単純復旧モデルを使用する AdventureWorks2012AdventureWorks2012 サンプル データベースを使用します。This example uses the AdventureWorks2012AdventureWorks2012 sample database, which uses the simple recovery model by default.

  1. AdventureWorks2012AdventureWorks2012 データベースを使用するには、完全復旧モデルが使用されるように変更します。To use the AdventureWorks2012AdventureWorks2012 database, modify it to use the full recovery model:

    USE master;  
    GO  
    ALTER DATABASE MyDB1   
    SET RECOVERY FULL;  
    GO  
    
  2. データベースの復旧モデルを SIMPLE から FULL に変更した後は、完全バックアップを作成します。作成した完全バックアップはセカンダリ データベースの作成に使用できます。After modifying the recovery model of the database from SIMPLE to FULL, create a full backup, which can be used to create the secondary database. 復旧モデルを変更した直後なので、新しいメディア セットを作成するには WITH FORMAT オプションを指定します。Because the recovery model has just been changed, the WITH FORMAT option is specified to create a new media set. これにより、完全復旧モデルのバックアップを、単純復旧モデルで作成された以前のバックアップと分離できます。This is useful to separate the backups under the full recovery model from any previous backups made under the simple recovery model. この例では、バックアップ ファイル (C:\AdventureWorks2012AdventureWorks2012.bak) をデータベースと同じドライブに作成します。For the purpose of this example, the backup file (C:\AdventureWorks2012AdventureWorks2012.bak) is created on the same drive as the database.

    注意

    運用データベースを使用する場合は、必ず別のデバイスにバックアップしてください。For a production database, you should always back up to a separate device.

    プライマリ レプリカをホストするサーバー インスタンス (INSTANCE01) 上で、次のとおりプライマリ データベースの完全バックアップを作成します。On the server instance that hosts the primary replica (INSTANCE01), create a full backup of the primary database as follows:

    BACKUP DATABASE MyDB1   
        TO DISK = 'C:\MyDB1.bak'   
        WITH FORMAT  
    GO  
    
  3. セカンダリ レプリカをホストするサーバー インスタンスに完全バックアップをコピーします。Copy the full backup to the server instance that hosts the secondary replica.

  4. RESTORE WITH NORECOVERY を使用して、セカンダリ レプリカをホストするサーバー インスタンスに完全バックアップを復元します。Restore the full backup, using RESTORE WITH NORECOVERY, onto the server instance that hosts the secondary replica. 復元コマンドは、プライマリ データベースとセカンダリ データベースのパスが同じかどうかによって変わります。The restore command depends on whether the paths of primary and secondary databases are identical.

    • パスが同じ場合は、次のようにします。If the paths are identical:

      セカンダリ レプリカをホストするコンピューターで、次のとおり完全バックアップを復元します。On the computer that hosts the secondary replica, restore the full backup as follows:

      RESTORE DATABASE MyDB1   
          FROM DISK = 'C:\MyDB1.bak'   
          WITH NORECOVERY  
      GO  
      
    • パスが異なる場合は、次のようにします。If the paths differ:

      セカンダリ データベースのパスがプライマリ データベースのパスと異なる (たとえば、ドライブ文字が異なる) 場合、セカンダリ データベースを作成するには、復元操作に MOVE 句が必要です。If the path of the secondary database differs from the path of the primary database (for instance, their drive letters differ), creating the secondary database requires that the restore operation include a MOVE clause.

      重要

      プライマリ データベースとセカンダリ データベースのパス名が異なる場合は、ファイルを追加することはできません。If the path names of the primary and secondary databases differ, you cannot add a file. ファイル追加操作のログの受信時に、セカンダリ レプリカのサーバー インスタンスがプライマリ データベースで使用されるのと同じパスに新しいファイルを配置しようとするためです。This is because on receiving the log for the add file operation, the server instance of the secondary replica attempts to place the new file in the same path as used by the primary database.

      たとえば、次のコマンドは、既定の SQL Server 2017SQL Server 2017インスタンスのデータ ディレクトリ (C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA) に存在するプライマリ データベースのバックアップを復元します。For example, the following command restores a backup of a primary database that resides in the data directory of the default instance of SQL Server 2017SQL Server 2017, C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA. データベースの復元操作では、別のクラスター ノードのセカンダリ レプリカをホストする、( SQL Server 2017SQL Server 2017 AlwaysOn1 ) というのリモート インスタンスのデータ ディレクトリにデータベースを移動する必要があります。The restore database operation must move the database to the data directory of a remote instance of SQL Server 2017SQL Server 2017 named (Always On1), which hosts the secondary replica on another cluster node. そこで、データおよびログ ファイルが C:\Program Files\Microsoft SQL Server\MSSQL13.Always On1\MSSQL\DATA ディレクトリに復元されます。There, the data and log files are restored to the C:\Program Files\Microsoft SQL Server\MSSQL13.Always On1\MSSQL\DATA directory . この復元操作では WITH NORECOVERY を使用してセカンダリ データベースを復元するデータベースに残します。The restore operation uses WITH NORECOVERY, to leave the secondary database in the restoring database.

      RESTORE DATABASE MyDB1  
        FROM DISK='C:\MyDB1.bak'  
       WITH NORECOVERY,   
          MOVE 'MyDB1_Data' TO   
           'C:\Program Files\Microsoft SQL Server\MSSQL13.Always On1\MSSQL\DATA\MyDB1_Data.mdf',   
          MOVE 'MyDB1_Log' TO  
           'C:\Program Files\Microsoft SQL Server\MSSQL13.Always On1\MSSQL\DATA\MyDB1_Data.ldf';  
      GO  
      
  5. 完全バックアップを復元した後、プライマリ データベースでログ バックアップを作成する必要があります。After you restore the full backup, you must create a log backup on the primary database. たとえば、次の Transact-SQLTransact-SQL ステートメントは、ログを E:\MyDB1_log.trn というバックアップ ファイルにバックアップします。For example, the following Transact-SQLTransact-SQL statement backs up the log to the a backup file named E:\MyDB1_log.trn:

    BACKUP LOG MyDB1   
      TO DISK = 'E:\MyDB1_log.trn'   
    GO  
    
  6. データベースをセカンダリ レプリカに参加させるには、必要なログ バックアップ (およびそれ以降のすべてのログ バックアップ) を事前に適用する必要があります。Before you can join the database to the secondary replica, you must apply the required log backup (and any subsequent log backups).

    たとえば、次の Transact-SQLTransact-SQL ステートメントは、最初のログを C:\MyDB1.trn から復元します。For example, the following Transact-SQLTransact-SQL statement restores the first log from C:\MyDB1.trn:

    RESTORE LOG MyDB1   
      FROM DISK = 'E:\MyDB1_log.trn'   
        WITH FILE=1, NORECOVERY  
    GO  
    
  7. データベースをセカンダリ レプリカに参加させる前に追加のログ バックアップが行われた場合は、RESTORE WITH NORECOVERY を使用して、それらすべてのログ バックアップもセカンダリ レプリカをホストするサーバー インスタンスに順番に復元する必要があります。If any additional log backups occur before the database joins the secondary replica, you must also restore all of those log backups, in sequence, to the server instance that hosts the secondary replica using RESTORE WITH NORECOVERY.

    たとえば、次の Transact-SQLTransact-SQL ステートメントは、2 つの追加のログを E:\MyDB1_log.trn から復元します。For example, the following Transact-SQLTransact-SQL statement restores two additional logs from E:\MyDB1_log.trn:

    RESTORE LOG MyDB1   
      FROM DISK = 'E:\MyDB1_log.trn'   
        WITH FILE=2, NORECOVERY  
    GO  
    RESTORE LOG MyDB1   
      FROM DISK = 'E:\MyDB1_log.trn'   
        WITH FILE=3, NORECOVERY  
    GO  
    

PowerShell の使用Using PowerShell

セカンダリ データベースを準備するにはTo prepare a secondary database

  1. プライマリ データベースの最新のバックアップを作成する必要がある場合は、プライマリ レプリカがホストされているサーバー インスタンスにディレクトリを変更します (cd)。If you need to create a recent backup of the primary database, change directory (cd) to the server instance that hosts the primary replica.

  2. Backup-SqlDatabase コマンドレットを使用して各バックアップを作成します。Use the Backup-SqlDatabase cmdlet to create each of the backups.

  3. ディレクトリ変更コマンド (cd) を使用して、セカンダリ レプリカがホストされているサーバー インスタンスに移動します。Change directory (cd) to the server instance that hosts the secondary replica.

  4. 各プライマリ データベースのデータベースおよびログ バックアップを復元するには、 restore-SqlDatabase コマンドレットを使用して、 NoRecovery 復元パラメーターを指定します。To restore the database and log backups of each primary database, use the restore-SqlDatabase cmdlet, specifying the NoRecovery restore parameter. プライマリ レプリカをホストするコンピューターとターゲット セカンダリ レプリカをホストするコンピューターとでファイル パスが異なる場合は、 RelocateFile 復元パラメーターも使用します。If the file paths differ between the computers that host the primary replica and the target secondary replica, also use the RelocateFile restore parameter.

    注意

    コマンドレットの構文を表示するには、 PowerShell 環境で Get-Help SQL ServerSQL Server コマンドレットを使用します。To view the syntax of a cmdlet, use the Get-Help cmdlet in the SQL ServerSQL Server PowerShell environment. 詳細については、「 Get Help SQL Server PowerShell」を参照してください。For more information, see Get Help SQL Server PowerShell.

  5. セカンダリ データベースの構成を完了するには、セカンダリ データベースを可用性グループに参加させる必要があります。To complete configuration of the secondary database, you need to join it to the availability group. 詳細については、「可用性グループへのセカンダリ データベースの参加 (SQL Server)」を参照してください。For more information, Join a Secondary Database to an Availability Group (SQL Server).

SQL Server PowerShell プロバイダーを設定して使用するにはTo set up and use the SQL Server PowerShell provider

バックアップと復元のスクリプトとコマンドのサンプルSample backup and restore script and command

次の PowerShell コマンドは、データベースの完全バックアップとトランザクション ログをネットワーク共有にバックアップし、その共有からこれらのバックアップを復元します。The following PowerShell commands back up a full database backup and transaction log to a network share and restore those backups from that share. この例では、データベースの復元先のファイル パスとデータベースがバックアップされたファイル パスが同じであると想定しています。This example assumes that the file path to which the database is restored is the same as the file path on which the database was backed up.

# 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"  
  

次の手順Next steps

セカンダリ データベースの構成を完了するには、新たに復元したデータベースを可用性グループに参加させる必要があります。To complete configuration of the secondary database, join the newly restored database to the availability group. 詳細については、「 可用性グループへのセカンダリ データベースの参加 (SQL Server)のインスタンスに AlwaysOn 可用性グループを作成する方法について説明します。For more information, see Join a Secondary Database to an Availability Group (SQL Server).

参照See also

AlwaysOn 可用性グループの概要 (SQL Server) Overview of Always On Availability Groups (SQL Server)
BACKUP (Transact-SQL) BACKUP (Transact-SQL)
RESTORE の引数 (Transact-SQL) RESTORE Arguments (Transact-SQL)
RESTORE (Transact-SQL) RESTORE (Transact-SQL)
失敗したファイルの追加操作のトラブルシューティング (AlwaysOn 可用性グループ)Troubleshoot a Failed Add-File Operation (Always On Availability Groups)