DBAtlas · Atlas de operaciones de bases de datos

Añadir una base de datos a un AG (automatic seeding) y monitorear el progreso del seeding

SQL ServerAlways On y HA

Comando

-- 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;

Qué hace

Añade la base de datos al AG transmitiéndola a los secundarios a través del endpoint (VDI) sin backup/restauración manual; muestra el rendimiento del seeding, la finalización estimada y el motivo de fallo.

Cuándo usarlo

Al añadir una nueva base de datos a un AG, añadir una nueva réplica o reconstruir una base de datos secundaria dañada.

Precaución

El seeding satura el enlace del endpoint y no va comprimido por defecto; para bases de datos muy grandes o una WAN débil, un backup/restauración manual + JOIN es más predecible. El log del primario no se trunca durante el seeding (log_reuse_wait_desc = AVAILABILITY_REPLICA). En 2016 el secundario necesita las mismas rutas de carpetas de datos/log que el primario; en 2017+, si los archivos del primario están en las rutas por defecto de la instancia, el secundario usa sus propias rutas por defecto. Para una base de datos con TDE, el certificado debe restaurarse primero en cada secundario. Sin GRANT CREATE ANY DATABASE en el secundario, el seeding queda pendiente.

Abrir en DBAtlas →

Relacionado