SQL Server 2016 RC0 関連の情報を眺めていて知ったのですが、RC0 では、セカンダリの同期方法として「SEEDING_MODE = AUTOMATIC」という方法が追加されています。
High Availability Enhancements
[RC0] Direct seeding allows a secondary replica to be automatically seeded over the network (rather than manual seeding that requires a physical backup of the target database to be restored on the secondary). Direct seeding is specified by setting SEEDING_MODE=AUTOMATIC in the CREATE AVAILABILITY GROUP (Transact-SQL) or ALTER AVAILABILITY GROUP (Transact-SQL) statements. You must also specify GRANT CREATE ANY DATABASE with ALTER AVAILABILITY GROUP (Transact-SQL) on each secondary replica that is used with direct seeding.
これについて、少しまとめてみたいと思います。
「SEEDING_MODE = AUTOMATIC」ですが、
CREATE AVAILABILITY GROUP (Transact-SQL)
ALTER AVAILABILITY GROUP (Transact-SQL)
で使用できるようになった、レプリカを追加する際の新しいオプションとなります。
構文としては以下のように使用します。
USE [master] GO CREATE AVAILABILITY GROUP [AG01] WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY, DB_FAILOVER = ON, DTC_SUPPORT = NONE) FOR DATABASE [AGDB01] REPLICA ON N'2016RC0-01' WITH (ENDPOINT_URL = N'TCP://2016RC0-01.domain.local:5022', FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, SESSION_TIMEOUT = 10, BACKUP_PRIORITY = 50, PRIMARY_ROLE(ALLOW_CONNECTIONS = ALL), SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)), N'2016RC0-02' WITH (ENDPOINT_URL = N'TCP://2016RC0-02.domain.local:5022',SEEDING_MODE = AUTOMATIC, FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, SESSION_TIMEOUT = 10, BACKUP_PRIORITY = 50, PRIMARY_ROLE(ALLOW_CONNECTIONS = ALL), SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)); GO
SEEDING_MODE はデフォルトでは「MANUAL」が設定されており、この場合は従来までの AlwaysOn と同様の動作となります。
SEEDING_MODE = { AUTOMATIC | MANUAL } Specifies how the secondary replica will be initially seeded.
- AUTOMATIC
Enables direct seeding. This method will seed the secondary replica over the network. This method does not require you to backup and restore a copy of the primary database on the replica.
Note
For direct seeding, you must allow database creation on each secondary replica by calling ALTER AVAILABILITY GROUP with the GRANT CREATE ANY DATABASE option.
- MANUAL
Specifies manual seeding (default). This method requires you to create a backup of the database on the primary replica and manually restore that backup on the secondary replica.
従来までは、AlwaysOn 可用性グループの可用性データベースを、セカンダリで使用する場合、
- プライマリでデータベースバックアップを取得 (初回バックアップ)
- プライマリでデータベースバックアップを取得 (初回同期用のバックアップ。上記のバックアップを利用可能)
- プライマリでログバックアップを取得
- セカンダリでバックアップをリストア
というような流れで作業を実施する必要がありました。
「SEEDING_MODE = MANUAL」を使用する場合は、この流れは変わりません。
AUTOMATIC を使用した場合、以下のような流れで、セカンダリへのデータベースの初期同期を実施することができます。
- プライマリでデータベースバックアップを取得 (初回バックアップ)
- ALTER AVAILABILITY GROUP <可用性グループ名> GRANT CREATE ANY DATABASEを使用して、初回同期を実施
というような形で初回の同期を実施することができます。
私が検証していた限りでは、セカンダリで GRANT を実行する必要がありました。
JOIN と ALTER を連続して実行した場合は、即時に反映されていたのですが、タイミングがずれると ALTER をもう一度実行する必要があったりしました。
セカンダリの構築の新しい手法として覚えておくと良い機能かと。