手動シードを使用して分散型可用性グループをセットアップする方法について、順を追って説明します。自動シードを機能させることはできますが、手動でシードしようとすると、フォワーダーのAGにセカンダリデータベースを取得できません。
データベースを通常のAGに追加しようとする前に分散AGをセカンダリに追加すると、次のメッセージが表示されます。
Msg 41190, Level 16, State 7, Line 22
Availability group 'MYDB' failed to process add-database command. The local availability replica is not in a state that could process the command. Verify that the availability group is online and that the local availability replica is the primary replica, then retry the command.
セカンダリでDistributed AGに参加せずに最初にDBを追加しようとすると、プライマリであると見なされるため、次のメッセージが表示されます。
Msg 927, Level 14, State 2, Line 22
Database 'MYDB' cannot be opened. It is in the middle of a restore.
自動シーディングではこれらの問題はありません。すべてが魔法のように機能します。私がオンラインで見つけた例はすべて自動シードを使用しています。
前もって感謝します
DAGに参加する前にデータベースを前方にAGに追加した可能性があるという現在の説明とコメントからのように聞こえます。代わりに、最初にDAGを結合し、、次にデータベースを次の順序で追加します。
たくさんのもの...を仮定すると...
PRIMARY
とFORWARDER
の両方でFORWARDER
AGは空で、シードする準備ができています... あなたはできる... 次のスクリプトはsqlcmd
形式です。
|OLD_AG|
のログバックアップを無効にする(オプション)次の場合は、この手順を無視できます。
現在のプライマリでCREATE
1回、見込みフォワーダーでALTER ... JOIN
。適切なサービスアカウントとして実行し、ユーザーアカウントが所有するアーキテクチャの一部になってしまうことがないようにします。
現在のPRIMARY
...
:connect |OLD_AG|.|DOMAIN|
execute as login = 'sa'
-- double check local replica is manual seeding first
alter availability group [|OLD_AG|]
modify replica on '|THIS_REPLICA|'
with (seeding_mode = manual);
create availability group [|DAG_X|]
with (distributed)
availability group on
'|OLD_AG|' with (
listener_url = 'TCP://|OLD_AG|.|DOMAIN|:|PORT|',
availability_mode = synchronous_commit,
failover_mode = manual,
seeding_mode = manual
),
'|NEW_AG|' with (
listener_url = 'TCP://|NEW_AG|.|DOMAIN|:|PORT|',
availability_mode = synchronous_commit,
failover_mode = manual,
seeding_mode = manual
);
go
将来のFORWARDER
...
:connect |NEW_AG|.|DOMAIN|
execute as login = 'sa'
alter availability group [|DAG_X|]
join availability group on
'|OLD_AG|' with (
listener_url = 'TCP://|OLD_AG|.|DOMAIN|:|PORT|',
availability_mode = synchronous_commit,
failover_mode = manual,
seeding_mode = manual
),
'|NEW_AG|' with (
listener_url = 'TCP://|NEW_AG|.|DOMAIN|:|PORT|',
availability_mode = synchronous_commit,
failover_mode = manual,
seeding_mode = manual
);
go
ご存知ですか copy_only
fullsにログバックアップを追加できます ?ごく最近まで私もしませんでした!ただし、ここでcopy_only
を使用すると、
exec as
...は、このステップに厳密には必要ありません。
:connect |OLD_AG|.|DOMAIN|
backup database DB1 to disk = N'\\my.shared.storage\backups\DB1.bak'
with copy_only, compression;
backup database DB2 to disk = N'\\my.shared.storage\backups\DB2.bak'
with copy_only, compression;
go
もう一度、適切なサービスアカウントとして実行します。
:connect |NEW_AG|.|DOMAIN|
execute as login = 'sa'
restore database DB1 from disk = N'\\my.shared.storage\backups\DB1.bak'
with norecovery;
restore database DB2 from disk = N'\\my.shared.storage\backups\DB2.bak'
with norecovery;
go
Nbd、しかしそれらを今追加します¯\ _(ツ)_ /¯
with norecovery
:connect |NEW_AG|.|DOMAIN|
execute as login = 'sa'
alter database DB1 set hadr availability group = [|NEW_AG|];
alter database DB2 set hadr availability group = [|NEW_AG|];
go
から 分散型可用性グループ
分散型可用性グループは、自動シードを使用して、2番目の可用性グループのプライマリレプリカを初期化するために使用される主な方法として設計されました。
次の場合、2番目の可用性グループのプライマリレプリカでデータベース全体を復元できます。
WITH NORECOVERY
を復元します。SEEDING_MODE set to AUTOMATIC
を使用して2番目の可用性グループを作成します。