标签: availability-groups

仅复制的事务日志截断

我有一个数据库备份作业设置为每天使用一次带有仅复制选项的完整备份。仅复制是因为从我读过的内容来看,这是备份连接到可用性组的数据库的唯一方法。我在同一个 AG 上使用相同的选项每 20 分钟进行一次日志备份。在这些备份运行后截断事务日志的最佳做法是什么。完整备份不会被截断,因为它只使用与日志备份相同的副本。他们越来越失控。我知道我可以使用 DBCC SHRINKFILE,但我读的越多,它看起来就越危险。有没有其他方法或最佳实践?

任何建议表示赞赏。

backup sql-server-2012 transaction-log high-availability availability-groups

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

在可用性组中涉及的数据库上启用 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万
查看次数

可用性组报告断开连接的副本

我正在尝试在 VM 环境中配置可用性组,以便可以运行一些测试。

我想我已经正确创建了组,我可以在两台服务器上看到 Always on 组。但是,当我查看该组的仪表板时,它出现以下错误

可用性副本已断开连接
此次要副本未连接到主要副本。连接状态为 DISCONNECTED。

我已经检查了两台服务器上的端点,它们看起来是正确的。没有防火墙在运行,两台服务器都可以看到对方。调试此类错误的最佳方法是什么?

下面是我用来设置所有这些的 TSQL

主服务器

CREATE ENDPOINT dbm_endpoint
    STATE=STARTED 
    AS TCP (LISTENER_PORT=7022) 
    FOR DATABASE_MIRRORING (ROLE=ALL)
GO
Run Code Online (Sandbox Code Playgroud)

辅助服务器

CREATE ENDPOINT dbm_endpoint
    STATE=STARTED 
    AS TCP (LISTENER_PORT=5022) 
    FOR DATABASE_MIRRORING (ROLE=ALL)
GO
Run Code Online (Sandbox Code Playgroud)

主服务器

CREATE AVAILABILITY GROUP AG1
    FOR
        DATABASE TestDb
    REPLICA ON
        'SQL1' WITH
            (
                ENDPOINT_URL = 'TCP://sql1.sql.sandbox.net:7022',
                PRIMARY_ROLE ( ALLOW_CONNECTIONS = READ_WRITE),
                SECONDARY_ROLE (ALLOW_CONNECTIONS=READ_ONLY),
                AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
                FAILOVER_MODE = MANUAL
            ),
        'SQL2' WITH
            (
                ENDPOINT_URL = 'TCP://sql2.sql.sandbox.net:5022',
                PRIMARY_ROLE ( ALLOW_CONNECTIONS = READ_WRITE),
                SECONDARY_ROLE (ALLOW_CONNECTIONS=READ_ONLY), …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012 availability-groups

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

具有可用性组的跨数据库事务

最近我们正在做一个 POC 来实现 Always on work 并且碰巧在 BOL 中看到了这篇文章

http://technet.microsoft.com/en-us/library/ms366279.aspx

这篇文章表明,我们在处理同步模式时也会存在逻辑上的不一致,但事实真的会如此吗?

例如,考虑事务正在运行的数据库 A 和 B,A 处于高安全模式并且 B 没有镜像。A 的日志必须转到镜像数据库,然后主数据库提交最终两阶段提交(B 上的事务)成功,但文章建议首先不会传输日志并导致 B 上的提交,这是矛盾的。请帮助我理解上述文章中建议的陈述是否属实。如果是的话怎么可能:)。

PS:如果我需要提供有关此的更多信息,请告诉我。

sql-server-2012 msdtc availability-groups

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

为现有的 AlwaysOn 数据库启用 TDE

我需要对 AlwaysOn 进行一些基准测试,无论是否启用 TDE。我看到的所有说明都涉及将加密数据库添加到可用性组,但我没有提到为 AG 中已有的数据库启用加密。

我可以将服务器证书恢复到所有节点,然后从主节点启用 TDE 吗?我希望我不需要从 AG 中删除数据库,对其进行加密,然后重新初始化所有节点,因为数据库大约为 100 GB。如果需要,我们可以这样做,但这肯定会减慢我们的测试速度。

更新

我只是在一些实验室虚拟机上尝试过这个。我能够在主节点上创建一个证书,在所有辅助节点上恢复它,然后使用这个证书在主节点上创建一个数据库加密密钥。之后我所要做的就是ALTER DATABASE AdventureWorks SET ENCRYPTION ON在主服务器上,一两分钟后,sys.dm_database_encryption_keys 在所有节点上都显示了 encryption_state = 3。

那么,后续问题:是否有任何理由认为我不应该使用此程序?SQL Server 似乎对结果很满意,但我还没有看到任何地方讨论过这种方法。在处理加密和高可用性问题时,我不想让事情碰运气。

sql-server sql-server-2012 availability-groups transparent-data-encryption

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

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 2012 上实现跨数据库任务?

我们使用 SQL Server 2012 及其新的可用性组 (AG) 功能。有一项任务是将某些表的旧数据从一个数据库移动到另一个数据库。两个数据库都包含在不同的可用性组中。

以前(在使用 AG 功能之前)通过将第二个服务器实例添加为链接服务器 ( sp_addlinkedserver) 并按以下方式执行分布式事务来解决该任务:

  1. 开始交易
  2. 将旧数据从 server1.table1 插入 server2.table2
  3. 从 server1.table1 中删除旧数据
  4. 提交事务

不幸的是,AG 不支持分布式事务,因为在故障转移的情况下数据库可能会变得不一致 ( http://technet.microsoft.com/en-us/library/ms366279.aspx )。

是否有某种方法可以在保留 AG 功能的情况下实现此任务,并且在发生异常时不实现回滚逻辑?

sql-server-2012 availability-groups distributed-transactions

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

如何检查可用性组中主节点的历史记录?

如何查看集群主节点的故障转移历史?我试图弄清楚辅助节点是在什么时候开始充当主要节点的。

我们正在运行带有 SQL Server 2012 和可用性组的 Windows Server 2012。

sql-server sql-server-2012 high-availability availability-groups

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

为什么 AlwaysOn 中的资源失败?

我在上面配置了两个 SQL Server (12.0.4100.1) 和可用性组 (AG)。有时某些服务器挂起。它响应 ping,但 RDP 连接不可用,SQL Server 不响应等等。重启后,一切正常。我试图找出服务器挂起的原因。我在两个节点上都获得了集群日志,并且有以下信息:

节点 1(主要):

000016e0.00001808::2015/12/12-09:41:13.053 INFO  [RES] SQL Server Availability Group: [hadrag] SQL Server component 'query_processing' health state has been changed from 'clean' to 'warning' at 2015-12-12 11:41:13.047
000016e0.00001808::2015/12/12-09:41:33.056 INFO  [RES] SQL Server Availability Group: [hadrag] SQL Server component 'query_processing' health state has been changed from 'warning' to 'clean' at 2015-12-12 11:41:33.050
0000118c.000038e4::2015/12/12-09:42:11.969 INFO  [API] s_ApiGetQuorumResource final status 0.
0000118c.000038e4::2015/12/12-09:42:11.969 INFO  [API] s_ApiGetQuorumResource final status 0.
0000118c.000038e4::2015/12/12-09:42:11.969 WARN  [API] s_ApiOpenResourceEx: Resource …
Run Code Online (Sandbox Code Playgroud)

sql-server availability-groups sql-server-2014

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

在可用性组数据库中部署和回滚更改

我正在寻找解决方案或工作流程。以下是我在使用独立服务器时进行数据库部署的方式:

  • 创建生产数据库的快照
  • 部署更改
  • 验证部署是否成功
  • 如果部署不成功,请从快照还原数据库。

我想对可用性组中的数据库执行类似的过程,但从备份或快照还原不是理想的选择,因为数据库相当大,我必须先将数据库从 AG 中取出。这是我正在寻找的理想解决方案类型:

  • 暂停 AG 中的数据移动
  • 将更改部署到主副本
  • 验证部署是否成功
  • 如果部署不成功,将主副本回滚到我们暂停数据移动并重新启动同步的 LSN。

有没有可行的方法来做到这一点?

我会使用BEGIN/ ROLLBACK TRANSACTION,但这在自动构建过程中更难实现,并且考虑到我想在提交或回滚之前首先检查结果(来自不同的数据库连接)。

snapshot availability-groups sql-server-2014

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