PowerShell による Always On 可用性グループの作成

適用対象:SQL Server

このトピックでは、 SQL Serverの Always On 可用性グループを PowerShell コマンドレットで作成および構成する方法について説明します。 可用性グループ は、1 つのまとまりとしてフェールオーバーする一連のユーザー データベースと、フェールオーバーをサポートする一連のフェールオーバー パートナー ( 可用性レプリカ) を定義します。

Note

可用性グループの概要については、「Always On 可用性グループとは (SQL Server)」を参照してください。

Note

PowerShell のコマンドレットの代わりに、可用性グループの作成ウィザードや Transact-SQL を使用する方法もあります。 詳細については、「[新しい可用性グループ] ダイアログ ボックスの使用 (SQL Server Management Studio)」または「可用性グループの作成 (Transact-SQL)」を参照してください。

はじめに

前提条件、制限事項、および推奨事項

  • 可用性グループを作成する前に、 SQL Server の各ホスト インスタンスが、同じ Windows Server Failover Clustering (WSFC) フェールオーバー クラスタリングのそれぞれ異なる WSFC ノードに存在していることを確認します。 また、使用するサーバー インスタンスが、他のサーバー インスタンスの前提条件を満たしていることと、他の Always On 可用性グループの要件がすべて満たされていること、さらに、自分自身も推奨事項を認識していることを確認してください。 詳細については、「Always On 可用性グループの前提条件、制限事項、および推奨事項 (SQL Server)」を参照することを強くお勧めします。

アクセス許可

sysadmin 固定サーバー ロールのメンバーシップと、CREATE AVAILABILITY GROUP サーバー権限、ALTER ANY AVAILABILITY GROUP 権限、CONTROL SERVER 権限のいずれかが必要です。

PowerShell を使用した可用性グループの作成と構成

次の表は、可用性グループの構成に伴う基本的な作業の一覧です。一覧には PowerShell コマンドレットによってサポートされる作業が示されています。 Always On 可用性グループ に関連したこれらの作業は、この表に示されている順に実行する必要があります。

タスク PowerShell コマンドレット (利用可能な場合) または Transact SQL ステートメント タスクを実行する場所
データベース ミラーリング エンドポイントを作成する ( SQL Server インスタンスごとに 1 回) New-SqlHadrEndPoint データベース ミラーリング エンドポイントが欠落している各サーバー インスタンスで実行します。

既存のデータベース ミラーリング エンドポイントに変更を加えるには、Set-SqlHadrEndpoint を使用します。
可用性グループを作成する まず、 New-SqlAvailabilityReplica コマンドレットに -AsTemplate パラメーターを指定し、可用性グループに追加する予定の 2 つの可用性レプリカのそれぞれについて、インメモリの可用性レプリカ オブジェクトを作成します。

次に、 New-SqlAvailabilityGroup コマンドレットを使用し、可用性レプリカ オブジェクトを参照して、可用性グループを作成します。
初期プライマリ レプリカをホストするサーバー インスタンスで実行します。
セカンダリ レプリカを可用性グループに参加させる Join-SqlAvailabilityGroup セカンダリ レプリカをホストする各サーバー インスタンスで実行します。
セカンダリ データベースを準備する Backup-SqlDatabaseRestore-SqlDatabase プライマリ レプリカをホストするサーバー インスタンスでバックアップを作成します。

セカンダリ レプリカをホストする各サーバー インスタンス上で、 NoRecovery 復元パラメーターを使用してバックアップを復元します。 プライマリ レプリカをホストするコンピューターとターゲット セカンダリ レプリカをホストするコンピューターとでファイル パスが異なる場合は、 RelocateFile 復元パラメーターも使用します。
各セカンダリ データベースを可用性グループに参加させてデータ同期を開始する Add-SqlAvailabilityDatabase セカンダリ レプリカをホストする各サーバー インスタンスで実行します。

Note

特定のタスクを実行するには、示されているサーバー インスタンス (1 つまたは複数) にディレクトリを変更します (cd)。

PowerShell の使用

SQL Server PowerShell プロバイダーを設定して使用します。

Note

特定のコマンドレットの構文や例を表示するには、 PowerShell 環境で Get-Help SQL Server コマンドレットを使用します。 詳細については、「 Get Help SQL Server PowerShell」を参照してください。

  1. プライマリ レプリカをホストするサーバー インスタンスにディレクトリを変更 (cd) します。

  2. プライマリ レプリカのインメモリの可用性レプリカ オブジェクトを作成します。

  3. セカンダリ レプリカごとにインメモリの可用性レプリカ オブジェクトを作成します。

  4. 可用性グループを作成します。

    Note

    可用性グループ名の最大文字数は 128 文字です。

  5. 新しいセカンダリ レプリカを、可用性グループに参加させます。可用性グループへのセカンダリ レプリカの参加 (SQL Server) に関する記事を参照してください。

  6. 可用性グループ内の各データベースについて、セカンダリ データベースを作成します。これは、プライマリ データベースの最新のバックアップを、RESTORE WITH NORECOVERY で復元することによって行います。

  7. すべての新しいセカンダリ データベースを、可用性グループに参加させます。可用性グループへのセカンダリ レプリカの参加 (SQL Server) に関する記事を参照してください。

  8. (省略可能) Windows の dir コマンドを使用して、新しい可用性グループの内容を確認します。

Note

複数のサーバー インスタンスの SQL Server サービス アカウントが、それぞれ異なるドメイン ユーザー アカウントで実行されている場合、それぞれのサーバー インスタンス上に、もう一方のサーバー インスタンス用のログインを作成し、そのログインにローカルのデータベース ミラーリング エンドポイントへの CONNECT 権限を付与します。

以下の PowerShell スクリプトは、2 つの可用性レプリカと 1 つの可用性データベースから成る <myAvailabilityGroup> という名前の単純な可用性グループを作成、構成する例です。 この例では、次の処理を実行します。

  1. <myDatabase> とそのトランザクション ログをバックアップします。

  2. <myDatabase> とそのトランザクション ログを -NoRecovery オプションを使用して復元します。

  3. SQL Server のローカル インスタンス (名前は PrimaryComputer\Instance) によってホストされるプライマリ レプリカのメモリ内表現を作成します。

  4. SQL Server のインスタンス (名前は SecondaryComputer\Instance) によってホストされるセカンダリ レプリカのメモリ内表現を作成します。

  5. <myAvailabilityGroup>という名前の可用性グループを作成します。

  6. セカンダリ レプリカを可用性グループに参加させます。

  7. セカンダリ データベースを可用性グループに参加させます。

# Backup my database and its log on the primary  
Backup-SqlDatabase `  
    -Database "<myDatabase>" `  
    -BackupFile "\\share\backups\<myDatabase>.bak" `  
    -ServerInstance "PrimaryComputer\Instance"  
  
Backup-SqlDatabase `  
    -Database "<myDatabase>" `  
    -BackupFile "\\share\backups\<myDatabase>.log" `  
    -ServerInstance "PrimaryComputer\Instance" `  
    -BackupAction Log   
  
# Restore the database and log on the secondary (using NO RECOVERY)  
Restore-SqlDatabase `  
    -Database "<myDatabase>" `  
    -BackupFile "\\share\backups\<myDatabase>.bak" `  
    -ServerInstance "SecondaryComputer\Instance" `  
    -NoRecovery  
  
Restore-SqlDatabase `  
    -Database "<myDatabase>" `  
    -BackupFile "\\share\backups\<myDatabase>.log" `  
    -ServerInstance "SecondaryComputer\Instance" `  
    -RestoreAction Log `  
    -NoRecovery  
  
# Create an in-memory representation of the primary replica.  
$primaryReplica = New-SqlAvailabilityReplica `  
    -Name "PrimaryComputer\Instance" `  
    -EndpointURL "TCP://PrimaryComputer.domain.com:5022" `  
    -AvailabilityMode "SynchronousCommit" `  
    -FailoverMode "Automatic" `  
    -Version 12 `  
    -AsTemplate  
  
# Create an in-memory representation of the secondary replica.  
$secondaryReplica = New-SqlAvailabilityReplica `  
    -Name "SecondaryComputer\Instance" `  
    -EndpointURL "TCP://SecondaryComputer.domain.com:5022" `  
    -AvailabilityMode "SynchronousCommit" `  
    -FailoverMode "Automatic" `  
    -Version 12 `  
    -AsTemplate  
  
# Create the availability group  
New-SqlAvailabilityGroup `  
    -Name "<myAvailabilityGroup>" `  
    -Path "SQLSERVER:\SQL\PrimaryComputer\Instance" `  
    -AvailabilityReplica @($primaryReplica,$secondaryReplica) `  
    -Database "<myDatabase>"  
  
# Join the secondary replica to the availability group.  
Join-SqlAvailabilityGroup -Path "SQLSERVER:\SQL\SecondaryComputer\Instance" -Name "<myAvailabilityGroup>"  
  
# Join the secondary database to the availability group.  
Add-SqlAvailabilityDatabase -Path "SQLSERVER:\SQL\SecondaryComputer\Instance\AvailabilityGroups\<myAvailabilityGroup>" -Database "<myDatabase>"  

Related Tasks

Always On 可用性グループのサーバー インスタンスを構成するには

可用性グループおよびレプリカのプロパティを構成するには

可用性グループの構成を完了するには

別の方法で可用性グループを作成する

Always On 可用性グループの構成のトラブルシューティング方法

関連コンテンツ

参照

データベース ミラーリング エンドポイント (SQL Server)
Always On 可用性グループの概要 (SQL Server)