Commands / Add-sqmDatabaseToAG
Add-sqmDatabaseToAG
Always On sqmSQLTool v1.8.2+ · Add ✓ -WhatIf supported
Adds one or more databases to an Always On Availability Group using Automatic Seeding. For each database the function: verifies it is not already part of an AG, switches the recovery model to Full if needed, drops any existing copy on secondary replicas, and finally calls Add-DbaAgDatabase -SeedingMode Automatic. When -All is used, databases are added sequentially to avoid simultaneous seeding load.

Prerequisite: Automatic Seeding must already be configured on all replicas. Use Invoke-sqmSqlAlwaysOnAutoseeding if not yet set up.

Parameters

ParameterTypeRequiredDefaultNotes
-SqlInstancestringOptional$env:COMPUTERNAMEPrimary SQL Server instance.
-SqlCredentialPSCredentialOptionalSQL or Windows credential.
-AvailabilityGroupstringRequiredName of the target availability group.
-Databasestring[]OptionalOne or more database names. ParameterSet: Specific. Ignored when -All is set.
-AllswitchSwitch$falseAdd all accessible user databases not yet in any AG. ParameterSet: All.
-EnableExceptionswitchSwitch$falseThrow on error instead of logging and continuing.
-WhatIf / -ConfirmswitchOptionalStandard PowerShell ShouldProcess support. All three state-changing operations (RecoveryModel, Drop, Add) are individually gated.

Execution Flow

START dbatools installed? NO throw: dbatools not found YES -SqlInstance provided? NO → Default: $env:COMPUTERNAME Validate AG & collect replicas Get-DbaAvailabilityGroup → not found: throw · Get-DbaAgReplica → secondary instance names Determine database list -All: Get-DbaDatabase (user, accessible) → exclude those already in any AG (Get-DbaAgDatabase) -Database: load by name · missing names → Warning · neither -All nor -Database → throw For each database — sequential (avoids simultaneous seeding load when using -All) Already in AG? YES continue → next DB Status: AlreadyInAG NO RecoveryModel ≠ Full → Set-DbaDbRecoveryModel Full ShouldProcess · failure → Status: SetRecoveryFailed · continue to next DB For each secondary: DB exists? → Remove-DbaDatabase ShouldProcess · failure → Status: DropOnSecondaryFailed · Add step continues regardless Add-DbaAgDatabase -SeedingMode Automatic ShouldProcess · Success → Status: Success · failure → Status: AddFailed Return PSCustomObject[] — one entry per database Status: Success · AlreadyInAG · AddFailed · SetRecoveryFailed · DropOnSecondaryFailed · WhatIf variants DONE

Examples

Add a single database to an AG
Add-sqmDatabaseToAG -AvailabilityGroup "AG1" -Database "SalesDB"
Add all user databases not yet in any AG
Add-sqmDatabaseToAG -SqlInstance "SQL01" -AvailabilityGroup "AG1" -All
Preview without making changes (-WhatIf)
Add-sqmDatabaseToAG -SqlInstance "SQL01" -AvailabilityGroup "AG1" -All -WhatIf
Add multiple named databases with SQL credentials
$cred = Get-Credential
Add-sqmDatabaseToAG -SqlInstance "SQL01" -SqlCredential $cred `
    -AvailabilityGroup "AG_PROD" -Database "DB1","DB2","DB3"