ALTER DATABASE (Transact-SQL) SET HADR

適用対象:SQL Server

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

Transact-SQL 構文表記規則

構文

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

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

database_name
変更するセカンダリ データベースの名前です。

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

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

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

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

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

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

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

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

    注意

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

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

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

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

重要

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

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

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

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

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

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

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

重要

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

注意

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

詳細については、「可用性データベースの中断 (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)
Always On 可用性グループの概要 (SQL Server)Always On 可用性グループの構成のトラブルシューティング (SQL Server)