Share via


ALTER DATABASE SET HADR (Transact-SQL)

このトピックでは、セカンダリ データベースで AlwaysOn 可用性グループ オプションを設定するための ALTER DATABASE 構文について説明します。SET HADR オプションは、ALTER DATABASE ステートメントごとに 1 つだけ指定できます。 これらのオプションは、セカンダリ レプリカ上でのみサポートされます。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

ALTER DATABASE database_name
   SET HADR 
   {
        { AVAILABILITY GROUP = group_name | OFF }
   | { SUSPEND | RESUME }
   }
;

引数

  • database_name
    変更するセカンダリ データベースの名前を指定します。

  • SET HADR
    指定したデータベース上で指定した AlwaysOn 可用性グループ コマンドを実行します。

  • { AVAILABILITY GROUP **=**group_name | OFF }
    次のように、指定した可用性グループから可用性データベースを削除するか、指定した可用性グループに参加させます。

    • group_name
      指定したデータベースをセカンダリ レプリカ上で参加させます。このレプリカは、group_name で指定された可用性グループにコマンドを実行するサーバー インスタンスによってホストされています。

      この操作の前提条件は以下のとおりです。

      • データベースは既にプライマリ レプリカ上の可用性グループに追加されている必要があります。

      • プライマリ レプリカがアクティブになっている必要があります。 非アクティブなプライマリ レプリカのトラブルシューティング方法の詳細については、「AlwaysOn 可用性グループの構成のトラブルシューティング (SQL Server)」を参照してください。

      • プライマリ レプリカがオンラインになっており、セカンダリ レプリカがプライマリ レプリカに接続されている必要があります。

      • セカンダリ データベースは、プライマリ データベースの最新のデータベースとログ バックアップから WITH NORECOVERY を使用して復元されている必要があります。これは、セカンダリ データベースがプライマリ データベースからの遅れを取り戻せるように最新のログ バックアップで終わっている必要があります。

        注意

        データベースを可用性グループに追加するには、プライマリ レプリカをホストするサーバー インスタンスに接続し、ALTER AVAILABILITY GROUP group_name ADD DATABASE database_name ステートメントを使用します。

      詳細については、「可用性グループへのセカンダリ データベースの参加 (SQL Server)」を参照してください。

    • OFF
      指定したセカンダリ データベースを可用性グループから削除します。

      セカンダリ データベースがプライマリ データベースから大幅に遅れており、セカンダリ データベースが遅れを取り戻すまで待てない場合は、セカンダリ データベースを削除することをお勧めします。 セカンダリ データベースを削除した後、最新のログ バックアップで終わる一連のバックアップを、RESTORE … WITH NORECOVERY を使用して復元することで、セカンダリ データベースを更新できます。

      重要な注意事項重要

      可用性グループから可用性データベースを完全に削除するには、プライマリ レプリカをホストするサーバー インスタンスに接続し、ALTER AVAILABILITY GROUP group_name REMOVE DATABASE availability_database_name ステートメントを使用します。 詳細については、「可用性グループからのプライマリ データベースの削除 (SQL Server)」を参照してください。

  • SUSPEND
    セカンダリ データベースでデータ移動を中断します。 SUSPEND コマンドは、対象のデータベースをホストするレプリカによって受け付けられるとすぐに戻りますが、実際にはデータベースの中断が非同期に行われます。

    その影響の範囲は、ALTER DATABASE ステートメントを実行する場所によって異なります。

    • セカンダリ レプリカ上のセカンダリ データベースを中断した場合、ローカルのセカンダリ データベースのみが中断されます。 読み取り可能なセカンダリ上の既存の接続は、引き続き使用できます。 読み取り可能なセカンダリ上で中断されたデータベースに対する新しい接続は、データ移動が再開されるまでは許可されません。

    • プライマリ レプリカ上のデータベースを中断した場合、すべてのセカンダリ レプリカ上の対応するセカンダリ データベースへのデータ移動が中断されます。 読み取り可能なセカンダリ上の既存の接続は引き続き使用でき、新しい接続も可能です。

    • データ移動が強制的な手動フェールオーバーによって中断された場合、新しいセカンダリ レプリカへの接続は、データ移動が中断している間は許可されません。

    セカンダリ レプリカ上のデータベースを中断した場合、データベースとレプリカは同期されなくなり、NOT SYNCHRONIZED とマークされます。

    重要な注意事項重要

    セカンダリ データベースが中断されている間、対応するプライマリ データベースの送信キューが未送信トランザクション ログ レコードに蓄積されます。 セカンダリ レプリカへの接続では、データ移動が中断されたときに使用可能であったデータが返されます。

    注意

    AlwaysOn セカンダリ データベースの中断と再開は、プライマリ データベースの可用性に直接は影響しませんが、セカンダリ データベースの中断から再開までに、プライマリ データベースの冗長性とフェールオーバー機能に影響する場合があります。 ミラーリングの場合はこれと異なり、ミラーリングが再開されるまで、ミラーリングの状態はミラー データベースでもプリンシパル データベースでも中断になります。 AlwaysOn プライマリ データベースを中断すると、対応するすべてのセカンダリ データベースでデータ移動が中断され、そのデータベースの冗長性とフェールオーバー機能はプライマリ データベースが再開されるまで停止されます。

    詳細については、「可用性データベースの中断 (SQL Server)」を参照してください。

  • RESUME
    指定したセカンダリ データベース上で中断されたデータ移動を再開します。 RESUME コマンドは、対象のデータベースをホストするレプリカによって受け付けられるとすぐに戻りますが、実際にはデータベースの再開が非同期に行われます。

    その影響の範囲は、ALTER DATABASE ステートメントを実行する場所によって異なります。

    • セカンダリ レプリカ上のセカンダリ データベースを再開した場合、ローカルのセカンダリ データベースのみが再開されます。 データ移動は、データベースがプライマリ レプリカでも中断されている場合を除き、再開されます。

    • プライマリ レプリカ上のデータベースを再開した場合、対応するセカンダリ データベースがローカルに中断されていないすべてのセカンダリ レプリカへのデータ移動が再開されます。 セカンダリ レプリカ上で個別に中断されたセカンダリ データベースを再開するには、セカンダリ レプリカをホストするサーバー インスタンスに接続し、そこでデータベースを再開します。

      同期コミット モードでは、データベースの状態が SYNCHRONIZING に変わります。 他のデータベースが現在中断されていない場合は、レプリカの状態も SYNCHRONIZING に変わります。

      詳細については、「可用性データベースの再開 (SQL Server)」を参照してください。

データベースの状態

セカンダリ データベースを可用性グループに参加させると、ローカル セカンダリ レプリカのセカンダリ データベースの状態が RESTORING から ONLINE に変わります。 セカンダリ データベースを可用性グループから削除すると、その状態はローカル セカンダリ レプリカによって RESTORING に戻ります。 これにより、プライマリ データベースからの後続のログ バックアップをそのセカンダリ データベースに適用できます。

制限事項

トランザクションとバッチの外で ALTER DATABASE ステートメントを実行します。

セキュリティ

権限

データベースに対する ALTER 権限が必要です。 データベースを可用性グループに参加させるには、db_owner 固定データベース ロールのメンバーシップが必要です。

使用例

次の例では、セカンダリ データベース AccountsDb1 を、AccountsAG 可用性グループのローカル セカンダリ レプリカに参加させます。

ALTER DATABASE AccountsDb1 SET HADR AVAILABILITY GROUP = AccountsAG;
注意

この Transact-SQL ステートメントの実際の使用例については、「可用性グループの作成 (Transact-SQL)」を参照してください。

関連項目

参照

ALTER DATABASE (Transact-SQL)

ALTER AVAILABILITY GROUP (Transact-SQL)

CREATE AVAILABILITY GROUP (Transact-SQL)

概念

AlwaysOn 可用性グループの概要 (SQL Server)

AlwaysOn 可用性グループの構成のトラブルシューティング (SQL Server)