Dans le précédent article, afin de pouvoir bénéficier d’un groupe de disponibilité distribué entre 2 sites, nous avons créé 2 clusters. Chaque cluster, et donc chaque groupe de disponibilité assurait la HA localement sur un site. Le groupe de disponibilité distribué, lui, assurait le Disaster Recovery en cas de perte de l’un des sites.
Pour faire suite, donc à ce première article, je vous propose donc une petite procédure permettant d’ajouter une base dans un groupe de disponibilité local et donc de propager cette base sur le DAG.
Le script est relativement simple. Globalement, l’ajout dans l’AG sur le site principal se fait au travers du Direct Seeding et du ALTER AVAILABILITY GROUP ADD DATABASE.
Mais pour le site secondaire il est nécessaire de procéder à l’initialisation des réplicas (les deux, le primaire et le secondaire) au travers d’un backup/restore. Ensuite, la base rejoint le DAG et l’AG local.
$Database = "NewDB" $tSQL = " CREATE DATABASE [$Database]; " Write-Host $tSQL Invoke-SqlCmd -Query $tSQL -Serverinstance "DC1-SQL1" # because we need to manually deploy the database to secondary site # a regular backup is mandatory $tSQL = " BACKUP DATABASE [$Database] TO DISK = '$Database.bak' WITH INIT,FORMAT; " Write-Host $tSQL Invoke-SqlCmd -Query $tSQL -Serverinstance "DC1-SQL1" $tSQL = " BACKUP LOG [$Database] TO DISK = '$Database.trn' WITH INIT,FORMAT; " Write-Host $tSQL Invoke-SqlCmd -Query $tSQL -Serverinstance "DC1-SQL1" $tSQL = " ALTER AVAILABILITY GROUP [DC1-AG] ADD DATABASE [$Database]; " Write-Host $tSQL Invoke-SqlCmd -Query $tSQL -Serverinstance "DC1-SQL1" Copy-Item E:\MSSQL\Backup\$Database.bak \\DC2-SQL3\E$\MSSQL\Backup\$Database.bak Copy-Item E:\MSSQL\Backup\$Database.trn \\DC2-SQL3\E$\MSSQL\Backup\$Database.trn Copy-Item E:\MSSQL\Backup\$Database.bak \\DC2-SQL4\E$\MSSQL\Backup\$Database.bak Copy-Item E:\MSSQL\Backup\$Database.trn \\DC2-SQL4\E$\MSSQL\Backup\$Database.trn $tSQL = " RESTORE DATABASE [$Database] FROM DISK = '$Database.bak' WITH NORECOVERY; " Write-Host $tSQL Invoke-SqlCmd -Query $tSQL -Serverinstance "DC2-SQL3" Invoke-SqlCmd -Query $tSQL -Serverinstance "DC2-SQL4" $tSQL = " RESTORE LOG [$Database] FROM DISK = '$Database.trn' WITH NORECOVERY; " Write-Host $tSQL Invoke-SqlCmd -Query $tSQL -Serverinstance "DC2-SQL3" Invoke-SqlCmd -Query $tSQL -Serverinstance "DC2-SQL4" $tSQL = " ALTER DATABASE [$Database] SET HADR AVAILABILITY GROUP = [distributedag]; " Write-Host $tSQL Invoke-SqlCmd -Query $tSQL -Serverinstance "DC2-SQL3" $tSQL = " ALTER DATABASE [$Database] SET HADR AVAILABILITY GROUP = [DC2-AG]; " Write-Host $tSQL Invoke-SqlCmd -Query $tSQL -Serverinstance "DC2-SQL4"
Enjoy !