标签: availability-groups

允许用户只查看他们有权访问的数据库

我想知道是否有任何方法可以让用户只查看他们有权访问的特定数据库。例如。假设我们有一个 alwaysOn,其中只有一个本地数据库和 10 个添加到 AO 中的数据库。用户需要对 AO 中添加的 10 个数据库之一的读取权限。但是当授予用户对该数据库的权限并且他连接到 AO 时,他可以查看每个数据库,但当然只能访问他有权访问的数据库。如果 AO 在本地数据库所在的位置处于活动状态,他也会看到那个。

我们已经尝试了一些东西,但没有成功,而且从我们所阅读的内容来看,除非用户被授予 dbowner 权限,否则它似乎不是一种方法。

有人有任何想法吗?

sql-server availability-groups sql-server-2014

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

AlwaysOn DDL 和架构更改

任何人都可以讨论如何逐步将 DDL 架构更改与 Always On Availability Groups 准确合并?我们在一个状态有一个主副本,在另一个状态位置有一个辅助副本。辅助副本将是只读异步的。

如果我要进行架构更改,包括任何种类...

例子

  1. 添加/修改/删除表上的列
  2. 添加/修改/删除表外键约束
  3. 添加/修改/删除聚集和非聚集索引
  4. 添加/修改/删除默认约束
  5. 添加/修改/删除存储过程和函数
  6. 添加/修改/删除触发器
  7. 添加/修改/删除视图

... 我需要什么才能确保主副本 DDL 顺利流向次副本?

我的假设

次要副本上的读取查询不会影响主 DML(数据修改、插入、更新、删除),并且会顺利进行,因为次要副本设置为读取快照隔离。

次要副本上的读取查询会影响主 DDL(模式更改、表结构更改),因为读取查询会放置模式锁。

解决方案

停止对从副本的所有查询,进行主副本DDL,然后DDL变化会流向从副本。

  • 在此过程中是否还需要其他任何步骤?
  • 还有什么需要认真做的?
  • 关闭辅助副本上的所有读取查询的最佳方法是什么?杀死/关闭 Spid,立即使用回滚设置 SINGLE_USER?

此示例仅用于辅助只读异步。如果辅助副本是只读同步的怎么办?


其他背景:Primary Replica是OLTP,日夜事务。我们公司有一个部署变更管理时间窗口。假设我早上只有 1 小时来执行架构和 DDL 更改。我不能等待长时间的查询完成。在异步模式下,日志重做永远不会是最新的。

我记得读过 Microsoft 文章Active Secondary:Readable Secondary Replicas (Always On Availability Groups)

sql-server availability-groups

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

从 Internet 访问 SQL Server AlwaysOn HA 侦听器

我已经成功地在两台服务器之间创建了一个 SQL Server AlwaysOn 高可用性组,并且一切似乎在内部都运行良好。每个副本都位于不同的物理位置,位于不同的防火墙和公共 IP 以及私有 IP/子网之后。现在,他们能够通过站点到站点 VPN 直接相互通信。

我用来访问数据库的应用程序能够连接到侦听器的 DNS。故障转移集群节点和 SQL 副本都有私有 IP,所以只要我在我的网络中运行应用程序,我就可以了。

我现在遇到的问题是我需要应用程序能够在世界任何地方使用。基本上,我需要能够从 Internet 连接到侦听器而无需 VPN,并且仍然能够利用 HA//Failover 功能。

如何做到这一点?似乎在线发布的唯一文档与 Azure 相关,但不适用于我的设置。

谢谢!

sql-server listener failover availability-groups

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

一台服务器中的多个数据库问题

我们公司有 5 个不同的数据库。多个数据库中没有一个涉及或利用跨数据库连接。我们有充足的资源和预算。

我们公司正在争论:

  • 1 个服务器实例上的 5 个数据库,

  • 或 5 个不同服务器上的 5 个数据库。

问题:如果我们将所有内容都放在一台服务器上,可能会出现哪些具体问题、障碍问题?我的背景不是 DBA,所以想学习可以与团队讨论的示例。

背景:

公司 1 个服务器实例的论据:我们有带有故障转移群集的“资源调控器”和“AlwaysOn 可用性组”。资源调控器将处理数据库之间的内存、CPU、io 工作负载。因此,与 AlwaysOn DR 一起,它可以处理失控的查询、糟糕的设计、内存问题。

每个数据库 100GB,关键公司信息,最少 5000 万行

我们每秒处理 300 笔交易

RTO = 10 分钟

performance database-design sql-server availability-groups performance-tuning

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

链接服务器“linkedserver”的“SQLNCLI11”返回消息“事务管理器已禁用对远程/网络事务的支持。”

我在 SQL Server 2014 AG 组 (AG1) 中有一个数据库。- 两个节点。

在两个节点上,都设置了链接服务器。我正在从 AG 组 (AG1) 数据库的表中选择数据并插入链接服务器(来自另一个 AG 组(AG2)的数据库)。事务中唯一的语句是插入语句。它不是分布式事务。

为什么会出现以下错误?

链接服务器“LinkedserverListener”的 OLE DB 访问接口“SQLNCLI11”返回消息“事务管理器已禁用对远程/网络事务的支持。”。
消息 7391,级别 16,状态 2,第 2 行
由于链接服务器“LinkedServerListener”的 OLE DB 提供程序“SQLNCLI11”无法开始分布式事务,因此无法执行该操作。

示例代码如下。

Drop table #Myatran
Select 'ABC' name into #Myatran

DECLARE @pndstop_ps NVARCHAR(4000)
SET @pndstop_ps = 
N'
INSERT INTO '+ 'linkedserver'+'.DB.dbo.MyaTEST(Name) SELECT name FROM #Myatran
'
SET XACT_ABORT ON
BEGIN TRANSACTION

EXEC sp_executeSQl @pndstop_ps

SET XACT_ABORT OFF
Run Code Online (Sandbox Code Playgroud)

sql-server linked-server availability-groups sql-server-2014

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

在可用性组的辅助节点上补丁失败后无法恢复同步

我在可用性组的辅助节点上应用了 Service Pack 4。它失败了,所以我将辅助节点的整个 VM 恢复到早期版本,现在数据不同步。

我有主动和被动两个节点。我尝试手动恢复数据移动。但它失败了。你能在这里提出什么建议吗?

sql-server availability-groups patching

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

为什么我无法创建此可用性组?(错误 35220)

我试图在 SQL Server 2017 实例上创建可用性组,但遇到错误 35220:

无法处理该操作。Always On 可用性组副本管理器正在等待主机启动 Windows Server 故障转移群集 (WSFC) 群集并加入它。要么本地计算机不是集群节点,要么本地集群节点不在线。如果计算机是集群节点,则等待其加入集群。如果计算机不是群集节点,请将计算机添加到 WSFC 群集。然后,重试该操作。

我被难住了,因为主机绝对是 WSFC 的一部分,并且节点在线。我最终在一篇专注于多子网可用性组的博客中找到了答案,我之前没有看过,因为我的不是多子网。

因此,我在这里发布这个是为了更好地了解解决方案,以防其他一些糟糕的 DBA 像我一样被难倒。我将在下面发布解决方案。

sql-server clustering availability-groups sql-server-2017

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

网络问题后的可用性组群集内存问题。如何转储 HADR 日志块消息池?

我们有一个四节点可用性组,一个站点中有两个节点,另一个数据中心中有两个站点外节点。我注意到在每个 WAN 问题发生后,WAN 连接出现波动,并且异地节点不断断开连接并重新连接(使用 AOAG 仪表板中的 AOAG 运行状况),主服务器的内存被“HADR 日志块消息池”消耗

SELECT  *
FROM    sys.dm_os_memory_clerks
ORDER   BY pages_kb DESC
Run Code Online (Sandbox Code Playgroud)

类型:OBJECTSTORE_SERVICE_BROKER
名称:HADR 日志块消息池

在最坏的情况下,当网络震荡数小时时,这个内存管理员最终会消耗超过 90% 的 SQL Server 内存,导致 SQL Server 停止运行(SQL 有 10GB 的内存“HADR Log Block Msg Pool”正在使用 9.8GB)。

有没有办法转储这个 HADR 日志块消息池?还是一开始就阻止它变得如此之大?到目前为止,我们唯一的解决方案是故障转移并重新启动机器。

没有错误,只是节点的日志断开连接并重新连接,以及重新连接后数据库重新硬化的日志。

随着越来越多的内存被“HADR 日志块消息池”占用,可用于其他所有内容的内存会下降,从而影响性能。通常这 10GB 的 RAM 适合这个 AOAG 组和使用。只有当 WAN 波动一段时间时,我们才会出现此问题。

我们可以在服务器上投入更多内存,但我认为这不会解决根本问题,它只会在严重损害性能之前为我们争取更多时间。

我同意网络是根本原因,但在问题解决并且 AOAG 恢复同步后,SQL 不会像大多数 SQL 内存管理员那样恢复/重新分配 RAM 给其他 SQL 内存管理员,这似乎很奇怪。

日志传送不起作用;这是一个事务性环境,我们需要近乎实时的,最好是实时的异地 DR。AOAG 小组 99% 的时间都在工作,并且几乎总是实时同步。我们正在尝试与网络团队合作以改善连接性,和/或可能使它只是断开连接而不是摆动。

系统信息
SQL 版本:SQL 2016 SP1 CU6 13.0.4457.0
操作系统版本:Windows 2012 R2 6.3.9600
服务器内存:12GB …

sql-server memory clustering availability-groups sql-server-2016

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

AlwaysOn 侦听器的 CNAME 别名

我们目前遇到 SQL Server 迁移问题。有一个遗留产品,由于各种原因,我们不想更改连接字符串。因此,我们希望保留现有的 Listener 名称。

我的问题是,是否可以为 AG Listener Name 创建一个或多个 CNAME 别名?这样做有什么危险吗?

sql-server listener availability-groups

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

添加新数据库时的可用性组通知

当新数据库添加到 SQL Server 的 AG 设置时,会向我们发送如下所示的通知电子邮件。

可用性组数据库“XXXX”正在将角色从“SECONDARY”更改为“SECONDARY”,因为镜像会话或可用性组因角色同步而发生故障。这只是一条信息性消息。

令人困惑的是这句话

“将角色从“SECONDARY”更改为“SECONDARY”......”

  1. 有人可以解码它的含义吗?
  2. 添加新数据库时发送此类通知是否正常,还是我做错了或任何其他问题?

——在“思想”中……

sql-server availability-groups

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