标签: availability-groups

在可用性组中涉及的数据库上启用 Service Broker

我正在尝试在属于可用性组的 SQL Server 2012 数据库上启用 Service Broker 并不断收到此错误消息:

无法对数据库“dbname”执行该操作,因为它涉及数据库镜像会话或可用性组。不允许对参与数据库镜像会话或可用性组的数据库执行某些操作。
ALTER DATABASE 语句失败。(Microsoft SQL Server,错误:1468)

即使尝试Trustworthy在数据库上启用也会产生相同的错误。根据这篇文章,似乎可以在为 AG 配置的数据库上启用 Service Broker。我可能会错过什么?

侦听器已配置,使用公共权限创建的端点,目标引用侦听器名称。当我尝试启用服务代理或Trustworthy通过管理控制台或 T-SQL 进行设置时发生错误。

我想补充一点,该数据库是从具有现有 Service Broker 实现的 SQL Server 2005 版本还原的。

sql-server service-broker sql-server-2012 availability-groups

6
推荐指数
1
解决办法
1万
查看次数

SQL Server 2012 AlwaysOn:需要通过脚本-T-sql或PowerShell自动添加数据库

我已经为即将推出的新“Intranet”安装并成功配置了我们的 SQL Server 2012 AlwaysOn 2 节点服务器。我已经让 AlwaysOn 运行良好,我们的 Intranet 前端服务器将使用 SharePoint 2013。问题是 SharePoint 2013 被配置为自动将数据库添加到我们的 SQL Server 2012 后端,而不是 AlwaysOn。在阅读有关此内容并联系 Microsoft MSDN 支持时,默认答案是“您必须手动查找、选择、备份然后单独添加这些新数据库,以将它们加入 AlwaysOn”。

可是等等; 这可能是一项艰巨的任务,不断检查 SQL Server 后端服务器以查看创建了哪些数据库,然后必须将它们添加到 AlwaysOn,7/24!我正在寻找一个脚本或进程来检查新数据库,以完整模式备份这些新数据库,(当然,为了被添加到 AlwaysOn),然后将这些数据库添加到 AlwaysOn,所有这些都是自动的。或者每...1-2小时运行一次?(无需用户干预)

到目前为止,我想出的是这个脚本,它实际上标识了新添加的数据库(尚未在 AlwaysOn 中),然后将它们备份到共享位置。我的下一个任务是找到那些新添加的数据库,并通过所需的各种流程,将它们添加到 AlwaysOn。我想这将涉及某种循环操作。我不是 T-SQL/脚本专家;有没有我可以访问的解决方案或脚本可以做到这一点?(自动将数据库添加到 AlwaysOn)?

请指教,我确定我不是第一个遇到这个问题的人。我在各种 Internet 站点(包括这个站点!)上看过以前的帖子,解决方案要么不正确,要么声明诸如“当然,继续编写脚本!”之类的内容。谢谢,但我需要更多细节。

再次感谢,

-艾伦

DECLARE @name VARCHAR(50) -- database name  
DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  

-- specify database backup directory
SET @path = '\\atel-web-be2\backups\'  

DECLARE db_cursor CURSOR FOR  
select name …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012 availability-groups

6
推荐指数
2
解决办法
1万
查看次数

SQL Server Always On 节点和文件共享多数

我正在寻找有关在 Windows Server 2012 R2 上构建 SQL Server 2016 SP1 Always On Availability Groups HADR 解决方案的一些指导。我们有一个带有主副本和辅助副本的主站点 A 和一个带有辅助副本和文件共享见证的灾难恢复 (DR) 站点 B。我们的目标是,如果站点 A 的主副本服务器 1 发生故障,则 Always On Availability Group (AG) 故障转移到站点 A 的辅助副本服务器 2,如果站点 A 的两台服务器都发生故障,则 AG 故障转移到站点 B。

我们正在尝试按照https://technet.microsoft.com/en-us/library/cc731739(v=ws.11).aspx和此图表进行节点和文件共享多数配置:

在此处输入图片说明

此图显示,当一个节点和“磁盘”/文件共享见证通信时,集群运行,但在我们对这种情况的测试中,由于 WSFC 的仲裁丢失,集群失败。如果我们通过禁用 vmWare 中的 NIC 一次测试一台服务器的故障,则自动 AG 故障转移会起作用,因为 SQL Server 2016 支持两个自动故障转移目标副本。但是,如果我们同时使站点 A 的两台服务器发生故障以模拟点对点网络故障或站点电源故障,则不起作用。

以下手动干预强制仲裁的方法将起作用,但它不是自动的,这是我们在理想情况下想要的:

$node = "SQLServerC"
Stop-ClusterNode –Name $node
Start-ClusterNode –Name $node –FixQuorum

ALTER AVAILABILITY GROUP SQLServerAO FORCE_FAILOVER_ALLOW_DATA_LOSS;

$node = "SQLServerC"
Stop-ClusterNode –Name $node
Start-ClusterNode …
Run Code Online (Sandbox Code Playgroud)

sql-server clustering high-availability availability-groups disaster-recovery

6
推荐指数
1
解决办法
1693
查看次数

AlwaysOn 可用性组侦听器端口选择

简单的问题(我希望!)

为什么要为 Always On AG 侦听器使用非默认端口?

我还没有找到一个很好的帖子(还)概述优点与缺点。

目前,我可以想到使用 1433 以外的其他三个原因:

有没有其他人能想到的?

sql-server listener availability-groups

6
推荐指数
1
解决办法
9289
查看次数

是否可以查看哪个 SPID 使用哪个调度程序(工作线程)?

我们最近在 SQL Server 2014 HADR 环境中遇到了一个问题,其中一台服务器用完了工作线程。得到消息:

AlwaysOn 可用性组的线程池无法启动新的工作线程,因为没有足够的可用工作线程

虽然我们能够通过将可用性组之一移动到另一台服务器来“解决”问题,但我想知道是否可以查看哪些查询在哪个调度程序(或工作程序或任务)上运行。

通过以下查询,我可以看到有多少工人可用、正在使用和等待资源:

declare @max int
select @max = max_workers_count from sys.dm_os_sys_info

select 
    @max as 'TotalThreads',
    sum(active_Workers_count) as 'CurrentThreads',
    @max - sum(active_Workers_count) as 'AvailableThreads',
    sum(runnable_tasks_count) as 'WorkersWaitingForCpu',
    sum(work_queue_count) as 'RequestWaitingForThreads' ,
    sum(current_workers_count) as 'AssociatedWorkers'
from  
    sys.dm_os_Schedulers where status='VISIBLE ONLINE'
Run Code Online (Sandbox Code Playgroud)

通过以下查询,我可以看到哪些工作人员正在哪个 CPU(核心)上运行:

SELECT *
FROM  sys.dm_os_Schedulers s --> Prozessoren Kerne
JOIN sys.dm_os_workers w ON w.scheduler_address = s.scheduler_address
JOIN sys.dm_os_tasks t ON t.task_address = w.task_address
WHERE s.status = 'VISIBLE ONLINE'
AND s.cpu_id = 2
Run Code Online (Sandbox Code Playgroud)

有什么方法可以找到哪个 …

sql-server dmv availability-groups sql-server-2014

6
推荐指数
1
解决办法
1438
查看次数

AlwaysOn AG 与 FCI

AlwaysOn 可用性组(AG) 和AlwaysOn 故障转移群集实例(FCI) 的整个 MS 文档中,我看到以下模式:

  1. FCI 适用于 HA 场景。
  2. 与主副本位于同一位置的 AG 同步辅助副本适用于 HA 方案。
  3. 位于不同数据中心的 AG 异步辅助副本用于 DR 场景。

这是讨论此问题示例 MS 链接

由于选项 #1 和 #2 都适用于 HA 方案,我该如何在它们之间做出决定?如果 MS 发布了 #1 和 #2 的成本和 RPO/RTO 指标,就很容易决定我想要哪个。

或者也许有一种不同的方式来理解这些选项之间的投资回报率差异。例如,也许选项 #2 最适合 VLDB,而选项 #1 最适合非常高的交易量。我不知道。

那么,DBA 用于在选项 #1 和 #2 之间进行选择的选择标准是什么?

更复杂的是,我知道选项 #1 和 #2 可以结合使用!什么时候结合这两种选择是明智的?什么时候结合这两个选项毫无意义?我知道当这些选项组合在一起时,AG 不再支持自动故障转移。这是有趣的琐事,但没有回答我的问题。

顺便说一下,我打算将我的最终解决方案供应到 Azure IaaS。如果我使用 Always On FCI,我可能会使用 Storage Spaces Direct (S2D) 创建准 SAN。

更新

我找到了两篇文章进行了比较。第一个是MS …

sql-server clustering high-availability availability-groups azure

6
推荐指数
2
解决办法
7234
查看次数

Always On 数据库上的 DBCC CHECKDB

我们真的需要在配置了 Always On 同步更新的数据库上运行 DBCC checkdb 吗?

我相信自动页面修复机制应该识别损坏并自动修复它。

sql-server availability-groups dbcc-checkdb

6
推荐指数
1
解决办法
625
查看次数

单服务器(副本)可用性组

第一次打电话,长时间的听众。

我有一种情况,我需要在大约 2 个月内建立一个服务器可用性组(即将数据库移动到新服务器,重建当前服务器,并将重建的当前服务器添加到 AG)。两台服务器都是物理服务器,并且具有大致相同的规格。Windows Server 2016、SQL Server 2014。

我的想法是现在用监听器来支持 AG,这样当当前服务器被重建并添加到组中时,我们不需要添加监听器然后更新我们所有的应用程序/客户端(即这将强制两个迁移,一个到新的服务器,一个到新的监听器)。

我已经在一些测试服务器上测试了这种情况,并且它按预期工作。我也无法预见不这样做的理由,但我认为值得社区询问,因为我们正在谈论生产数据库。我的问题是有人试过这个并且有任何问题吗?有人会建议反对这个解决方案。谢谢。

sql-server availability-groups

6
推荐指数
1
解决办法
471
查看次数

集群中的 SQL Server 是否需要具有相同的内存?

我有两台服务器始终处于故障转移配置中,下面是 Windows 集群。

两台服务器需要有相同的内存吗?
我们使用大量内存的数据库之一不在 AG 中,因此理想情况下,我不想为辅助服务器提供与主服务器相同的内存,因为 - 它永远不需要运行大数据库。

sql-server availability-groups sql-server-2014

6
推荐指数
2
解决办法
959
查看次数

重新启动后在可读二级上出现奇怪的阻塞

我们正在运行一个带有 3 个副本的 SQL Server 2014 可用性组,一个同步(SQL2)和一个异步辅助副本。我们还配置了到同步辅助副本的只读路由。

昨晚 SQL2 从自动 Windows 更新安装重新启动。服务器重新上线,SQL Server 服务启动(延迟启动),数据库进入恢复状态。过了一会儿,事件查看器显示数据库完整性检查成功,数据库可以使用了。

数据库在 SQL Management Studio 中显示同步状态。AG 状态正常,但没有查询从数据库中获取结果。

查询被等待类型阻止:HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING。

有时,等待类型更改为“lck_m_s”等待类型,并被执行数据库启动命令的进程的 pid 阻止。我知道这与 SQL Server Enterprise 附带的快速恢复选项有关,但我不明白为什么一个简单的选择会被永远阻止。

主要问题是:SQL Server 如何显示 AG 数据库是健康的,但实际上并非如此?你认识这个问题吗?

为了解决这个问题,我们从 AG 中删除了辅助数据库,并将数据库重新加入到 AG 中,现在一切又恢复正常了。

sql-server wait-types availability-groups blocking sql-server-2014

6
推荐指数
1
解决办法
618
查看次数