Skip to content

Latest commit

 

History

History
222 lines (148 loc) · 15.6 KB

create-an-availability-group-sql-server-powershell.md

File metadata and controls

222 lines (148 loc) · 15.6 KB
title description author ms.author ms.date ms.service ms.subservice ms.topic helpviewer_keywords
Create an availability group using PowerShell
Learn how to use PowerShell cmdlets to create and configure an Always On availability group by using PowerShell in SQL Server 2019 (15.x).
MashaMSFT
mathoma
05/17/2016
sql
availability-groups
how-to
Availability Groups [SQL Server], creating

Create an Always On availability group using PowerShell

[!INCLUDE SQL Server] This topic describes how to use PowerShell cmdlets to create and configure an Always On availability group by using PowerShell in [!INCLUDEssnoversion]. An availability group defines a set of user databases that will fail over as a single unit and a set of failover partners, known as availability replicas, which support failover.

Note

For an introduction to availability groups, see Overview of Always On Availability Groups (SQL Server).

Note

As an alternative to using PowerShell cmdlets, you can use the Create Availability Group wizard or [!INCLUDEtsql]. For more information, see Use the New Availability Group Dialog Box (SQL Server Management Studio) or Create an Availability Group (Transact-SQL).

Before You Begin

Prerequisites, Restrictions, and Recommendations

Permissions

Requires membership in the sysadmin fixed server role and either CREATE AVAILABILITY GROUP server permission, ALTER ANY AVAILABILITY GROUP permission, or CONTROL SERVER permission.

Using PowerShell to Create and Configure an Availability Group

The following table lists the basic tasks involved in configuring an availability group and indicates those that are supported by PowerShell cmdlets. The [!INCLUDEssHADR] tasks must be performed in the sequence in which they are presented in the table.

Task PowerShell Cmdlets (if Available) or Transact-SQL Statement Where to Perform Task
Create database mirroring endpoint (once per [!INCLUDEssNoVersion] instance) New-SqlHadrEndPoint Execute on each server instance that lacks database mirroring endpoint.

To alter an existing database mirroring endpoint, use Set-SqlHadrEndpoint.
Create availability group First, use the New-SqlAvailabilityReplica cmdlet with the -AsTemplate parameter to create an in-memory availability-replica object for each of the two availability replicas that you plan to include in the availability group.

Then, create the availability group by using the New-SqlAvailabilityGroup cmdlet and referencing your availability-replica objects.
Execute on the server instance that is to host the initial primary replica.
Join secondary replica to availability group Join-SqlAvailabilityGroup Execute on each server instance that is hosts a secondary replica.
Prepare the secondary database Backup-SqlDatabase and Restore-SqlDatabase Create backups on the server instance that hosts the primary replica.

Restore backups on each server instance that hosts a secondary replica, using the NoRecovery restore parameter. If the file paths differ between the computers that host the primary replica and the target secondary replica, also use the RelocateFile restore parameter.
Start data synchronization by joining each secondary database to availability group Add-SqlAvailabilityDatabase Execute on each server instance that hosts a secondary replica.

Note

To perform the given tasks, change directory (cd) to the indicated server instance or instances.

Using PowerShell

Set up and use the SQL Server PowerShell Provider.

Note

To view the syntax and an example of a given cmdlet, use the Get-Help cmdlet in the [!INCLUDEssNoVersion] PowerShell environment. For more information, see Get Help SQL Server PowerShell.

  1. Change directory (cd) to the server instance that is to host the primary replica.

  2. Create an in-memory availability-replica object for the primary replica.

  3. Create an in-memory availability-replica object for each of the secondary replicas.

  4. Create the availability group.

    [!NOTE]
    The maximum length for an availability group name is 128 characters.

  5. Join the new secondary replica to the availability group, see Join a Secondary Replica to an Availability Group (SQL Server).

  6. For each database in the availability group, create a secondary database by restoring recent backups of the primary database, using RESTORE WITH NORECOVERY.

  7. Join every new secondary database to the availability group, see Join a Secondary Replica to an Availability Group (SQL Server).

  8. (optional) Use the Windows dir command to verify the contents of the new availability group.

Note

If the [!INCLUDEssNoVersion] service accounts of the server instances run under different domain user accounts, on each server instance, create a login for the other server instance and grant this login CONNECT permission to the local database mirroring endpoint.

Example

The following PowerShell example creates and configures a simple availability group named <myAvailabilityGroup> with two availability replicas and one availability database. The example:

  1. Backs up <myDatabase> and its transaction log.

  2. Restores <myDatabase> and its transaction log, using the -NoRecovery option.

  3. Creates an in-memory representation of the primary replica, which will be hosted by the local instance of [!INCLUDEssNoVersion] (named PrimaryComputer\Instance).

  4. Creates an in-memory representation of the secondary replica, which will be hosted by an instance of [!INCLUDEssNoVersion] (named SecondaryComputer\Instance).

  5. Creates an availability group named <myAvailabilityGroup>.

  6. Joins the secondary replica to the availability group.

  7. Joins the secondary database to the availability group.

# Backup my database and its log on the primary  
Backup-SqlDatabase `  
    -Database "<myDatabase>" `  
    -BackupFile "\\share\backups\<myDatabase>.bak" `  
    -ServerInstance "PrimaryComputer\Instance"  
  
Backup-SqlDatabase `  
    -Database "<myDatabase>" `  
    -BackupFile "\\share\backups\<myDatabase>.log" `  
    -ServerInstance "PrimaryComputer\Instance" `  
    -BackupAction Log   
  
# Restore the database and log on the secondary (using NO RECOVERY)  
Restore-SqlDatabase `  
    -Database "<myDatabase>" `  
    -BackupFile "\\share\backups\<myDatabase>.bak" `  
    -ServerInstance "SecondaryComputer\Instance" `  
    -NoRecovery  
  
Restore-SqlDatabase `  
    -Database "<myDatabase>" `  
    -BackupFile "\\share\backups\<myDatabase>.log" `  
    -ServerInstance "SecondaryComputer\Instance" `  
    -RestoreAction Log `  
    -NoRecovery  
  
# Create an in-memory representation of the primary replica.  
$primaryReplica = New-SqlAvailabilityReplica `  
    -Name "PrimaryComputer\Instance" `  
    -EndpointURL "TCP://PrimaryComputer.domain.com:5022" `  
    -AvailabilityMode "SynchronousCommit" `  
    -FailoverMode "Automatic" `  
    -Version 12 `  
    -AsTemplate  
  
# Create an in-memory representation of the secondary replica.  
$secondaryReplica = New-SqlAvailabilityReplica `  
    -Name "SecondaryComputer\Instance" `  
    -EndpointURL "TCP://SecondaryComputer.domain.com:5022" `  
    -AvailabilityMode "SynchronousCommit" `  
    -FailoverMode "Automatic" `  
    -Version 12 `  
    -AsTemplate  
  
# Create the availability group  
New-SqlAvailabilityGroup `  
    -Name "<myAvailabilityGroup>" `  
    -Path "SQLSERVER:\SQL\PrimaryComputer\Instance" `  
    -AvailabilityReplica @($primaryReplica,$secondaryReplica) `  
    -Database "<myDatabase>"  
  
# Join the secondary replica to the availability group.  
Join-SqlAvailabilityGroup -Path "SQLSERVER:\SQL\SecondaryComputer\Instance" -Name "<myAvailabilityGroup>"  
  
# Join the secondary database to the availability group.  
Add-SqlAvailabilityDatabase -Path "SQLSERVER:\SQL\SecondaryComputer\Instance\AvailabilityGroups\<myAvailabilityGroup>" -Database "<myDatabase>"  

Related Tasks

To configure a server instance for Always On Availability Groups

To configure availability group and replica properties

To complete availability group configuration

Alternative ways to create an availability group

To troubleshoot Always On Availability Groups configuration

Related Content

See Also

The Database Mirroring Endpoint (SQL Server)
Overview of Always On Availability Groups (SQL Server)