Author | Chrissy LeMaire (@cl), netnerds.net |
Availability | Windows, Linux, macOS |
Want to see the source code for this command? Check out Sync-DbaAvailabilityGroup on GitHub.
Want to see the Bill Of Health for this command? Check out Sync-DbaAvailabilityGroup.
Synchronizes server-level objects from primary to secondary replicas in availability groups
Copies server-level objects from the primary replica to all secondary replicas in an availability group. Availability groups only synchronize databases, not the server-level dependencies that applications need to function properly after failover.
This command ensures that logins, SQL Agent jobs, linked servers, and other critical server objects exist on all replicas so your applications work seamlessly regardless of which replica becomes primary. By default, it synchronizes these object types:
SpConfigure
CustomErrors
Credentials
DatabaseMail
LinkedServers
Logins
LoginPermissions
SystemTriggers
DatabaseOwner
AgentCategory
AgentOperator
AgentAlert
AgentProxy
AgentSchedule
AgentJob
Any of these object types can be excluded using the -Exclude parameter. For granular control over specific objects (like excluding individual jobs or logins), use the -ExcludeJob, -ExcludeLogin parameters or the underlying Copy-Dba* commands directly.
The command copies ALL objects of each enabled type - it doesn't filter based on which objects are actually used by the availability group databases. Use the exclusion parameters to limit scope when needed.
Sync-DbaAvailabilityGroup
[[-Primary] <DbaInstanceParameter>]
[[-PrimarySqlCredential] <PSCredential>]
[[-Secondary] <DbaInstanceParameter[]>]
[[-SecondarySqlCredential] <PSCredential>]
[[-AvailabilityGroup] <String>]
[[-Exclude] <String[]>]
[[-Login] <String[]>]
[[-ExcludeLogin] <String[]>]
[[-Job] <String[]>]
[[-ExcludeJob] <String[]>]
[-DisableJobOnDestination]
[[-InputObject] <AvailabilityGroup[]>]
[-Force]
[-EnableException]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
PS C:\> Sync-DbaAvailabilityGroup -Primary sql2016a -AvailabilityGroup db3
Syncs the following on all replicas found in the db3 AG:
SpConfigure, CustomErrors, Credentials, DatabaseMail, LinkedServers
Logins, LoginPermissions, SystemTriggers, DatabaseOwner, AgentCategory,
AgentOperator, AgentAlert, AgentProxy, AgentSchedule, AgentJob
PS C:\> Get-DbaAvailabilityGroup -SqlInstance sql2016a | Sync-DbaAvailabilityGroup -ExcludeType LoginPermissions, LinkedServers -ExcludeLogin login1, login2 -Job job1, job2
Syncs the following on all replicas found in all AGs on the specified instance:
SpConfigure, CustomErrors, Credentials, DatabaseMail, Logins,
SystemTriggers, DatabaseOwner, AgentCategory, AgentOperator
AgentAlert, AgentProxy, AgentSchedule, AgentJob.
Copies all logins except for login1 and login2 and only syncs job1 and job2
PS C:\> Get-DbaAvailabilityGroup -SqlInstance sql2016a | Sync-DbaAvailabilityGroup -WhatIf
Shows what would happen if the command were to run but doesn't actually perform the action.
The primary replica SQL Server instance for the availability group. This is the source server from which all server-level objects will be copied.
Required when not using InputObject parameter. Server version must be SQL Server 2012 or higher.
Alias | |
Required | False |
Pipeline | false |
Default Value |
Login to the target instance using alternative credentials. Accepts PowerShell credentials (Get-Credential).
Windows Authentication, SQL Server Authentication, Active Directory - Password, and Active Directory - Integrated are all supported.
For MFA support, please use Connect-DbaInstance.
Alias | |
Required | False |
Pipeline | false |
Default Value |
The secondary replica SQL Server instances where server-level objects will be copied to. Can specify multiple instances.
If not specified, the function will automatically discover all secondary replicas in the availability group. Server version must be SQL Server 2012 or higher.
Alias | |
Required | False |
Pipeline | false |
Default Value |
Login to the target instance using alternative credentials. Accepts PowerShell credentials (Get-Credential).
Windows Authentication, SQL Server Authentication, Active Directory - Password, and Active Directory - Integrated are all supported.
For MFA support, please use Connect-DbaInstance.
Alias | |
Required | False |
Pipeline | false |
Default Value |
The name of the specific availability group to synchronize server objects for.
When specified, the function will identify all replicas in this AG and sync objects from primary to all secondaries.
Alias | |
Required | False |
Pipeline | false |
Default Value |
Excludes specific object types from being synchronized to avoid conflicts or reduce sync time.
Useful when you need to manually manage certain objects or when some object types cause issues in your environment. Valid values:
SpConfigure, CustomErrors, Credentials, DatabaseMail, LinkedServers, Logins, LoginPermissions,
SystemTriggers, DatabaseOwner, AgentCategory, AgentOperator, AgentAlert, AgentProxy, AgentSchedule, AgentJob
Alias | ExcludeType |
Required | False |
Pipeline | false |
Default Value | |
Accepted Values | AgentCategory,AgentOperator,AgentAlert,AgentProxy,AgentSchedule,AgentJob,Credentials,CustomErrors,DatabaseMail,DatabaseOwner,LinkedServers,Logins,LoginPermissions,SpConfigure,SystemTriggers |
Specifies which login accounts to synchronize to secondary replicas. Accepts an array of login names.
Use this when you only need to sync specific service accounts or application logins rather than all logins on the server.
Alias | |
Required | False |
Pipeline | false |
Default Value |
Specifies login accounts to skip during synchronization. Accepts an array of login names.
Commonly used to exclude system accounts, sa, or logins that should remain unique per replica for monitoring or maintenance purposes.
Alias | |
Required | False |
Pipeline | false |
Default Value |
Specifies which SQL Agent jobs to synchronize to secondary replicas. Accepts an array of job names.
Use this when you only need to sync critical jobs like backup jobs or maintenance tasks rather than all jobs on the server.
Alias | |
Required | False |
Pipeline | false |
Default Value |
Specifies SQL Agent jobs to skip during synchronization. Accepts an array of job names.
Commonly used to exclude replica-specific jobs like log shipping, local backups, or jobs that should only run on the primary replica.
Alias | |
Required | False |
Pipeline | false |
Default Value |
Disables all synchronized jobs on secondary replicas after copying them from the primary.
Use this when jobs should only run on the primary replica or when you need to manually control which jobs run on each replica after failover.
Alias | |
Required | False |
Pipeline | false |
Default Value | False |
Accepts availability group objects from Get-DbaAvailabilityGroup for pipeline processing.
Use this to sync multiple availability groups at once or to process specific AGs returned by filtering commands.
Alias | |
Required | False |
Pipeline | true (ByValue) |
Default Value |
Drops and recreates existing objects on secondary replicas instead of skipping them.
Use this when you need to update objects that already exist on secondaries or when objects have configuration differences that need to be synchronized.
Alias | |
Required | False |
Pipeline | false |
Default Value | False |
By default, when something goes wrong we try to catch it, interpret it and give you a friendly warning message.
This avoids overwhelming you with "sea of red" exceptions, but is inconvenient because it basically disables advanced scripting.
Using this switch turns this "nice by default" feature off and enables you to catch exceptions with your own try/catch.
Alias | |
Required | False |
Pipeline | false |
Default Value | False |
Shows what would happen if the command were to run. No actions are actually performed.
Alias | wi |
Required | False |
Pipeline | false |
Default Value |
Prompts you for confirmation before executing any changing operations within the command.
Alias | cf |
Required | False |
Pipeline | false |
Default Value |