SQL Server 2016–Ajout d’une base dans un groupe de disponibilité distribué

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 !

A propos Christophe

Consultant SQL Server Formateur certifié Microsoft MVP SQL Server MCM/MCSM SQL Server
Cet article, publié dans SQL Server, est tagué , , , . Ajoutez ce permalien à vos favoris.

Laisser un commentaire