web-dev-qa-db-ja.com

可用性グループデータベースが同期なし/回復保留モードでスタックしている

SQL Server 2014 SP1(12.0.4422.0)インスタンスのストレージをアップグレードしているときに、SQL Serverを再起動した後、2つのデータベースがセカンダリで起動しないという問題が発生しました。新しい(大きい)SSDを取り付け、データファイルを新しいボリュームにコピーしている間、サーバーは数時間オフラインでした。 SQL Serverを再起動すると、2つを除くすべてのデータベースが再び同期を開始しました。他の2つは、SSMSでNot Synchronizing/Recovery Pendingとして表示されました。

SSMS Not Synchronizing / Recovery Pending

以前に同様の 同期しない/リカバリ中 の問題があったため、可用性グループ->可用性データベースセクションでステータスを確認しましたが、赤いXが表示されていました。

Availability Groups, Availability Databases

さらに、データ移動を一時停止しようとすると、エラーメッセージが生成されました。

可用性グループ「SENetwork_AG」の可用性レプリカ「ny-sql03」にあるデータベース「StackExchange.Bycycles.Meta」でのデータ移動の一時停止に失敗しました。 (Microsoft.SqlServer.Smo)

追加情報:Transact-SQLステートメントまたはバッチの実行中に例外が発生しました。 (Microsoft.SqlServer.ConnectionInfo)

ファイル「StackExchange.Bycycles.Meta」にアクセスできません。ファイルにアクセスできないか、メモリまたはディスク領域が不足しています。詳細については、SQL Serverエラーログを参照してください。 (Microsoft SQL Server、エラー:945)

チェックしたところ、ファイルは存在し、権限の問題はありませんでした。管理下のSSMSでSQL Serverログも確認しましたが、保留中の回復や2つのデータベースの問題については何も表示されませんでした。

ヘルプを検索したところ、データベースを復元する必要があると 2 異なる articles とわかりました。

データベースがリカバリ保留状態でスタックしているときに、セカンダリでデータレプリケーションを再開する方法はありますか?

12
Greg Bray

サーバーがしばらくオフラインだったので、プライマリのリカバリウィンドウの外に出た可能性があると考えました。データベースで 最新のトランザクションログを適用する を試して、回復プロセスが開始されるかどうかを確認することにしました。

-- Remove database from Availability Group:    
Alter Database [StackExchange.Bicycles.Meta] SET HADR OFF;

-- Apply t-logs to catch up. This can be done manually in SSMS or via:
RESTORE LOG [StackExchange.Bicycles.Meta] FROM DISK = '\\ny-back01\backups\SQL\_Trans\SENetwork_AG\StackExchange.Bicycles.Meta\StackExchange.Bicycles.Meta_LOG_20160217_033201.trn' WITH NORECOVERY;

-- Re-join database to availability group
ALTER DATABASE [StackExchange.Bicycles.Meta] SET HADR AVAILABILITY GROUP = [SENetwork_AG];
ALTER DATABASE [StackExchange.Bicycles.Meta] SET HADR RESUME;

両方のデータベースのセカンダリサーバーで上記を実行した後、再度同期を開始できました。

更新: Manual AG Failover の後、新しいプライマリレプリカ上のデータベースの1つが動かなくなったモード(SQL Serverの再起動後にNot Synchronizing/Recovery Pendingに切り替えられます)、および上記の手順はその問題を解決するためにも機能しました。

16
Greg Bray

AAGからDBを削除し、プライマリノードで完全バックアップとトランザクションバックアップを作成し、これら2つのバックアップをセカンダリノードのDBに復元してから、DBをAAGに再度追加します。現時点では、セカンダリノードDBが同期していないことを示している可能性がありますが、2番目の回答(ペナルティが課された方法を購入する-2)で提案されていることを実行しているだけです。つまり、セカンダリノードをプライマリに移動すると、修正されます。

1
Raul Echevarria

次回は、プライマリを「同期していない」セカンダリにフェイルオーバーして、もう一度戻します。セカンダリは今同期する必要があります。

0
user189125