使用 PowerShell 创建 AlwaysOn 可用性组

适用于:SQL Server

本主题说明如何使用 PowerShell cmdlet 在 SQL Server 中通过 PowerShell 创建和配置 AlwaysOn 可用性组。 “可用性组” 定义一组用户数据库,这些用户数据库将以支持故障转移的单个单元和一组故障转移伙伴(称作“可用性副本” )的形式进行故障转移。

注意

有关可用性组的简介,请参阅 Always On 可用性组概述 (SQL Server)

注意

除了使用 PowerShell cmdlet 之外,还可以使用“创建可用性组”向导或 Transact-SQL。 有关详细信息,请参阅使用“新建可用性组”对话框 (SQL Server Management Studio)创建可用性组 (Transact-SQL)

开始之前

先决条件、限制和建议

  • 创建可用性组之前,请先验证 SQL Server 主机实例分别位于单个 WSFC 故障转移群集的不同 Windows Server 故障转移群集 (WSFC) 节点上。 此外,还要验证您的服务器实例满足其他服务器实例先决条件,并且其他所有 Always On 可用性组要求都得到满足且您知道有关建议。 有关详细信息,我们强烈建议你参阅针对 Always On 可用性组的先决条件、限制和建议 (SQL Server)

权限

需要 sysadmin 固定服务器角色的成员资格,以及 CREATE AVAILABILITY GROUP 服务器权限、ALTER ANY AVAILABILITY GROUP 权限或 CONTROL SERVER 权限。

使用 PowerShell 创建和配置可用性组

下表列出了涉及配置可用性组的基本任务,并且指出了 PowerShell cmdlet 支持的任务。 必须按照任务在表中出现的顺序执行 Always On 可用性组 任务。

任务 PowerShell Cmdlet(如果可用)或 Transact-SQL 语句 执行任务的位置
创建数据库镜像端点(每个 SQL Server 实例一次) New-SqlHadrEndPoint 在缺少数据库镜像端点的每个服务器实例上执行。

若要更改现有数据库镜像端点,请使用 Set-SqlHadrEndpoint 。
创建可用性组 首先,将 New-SqlAvailabilityReplica cmdlet 与 -AsTemplate 参数一起使用,以便为你计划包括在可用性组中的两个可用性副本中的每一个都创建内存中可用性副本对象。

然后,通过使用 New-SqlAvailabilityGroup cmdlet 并引用你的可用性副本对象,创建可用性组。
在要承载初始主副本的服务器实例上执行。
将辅助副本联接到可用性组 Join-SqlAvailabilityGroup 在承载辅助副本的各服务器实例上执行。
准备辅助数据库 Backup-SqlDatabaseRestore-SqlDatabase 在承载主副本的服务器实例上创建备份。

使用 NoRecovery 还原参数在承载辅助副本的各服务器实例上还原备份。 如果文件路径在承载主副本和目标辅助副本的计算机之间存在差异,还要使用 RelocateFile 还原参数。
通过将各辅助数据库联接到可用性组,开始数据同步 Add-SqlAvailabilityDatabase 在承载辅助副本的各服务器实例上执行。

注意

若要执行给定任务,请将目录 (cd) 更改为指示的一个或多个服务器实例 。

使用 PowerShell

设置和使用 SQL Server PowerShell 提供程序

注意

若要查看给定 cmdlet 的语法和示例,请使用 PowerShell 环境中的 Get-Help SQL Server cmdlet。 有关详细信息,请参阅 Get Help SQL Server PowerShell

  1. 将目录 (cd) 更改为承载主要副本的服务器实例。

  2. 为主副本创建内存中可用性副本对象。

  3. 为每个辅助副本创建内存中可用性副本对象。

  4. 创建可用性组。

    注意

    可用性组名称的最大长度为 128 个字符。

  5. 将新的次要副本联接到可用性组,请参阅将次要副本联接到可用性组 (SQL Server)

  6. 对于可用性组中的每个数据库,通过使用 RESTORE WITH NORECOVERY 还原主数据库的最近的备份,创建辅助数据库。

  7. 将所有新的次要副本联接到可用性组,请参阅将次要副本联接到可用性组 (SQL Server)

  8. (可选)使用 Windows dir 命令验证新可用性组的内容 。

注意

如果服务器实例的 SQL Server 服务帐户基于不同的域用户帐户运行,则在各服务器实例上,为其他服务器实例创建一个登录名,并且授予此登录名对本地数据库镜像端点的 CONNECT 权限。

示例

下面的 PowerShell 示例创建并配置一个名为 <myAvailabilityGroup> 的简单可用性组,该可用性组具有两个可用性副本和一个可用性数据库。 示例:

  1. 备份 <myDatabase> 及其事务日志。

  2. 使用 <myDatabase> -NoRecovery 选项还原 及其事务日志。

  3. 创建主副本的内存中表示形式,它将由 SQL Server 的本地实例(名为 PrimaryComputer\Instance)承载。

  4. 创建辅助副本的内存中表示形式,它将由 SQL Server 的本地实例(名为 SecondaryComputer\Instance)承载。

  5. 创建名为 <myAvailabilityGroup>的可用性组。

  6. 将辅助副本联接到该可用性组。

  7. 将辅助数据库联接到该可用性组。

# 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

为 AlwaysOn 可用性组配置服务器实例

配置可用性组和副本属性

完成可用性组配置

用于创建可用性组的其他方法

解决 AlwaysOn 可用性组配置问题

相关内容

另请参阅

数据库镜像端点 (SQL Server)
AlwaysOn 可用性组概述 (SQL Server)