我继承了两个带有两个镜像数据库的 SQL 2016 服务器。
它们是使用证书构建的,因为它们在工作组中,证书在六个月后到期。我正在尝试了解用寿命更长的新证书替换证书的过程,以及该过程是否可以在线完成而无需停机?
只是为了确认证书尚未过期,我只是积极主动。
我在想这样的事情:
- 创建有效期更长的新证书
- 将证书备份到文件并在主服务器和辅助服务器之间复制
- 将具有授权的证书还原到现有镜像用户,无需创建新用户
- 更改现有端点以指向新证书
- 清理
我继承了两个带有两个镜像数据库的 SQL 2016 服务器。
它们是使用证书构建的,因为它们在工作组中,证书在六个月后到期。我正在尝试了解用寿命更长的新证书替换证书的过程,以及该过程是否可以在线完成而无需停机?
只是为了确认证书尚未过期,我只是积极主动。
我在想这样的事情:
我有一个处于模式的Synchronized
数据库和另一个处于Initializing / In Recovery
模式的数据库。它们都已从其可用性组中删除,我什至无法删除它们。它们都在辅助服务器中,我什至无法进行故障转移。任何帮助深表感谢。
更新
当我尝试以这种状态删除数据库时:Initializing / In Recovery
,它说Lock request time out period exceeded.
当我尝试以这种状态删除数据库时:Synchronized
,它说certain operations cannot be performed while database is in a mirroring session.
,即使我已将其从其可用性组中删除。
我在Server1
(主要)和Server2
(次要)之间有一个高安全模式的数据库镜像会话
据此,同步数据镜像意味着
在主体数据库上提交的每个事务也会在镜像服务器上提交,从而保证数据的保护。这是通过等待在主体数据库上提交事务来实现的,直到主体服务器收到来自镜像服务器的消息,说明它已将事务的日志硬化到磁盘。请注意,等待此消息会增加事务的延迟
考虑到这一点,如果我Server1
完全失去(并且无法恢复)并使用
ALTER DATABASE [MyDatabase] SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS
我只会丢失正在进行的交易Server1
吗?
我们在服务器(服务器 A)上安装了 TFS 版本 15.105.27412.0,并将其配置为指向我们的数据库服务器(服务器 B)。
我们有两个 TFS 数据库 (tfs_defaultcollection
和tfs_configuration
) ServerB
,它们被镜像ServerC
,但是 TFS 配置管理器中的连接字符串不是“镜像感知” - 请参见下面的 TFS 管理控制台屏幕截图
此外,如果我如下查询 TFS 配置数据库
SELECT * FROM Tfs_configuration.dbo.tbl_Database
这确认了两个数据库的连接字符串都没有指定故障转移伙伴。
今天早上我们有一个计划的故障转移ServerB
,ServerC
其中包括两个TFS
数据库,令所有人惊讶的是,它TFS
继续与数据库一起failover
运行并在ServerC
.
我停止了 SQL Server 服务ServerB
并运行了一个ExtendedEvents
会话ServerC
(查找访问TFS
数据库的查询),并且可以确认TFS
应用程序确实在查询ServerC
。
这怎么发生的?TFS 安装不知道ServerC
存在,是在 SQL Server 级别发生了什么吗?
是否需要对镜像数据库进行数据库完整性检查(DBCC 检查)?
数据库镜像和 Always On 可用性组支持自动页面修复。在某些类型的错误损坏页面,使其无法读取后,数据库镜像伙伴(主要或镜像)或可用性副本(主要或辅助)会尝试自动恢复该页面。
你的最佳做法是什么?
尝试运行以下命令:
ALTER DATABASE myDB SET WITNESS = 'TCP://myServer.local:7024';
我不断收到以下错误:
消息 1456,级别 16,状态 3,第 21 行 ALTER DATABASE 命令无法发送到远程服务器实例“TCP://myServer.local:7024”。数据库镜像配置未更改。验证服务器是否已连接,然后重试。
尝试检查防火墙端口,确保证书有效,确保端点被授予访问权限。
SQL 日志显示以下消息:
数据库镜像登录尝试失败并出现错误:'连接握手失败。没有兼容的身份验证协议。状态 21。
我的合作伙伴法定人数工作正常,但需要见证人才能达到完全法定人数。使用证书进行身份验证(无域)。有没有人遇到过这个?
前向澄清:我在这个问题中使用 RPO 来描述“估计的数据丢失”,并使用 RTO 来描述“估计的恢复时间”。我意识到它们不是确切的定义,但对于这个问题来说已经足够接近了。
在本文的底部,有一段优秀的代码块用于计算给定的 Always-On 启用实例的 RPO:
--@EstimatedDataLoss (RPO)
WITH DR_CTE ( replica_server_name, database_name, last_commit_time)
AS
(
select ar.replica_server_name, database_name, rs.last_commit_time
from master.sys.dm_hadr_database_replica_states rs
inner join master.sys.availability_replicas ar on rs.replica_id = ar.replica_id
inner join sys.dm_hadr_database_replica_cluster_states dcs on dcs.group_database_id = rs.group_database_id and rs.replica_id = dcs.replica_id
where replica_server_name != @@servername
)
select ar.replica_server_name, dcs.database_name, rs.last_commit_time, DR_CTE.last_commit_time 'DR_commit_time', datediff(ss, DR_CTE.last_commit_time, rs.last_commit_time) 'lag_in_seconds'
from master.sys.dm_hadr_database_replica_states rs
inner join master.sys.availability_replicas ar on rs.replica_id = ar.replica_id
inner join sys.dm_hadr_database_replica_cluster_states dcs on dcs.group_database_id = rs.group_database_id and rs.replica_id = dcs.replica_id
inner join DR_CTE on DR_CTE.database_name = dcs.database_name
where ar.replica_server_name = @@servername
order by lag_in_seconds desc
通过我自己的一些修改,可以为 RTO 导出类似的查询:
--@EstimatedRecoveryTime (RTO)
select ar.replica_server_name, dcs.database_name, rs.redo_queue_size, rs.redo_rate, rs.redo_queue_size/rs.redo_rate as TRedo
from master.sys.dm_hadr_database_replica_states rs
inner join master.sys.availability_replicas ar on rs.replica_id = ar.replica_id
inner join sys.dm_hadr_database_replica_cluster_states dcs on dcs.group_database_id = rs.group_database_id and rs.replica_id = dcs.replica_id
where ar.replica_server_name != @@servername
这些指标适用于我的 Always-On 环境,但我希望在某些 2012 年之前的环境中对 SQL 镜像应用相同的指标。
是否有类似的系统对象来计算 SQL 镜像的相同指标?
注意:我对什么算作 RTO 和 RPO 的引用来自这篇 Mircosoft 文章:
https://msdn.microsoft.com/en-us/library/dn135338(v=sql.110).aspx
我需要在两个地理位置不同的服务器上实现数据库镜像。
我的任务是确保数据库的备份时间不超过实时数据库的 1 天。
这是我目前在服务器上安装的内容以及服务器如何通过 WAN 连接的草图的链接。我的问题是,鉴于我目前的配置。
为了使镜像成为可能,我需要什么?本质上,我需要购买或升级什么才能使镜像成为可能。提前致谢。
我很确定答案是什么,但我想确认这一点。有没有办法创建 SQL Server 2012 到 SQL Server 2016 的混合数据库镜像。
当从 P 到 S 进行数据库故障转移时,我正在对主服务器和辅助服务器之间的登录和作业进行手动比较。我将登录和作业从一台服务器复制到 excel,并将它们与另一台服务器上的进行比较。
有人可以建议一种方法来至少自动执行此检查的一部分吗?
注意 - 我在进行数据库故障转移之前执行此操作作为预检查,只是为了确保辅助数据库与主体相比没有丢失任何内容,以避免在镜像数据库故障转移后中断。