可用性データベースの中断 (SQL Server)
適用対象: SQL Server
Always On 可用性グループ で SQL Server Management Studio、 Transact-SQL、または PowerShell を使用して、SQL Server の可用性データベースを中断できます。 中断コマンドは、中断または再開するデータベースをホストするサーバー インスタンス上で実行する必要があります。
中断コマンドの効果は、次のように、中断するのがセカンダリ データベースかプライマリ データベースかによって異なります。
中断されたデータベース | 中断コマンドの影響 |
---|---|
[セカンダリ データベース] | ローカルのセカンダリ データベースのみが中断され、同期の状態は NOT SYNCHRONIZING になります。 他のセカンダリ データベースは影響を受けません。 中断されたデータベースはデータ (ログ レコード) を受信および適用しなくなり、プライマリ データベースと同期されなくなります。 読み取り可能なセカンダリ上の既存の接続は、引き続き使用できます。 読み取り可能なセカンダリ上で中断されたデータベースに対する新しい接続は、データ移動が再開されるまでは許可されません。 この動作は、リスナーおよび読み取り専用ルーティングを使用して接続が開かれている場合にのみ適用されます。 プライマリ データベースは使用可能です。 対応する各セカンダリ データベースを中断した場合、プライマリ データベースは公開された状態で実行されます。 ** 重要 ** セカンダリ データベースが中断されている間、対応するプライマリ データベースの送信キューが未送信トランザクション ログ レコードに蓄積されます。 セカンダリ レプリカへの接続では、データ移動が中断されたときに使用可能であったデータが返されます。 |
プライマリ データベース | プライマリ データベースは、接続されているすべてのセカンダリ データベースへのデータ移動を停止します。 プライマリ データベースは、公開モードで実行を継続します。 クライアントはプライマリ データベースを使用でき、読み取り可能なセカンダリ上の既存の接続は引き続き使用でき、新しい接続も確立できます。 |
注意
Always On セカンダリ データベースの中断が、プライマリ データベースの可用性に直接影響することはありません。 ただし、セカンダリ データベースを中断すると、プライマリ データベースの冗長性とフェールオーバー機能に影響する場合があります。 ミラーリングの場合はこれと異なり、ミラーリングの状態はミラー データベースでもプリンシパル データベースでも中断になります。 Always On プライマリ データベースを中断すると、対応するすべてのセカンダリ データベースでデータ移動が中断され、そのデータベースの冗長性とフェールオーバー機能はプライマリ データベースが再開されるまで停止されます。
作業を開始する準備:
データベースを中断するために使用するもの:
はじめに
制限事項と制約事項
SUSPEND コマンドは、対象のデータベースをホストするレプリカによって受け付けられるとすぐに戻りますが、実際にはデータベースの中断が非同期に行われます。
前提条件
中断するデータベースをホストするサーバー インスタンスに接続している必要があります。 プライマリ データベースとそれに対応するセカンダリ データベースを中断するには、プライマリ レプリカをホストするサーバー インスタンスに接続します。 プライマリ データベースを使用可能な状態で維持したままセカンダリ データベースを中断するには、セカンダリ レプリカに接続します。
推奨事項
ボトルネックの発生中、1 つ以上のセカンダリ データベースを短時間中断すると、プライマリ レプリカのパフォーマンスが一時的に高まる効果が見込めます。 セカンダリ データベースが中断している間、対応するプライマリ データベースのトランザクション ログを切り捨てることはできません。 これにより、プライマリ データベースでログ レコードが蓄積されます。 そのため、中断したセカンダリ データベースをすぐに再開または削除することをお勧めします。 詳細については、このトピックで後述する「補足情報: トランザクション ログがいっぱいになった状態の回避」を参照してください。
セキュリティ
アクセス許可
データベースに対する ALTER 権限が必要です。
可用性グループの ALTER AVAILABILITY GROUP 権限、CONTROL AVAILABILITY GROUP 権限、ALTER ANY AVAILABILITY GROUP 権限、または CONTROL SERVER 権限が必要です。
SQL Server Management Studio を使用する
データベースを中断するには
オブジェクト エクスプローラーで、データベースを中断する可用性レプリカをホストするサーバー インスタンスに接続し、サーバー ツリーを展開します。 詳細については、このトピックの「 前提条件」をご覧ください。
[AlwaysOn 高可用性] ノードと [可用性グループ] ノードを展開します。
可用性グループを展開します。
[可用性データベース] ノードを展開し、データベースを右クリックして、 [データ移動の中断] をクリックします。
[データ移動の中断] ダイアログ ボックスで、 [OK] をクリックします。
オブジェクト エクスプローラーで、データベース アイコンに中断インジケーターが表示され、データベースが中断されていることが示されます。
注意
このレプリカの場所で他のデータベースを中断するには、データベースごとに手順 4. と手順 5. を繰り返します。
Transact-SQL の使用
データベースを中断するには
中断するデータベースのレプリカをホストするサーバー インスタンスに接続します。 詳細については、このトピックの「 前提条件」をご覧ください。
次の ALTER DATABASE ステートメントを使用して、データベースを中断します。
ALTER DATABASE database_name SET HADR SUSPEND;
PowerShell の使用
データベースを中断するには
中断するデータベースのレプリカをホストするサーバー インスタンスに、ディレクトリを変更 (cd) します。 詳細については、このトピックの「 前提条件」をご覧ください。
Suspend-SqlAvailabilityDatabase コマンドレットを使用して可用性グループを中断します。
たとえば、次のコマンドでは、
MyDb3
という名前のサーバー インスタンス上の可用性グループMyAg
に含まれている可用性データベースComputer\Instance
のデータの同期を中断します。Suspend-SqlAvailabilityDatabase ` -Path SQLSERVER:\Sql\Computer\Instance\AvailabilityGroups\MyAg\AvailabilityDatabases\MyDb3
注意
コマンドレットの構文を表示するには、 PowerShell 環境で Get-Help SQL Server コマンドレットを使用します。 詳細については、「 Get Help SQL Server PowerShell」を参照してください。
SQL Server PowerShell プロバイダーを設定して使用するには
補足情報: トランザクション ログがいっぱいになった状態の回避
通常、データベースで自動チェックポイントが実行されている場合は、次のログ バックアップの後、そのチェックポイントまでトランザクション ログが切り捨てられます。 ただし、セカンダリ データベースを中断している間、現在のすべてのログ レコードは、プライマリ データベースでアクティブのままになります。 最大サイズに到達したか、サーバー インスタンスの領域が不足して、トランザクション ログがいっぱいになると、データベースではそれ以上の更新を実行できません。
この問題を回避するには、次のいずれかの操作を実行する必要があります。
プライマリ データベースのログ領域を追加します。
ログがいっぱいになる前に、セカンダリ データベースを再開します。 詳細については、「可用性データベースの再開 (SQL Server)」を参照してください。
セカンダリ データベースを削除します。 詳細については、「可用性グループからのセカンダリ データベースの削除 (SQL Server)」をご覧ください。
満杯になったトランザクション ログのトラブルシューティング