启用或禁用 AlwaysOn 可用性组功能

适用于:SQL Server

启用 Always On 可用性组是在服务器实例上使用可用性组的先决条件。 在创建和配置任何可用性组之前,必须在将承载一个或多个可用性组的可用性副本的每个 SQL Server 实例上启用 Always On 可用性组功能。

重要

如果删除后重新创建了 WSFC 群集,则必须在其原始 WSFC 群集上托管可用性副本的每个 Always On 可用性组 实例上都禁用然后重新启用 SQL Server 功能。

先决条件

  • 在 SQL Server 2017 和 Windows Server 2016 的先前版本中,实例必须位于 Windows Server 故障转移群集 (WSFC) 节点才能启用 Always On 可用性组功能。 若要支持读取缩放可用性组,从 SQL Server 2017 和 Windows Server 2016 开始,即使 SQL Server 实例不在 Windows Server 故障转移群集上,也可以启用可用性组功能。

  • 该服务器实例必须正在运行支持 Always On 可用性组的 SQL Server 版本。 有关详细信息,请参阅 SQL Server 2016 各个版本支持的功能

  • 一次仅在一个服务器实例上启用 AlwaysOn 可用性组。 在启用 Always On 可用性组之后,一直等待直到 SQL Server 服务已重启,然后才继续在另一个服务器实例上进行操作。

有关用于创建和配置可用性组的其他先决条件的详细信息,请参阅针对 Always On 可用性组的先决条件、限制和建议 (SQL Server)

权限

在 SQL Server 实例上启用 Always On 可用性组时,服务器实例具有对 WSFC 群集的完全控制权限。

要求本地计算机上 Administrator 组中的成员身份以及对 WSFC 群集的完全控制。 使用 PowerShell 启用 AlwaysOn 时,使用“以管理员身份运行”选项打开命令提示符窗口。

要求 Active Directory 创建对象和管理对象权限。

确定是否已启用功能

使用 SQL Server Management Studio

确定是否已启用 AlwaysOn 可用性组

  1. 在“对象资源管理器”中,右键单击服务器实例,然后单击“属性”。

  2. “服务器属性” 对话框中,单击 “常规” 页。 “启用 HADR” 属性显示以下值之一:

    • True(如果启用了 AlwaysOn 可用性组)

    • False(如果禁用了 AlwaysOn 可用性组)。

“使用 Transact-SQL”

确定是否已启用 AlwaysOn 可用性组

  1. 使用以下 SERVERPROPERTY 语句:

    SELECT SERVERPROPERTY ('IsHadrEnabled');  
    

    IsHadrEnabled 服务器属性的设置指示是否为 Always On 可用性组启用 SQL Server 的实例,如下所示:

    • 如果 IsHadrEnabled = 1,将启用 AlwaysOn 可用性组。

    • 如果 IsHadrEnabled = 0,将禁用 AlwaysOn 可用性组。

    注意

    有关 IsHadrEnabled 服务器属性的详细信息,请参阅 SERVERPROPERTY (Transact-SQL) 的 SQL Server 版本。

使用 PowerShell

确定是否已启用 AlwaysOn 可用性组

  1. 将默认值 (cd) 设置为要确定其是否启用了 Always On 可用性组的服务器实例。

  2. 请输入以下 PowerShell Get-Item 命令:

    PS SQLSERVER:\SQL\NODE1\DEFAULT> get-item . | select IsHadrEnabled  
    

    注意

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

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

启用功能

启用 AlwaysOn,请使用:

使用 SQL Server 配置管理器

启用 AlwaysOn 可用性组

  1. 连接到承载要启用 Always On 可用性组的 SQL Server 实例的 Windows Server 故障转移群集 (WSFC) 节点。

  2. 在“开始”菜单中,依次指向“所有程序”、“Microsoft SQL Server”和“配置工具”,然后单击“SQL Server 配置管理器”。

  3. 在“SQL Server 配置管理器”中单击“SQL Server 服务”,右键单击“SQL Server (<实例名>)”(其中 <实例名> 是要启用 Always On 可用性组的本地服务器实例的名称),然后单击“属性”。

  4. 选择“AlwaysOn 高可用性”选项卡。

  5. 验证 Windows 故障转移群集名称字段包含本地故障转移群集的名称。 如果此字段为空,则此服务器实例当前不支持 Always On 可用性组。 原因可能是本地计算机不是群集节点、WSFC 群集已关闭或此版本的 SQL Server 不支持 Always On 可用性组。

  6. 选中“启用 AlwaysOn 可用性组”复选框,然后单击“确定” 。

    SQL Server 配置管理器保存您的更改。 然后,必须手动重新启动 SQL Server 服务。 这使您可以选择最适合您的业务要求的重新启动时间。 SQL Server 服务重新启动后,Always On 将启用,而且 IsHadrEnabled 服务器属性将设置为 1。

使用 SQL Server PowerShell

启用 AlwaysOn

  1. 将目录 (cd) 更改为你要为 AlwaysOn 可用性组启用的服务器实例。

  2. 使用 Enable-SqlAlwaysOn cmdlet 启用 AlwaysOn 可用性组。

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

    注意

    有关如何控制 Enable-SqlAlwaysOn cmdlet 是否重启 SQL Server 服务的信息,请参阅本主题后面的 Cmdlet 何时重启 SQL Server 服务?

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

示例:Enable-SqlAlwaysOn

以下 PowerShell 命令在 SQL Server 实例(“计算机”\“实例”)上启用 Always On 可用性组。

Enable-SqlAlwaysOn -Path SQLSERVER:\SQL\Computer\Instance  

禁用功能

重要

一次只能在一个服务器实例上禁用 AlwaysOn。 在禁用 Always On 可用性组之后,一直等待直到 SQL Server 服务已重启,然后才继续在另一个服务器实例上进行操作。

建议

在服务器实例上禁用 AlwaysOn 之前,我们建议你执行以下操作:

  1. 如果该服务器实例当前正在承载您要保留的可用性组的主副本,我们建议您尽可能手动将该可用性组故障转移到一个同步的辅助副本。 有关详细信息,请参阅执行可用性组的计划手动故障转移 (SQL Server)

  2. 删除所有本地辅助副本。 有关详细信息,请参阅从可用性组中删除次要副本 (SQL Server)

使用 SQL Server 配置管理器

禁用 AlwaysOn

  1. 连接到承载要禁用 Always On 可用性组的 SQL Server 实例的 Windows Server 故障转移群集 (WSFC) 节点。

  2. 在“开始”菜单中,依次指向“所有程序”、“Microsoft SQL Server”和“配置工具”,然后单击“SQL Server 配置管理器”。

  3. 在“SQL Server 配置管理器”中单击“SQL Server 服务”,右键单击“SQL Server (<实例名>)”(其中 <实例名> 是要禁用 Always On 可用性组的本地服务器实例的名称),然后单击“属性”。

  4. 在“Always On 高可用性”选项卡上,取消选中“启用 Always On 可用性组”复选框,然后单击“确定” 。

    SQL Server 配置管理器将保存更改并重启 SQL Server 服务。 SQL Server 服务重启时,将禁用 Always On 且 IsHadrEnabled 服务器属性将设置为 0,以指示已禁用 Always On 可用性组。

  5. 建议阅读本主题后面的跟进:在禁用 AlwaysOn 之后部分中的信息。

使用 SQL Server PowerShell

禁用 AlwaysOn

  1. 将目录 (cd) 更改为你要为 AlwaysOn 可用性组禁用的当前启用的服务器实例。

  2. 使用 Disable-SqlAlwaysOn cmdlet 来启用 AlwaysOn 可用性组。

    例如,以下命令在 SQL Server 的实例上禁用 AlwaysOn 可用性组 (Computer\Instance)。 此命令需要重新启动实例,并将提示您确认此重新启动。

    Disable-SqlAlwaysOn -Path SQLSERVER:\SQL\Computer\Instance  
    

    重要

    有关如何控制 Disable-SqlAlwaysOn cmdlet 是否重启 SQL Server 服务的信息,请参阅本主题后面的 Cmdlet 何时重新启动 SQL Server 服务?

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

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

跟进:在禁用 AlwaysOn 之后

禁用 Always On 可用性组后,必须重启 SQL Server 实例。 SQL 配置管理器将自动重新启动该服务器实例。 但是,如果使用了 Disable-SqlAlwaysOn cmdlet,则需要手动重新启动该服务器实例 。 有关详细信息,请参阅 sqlservr Application

在重新启动的服务器实例上:

  • 可用性数据库在 SQL Server 启动时不启动,因此无法访问它们。

  • 唯一支持的 Always On Transact-SQL 语句是 DROP AVAILABILITY GROUP。 不支持 CREATE AVAILABILITY GROUP、ALTER AVAILABILITY GROUP 和 ALTER DATABASE 的 SET HADR 选项。

  • SQL Server 元数据和 WSFC 中的 Always On 可用性组配置数据不受禁用 Always On 可用性组的影响。

如果你在为承载一个或多个可用性组的可用性副本的每个服务器实例上都永久禁用 AlwaysOn 可用性组,则我们建议你完成以下步骤:

  1. 如果你在禁用 AlwaysOn 前未删除本地可用性副本,则删除服务器实例正为其承载可用性副本的每个可用性组。 有关删除可用性组的信息,请参阅删除可用性组 (SQL Server)

  2. 若要删除留在原地的元数据,请删除服务器实例上作为原始 WSFC 一部分的受影响的可用性组。

  3. 所有连接仍可以访问任何主数据库,但是主数据库和辅助数据库之间的数据同步将停止。

  4. 辅助数据库将进入 RESTORING 状态。 您可以删除这些数据库,或者可通过使用 RESTORE WITH RECOVERY 还原它们。 但是,还原的数据库不再参与可用性组数据同步。

Cmdlet 何时重新启动 SQL Server 服务?

在当前正在运行的服务器实例上,使用 Enable-SqlAlwaysOn 或 Disable-SqlAlwaysOn 更改当前 AlwaysOn 设置可能导致 SQL Server 服务重新启动 。 重新启动行为取决于以下条件:

指定了 -NoServiceRestart 参数 指定了 -Force 参数 是否已重启 SQL Server 服务?
默认情况。 但是 cmdlet 提示您以下信息:

若要完成此操作,必须重启服务器实例“<instance_name>”的 SQL Server 服务。 是否继续?

[Y] 是 [N] 否 [S] 暂停 [?] 帮助(默认值为“Y”):

如果指定 NS,则不重新启动该服务。
重新启动服务。
不重新启动服务。
不重新启动服务。

另请参阅

AlwaysOn 可用性组概述 (SQL Server)
SERVERPROPERTY (Transact-SQL)