DBAtlas · Атлас эксплуатации баз данных

Добавление базы в AG (автоматическое заполнение) и мониторинг хода заполнения

SQL ServerAlways On и HA

Команда

-- Prerequisite (primary): FULL recovery and at least one FULL backup
SELECT name, recovery_model_desc FROM sys.databases WHERE name = N'Musteri';
BACKUP DATABASE [Musteri] TO DISK = N'D:\Backup\Musteri_pre_ag.bak' WITH COMPRESSION, CHECKSUM, INIT;

-- 1) Primary: switch the replica to automatic seeding
ALTER AVAILABILITY GROUP [AG_Musteri]
  MODIFY REPLICA ON N'SQL02' WITH (SEEDING_MODE = AUTOMATIC);

-- 2) On each secondary: allow the AG to create databases
ALTER AVAILABILITY GROUP [AG_Musteri] GRANT CREATE ANY DATABASE;

-- 3) Primary: add the database
ALTER AVAILABILITY GROUP [AG_Musteri] ADD DATABASE [Musteri];

-- 4) Progress (primary or secondary):
SELECT local_database_name, role_desc, internal_state_desc,
       transferred_size_bytes / 1048576         AS transferred_mb,
       database_size_bytes / 1048576            AS db_mb,
       transfer_rate_bytes_per_second / 1048576 AS mb_s,
       estimate_time_complete_utc, failure_message
FROM   sys.dm_hadr_physical_seeding_stats;

-- 5) Seeding history and failure reason:
SELECT s.start_time, s.completion_time, adc.database_name, ar.replica_server_name,
       s.current_state, s.failure_state_desc, s.error_code, s.number_of_attempts
FROM   sys.dm_hadr_automatic_seeding s
  JOIN sys.availability_databases_cluster adc ON adc.group_database_id = s.ag_db_id
  JOIN sys.availability_replicas ar           ON ar.replica_id = s.ag_remote_replica_id
ORDER BY s.start_time DESC;

Что делает

Добавляет базу в AG, передавая её на вторичные реплики через конечную точку (VDI) без ручного backup/restore; показывает пропускную способность заполнения, оценку завершения и причину сбоя.

Когда использовать

При добавлении новой базы в AG, добавлении новой реплики или пересоздании сломанной вторичной базы.

Внимание

Заполнение нагружает канал конечной точки до предела и по умолчанию идёт без сжатия; для очень больших баз или слабого WAN ручной backup/restore + JOIN предсказуемее. Журнал первичной реплики во время заполнения не усекается (log_reuse_wait_desc = AVAILABILITY_REPLICA). В 2016 вторичной реплике нужны те же пути папок данных/журнала, что и у первичной; в 2017+, если файлы первичной реплики лежат в путях экземпляра по умолчанию, вторичная использует собственные пути по умолчанию. Для базы с TDE сертификат сначала нужно восстановить на каждой вторичной реплике. Без GRANT CREATE ANY DATABASE на вторичной реплике заполнение остаётся в ожидании.

Открыть в DBAtlas →

Связанные материалы