web-dev-qa-db-ja.com

セカンダリWindowsクラスターの分散AlwaysOnグループからデータベースを削除できない

2つのWindowsクラスターに分散AGがあります。

  • Clus01-内部にDBがないAGがセットアップされています(AG1)
  • Clus02-内部にDBがないAGがセットアップされている(AG2)
  • Clus01-AG1(プライマリ)およびAG2(セカンダリ)でDistAGがセットアップされている

我々

  • Clus02をDistAGに参加させました
  • Clus01のAG1にデータベースを追加しました
  • このDBをAG2に復元して復元しました
  • Clus02のAG2にこのDBを追加しました(プライマリとして表示されていますが、実際にはDistAG内でセカンダリです)

Clus02上のDBは期待どおりに機能していました... Clus01上のDBでの更新はDistAGを使用してClus02 DBを更新します。

私たちはしばしばこの環境をライブから更新します(これはプリプロダクションです)。そのため、DBをCLus01に復元する必要があります。

通常のAGの場合、CLUS01からDBを削除し、CLUS01に復元し、バックアップしてCLUS02に復元し、AGに再び参加します。

DistAGの場合、

  1. CLUS02のAG2からDBを削除します。

    ALTER AVAILABILITY GROUP [AG_G2CoreReporting]
    REMOVE DATABASE [Genesis];
    GO
    

    エラーが発生する

    メッセージ41190、レベル16、状態8、行6可用性グループ 'AG2'は、remove-databaseコマンドを処理できませんでした。ローカル可用性レプリカは、コマンドを処理できる状態ではありません。可用性グループがオンラインであり、ローカルの可用性レプリカがプライマリレプリカであることを確認してから、コマンドを再試行してください。

  2. CLUS01のAG1からDBを削除します。 CLUS02上のAG2上のDBが同期しない状態になり、削除できないため(上記と同じエラー)、DBを上から復元できません。

  3. CLUS01で実行して、DistAGのレプリカを削除します。

    ALTER AVAILABILITY GROUP [DistAG]
    REMOVE REPLICA ON N'AG2';
    

    エラーが発生する

    メッセージ15151、レベル16、状態1、行5存在しないか、権限がないため、可用性グループ 'AG2'を変更できません。

DistAG全体を削除して再度セットアップしなくても、DistAGで環境を更新する方法を知っている人はいますか?

4
DJSQL

DistAG全体を削除して再度セットアップしなくても、DistAGで環境を更新する方法を知っている人はいますか?

現在の実装では、削除して再作成するのが最善の策です...ただし、毎日更新する必要がある分散可用性グループ内のデータベースが必要だと主張します。

他の唯一のオプションは、グローバルプライマリからデータベースを削除した後に分散可用性グループをフェイルオーバーして、フォワーダーが新しいグローバルプライマリになるようにすることです。次に、(現在はプライマリ)2番目の可用性グループからデータベースを削除できます。現在のグローバルプライマリへの接続を維持する既存の削除+追加のアプローチとは異なり、接続が強制終了されるため、このアプローチはあまり魅力的ではありません。

2
Sean Gallardy

以下のステートメントを使用して、「DistAG」からデータベースを削除できます。

「DistAG」のプライマリノードで以下のステートメントを実行します。

ALTER DATABASE Genesis SET HADR OFF;

上記のステートメントを実行すると、データベースの状態が復元モードになり、データベースを削除できます。

3
HMB