我们有两个生产 SQL Server 运行 SQL Server 2005 SP4 和累积更新 3。两台服务器都在相同的物理机器上运行。DELL PowerEdge R815 配备 4 个 12 核 CPU 和 512GB(是 GB)内存,以及用于所有 SQL 数据库和日志的 10GB iSCSI SAN 连接驱动器。操作系统是带有所有 SP 和 Windows 更新的 Microsoft Windows Server 2008 R2 企业版。操作系统驱动器是一个 RAID 5 阵列,包含 3 个 72GB 2.5" 15k SAS 驱动器。SAN 是一个 Dell EqualLogic 6510,带有 48 个 10K SAS 3.5" 驱动器,配置为 RAID 50,为 2 个 SQL Server 划分为各种 LUN,并且还共享带有一台 Exchange 机器和几台 VMWare 服务器。
我们有 20 多个数据库,其中 11 个使用见证服务器以高可用性镜像。见证服务器是一台运行 SQL Server 实例的低功耗机器,它除了提供见证服务外别无其他用途。最大的镜像数据库是 450GB,产生大约 100-300 iops。数据库镜像监视器报告的当前发送速率约为每秒 …
问题定义
我们的数据库服务器需要转移到另一个数据中心。它运行在 Microsoft SQL Server 2012 Enterprise(64 位)上,包含两个大约 2TB 和 1TB 的数据库。
几乎没有停机时间将是理想的。
工作量
这些数据库用于 .NET 网站,并且会不断更新。
不过,周末不可用也是可以接受的。当前使用的数据库将一直是唯一使用的数据库,直到切换到新数据库。
理想情况下,只需将 DNS 条目更改为指向新的数据库服务器,同时确保数据库未更新,即可实现该切换。
此外,只要从一台服务器切换到另一台服务器(停机时间)保持在较低水平,此操作所花费的时间并不重要。
考虑的方法
备份还原
过去曾这样做过,但即使是通过内部网络完成的,停机时间也很长,因此比通过 Internet更有效
日志传送
据我所知,这种方法可以通过配置主/从并将主数据库的精确副本传输到其只读从属来最大限度地减少停机时间。如上所述,不需要访问从属数据库,我们只需要一种方法来拥有主数据库的副本而不会损坏数据。
它在资源利用方面似乎也非常有效,并且不会对主性能产生太大影响。
我可能对这种方法有误,因此请随时纠正我。
数据库镜像
我不太了解这种方法,但它似乎是一个有效的选择。不需要实时同步,主节点的性能非常重要,因此如果选择这种方法,异步将是可行的方法。
其他选择?
该服务器直接在裸机硬件上运行,因此不幸的是,不能选择较低级别的解决方案。也许有更好的方法来完成这项工作?
约束
如上所述,这些数据库非常大,以至于难以维护,但这是另一个问题。
SQL Server 的版本将相同(Microsoft SQL Server 2012 Enterprise 64 位)。
它必须在两个数据中心之间通过网络传输,因此很可能通过 Internet 传输。不幸的是,将磁盘从一个站点发送到另一个站点进行初始同步并不是一种选择。为转移提供某种安全性是理想的,但我们会在这种情况下做到最好。
这应该很好地概述了我们对这项任务的需求,希望你们中的一些人以前不得不面对这种情况。
我安装了 SQL Server 2008 R2。它包含三个实例。
所有这些都是作为网络服务登录..
默认实例是主体服务器第一个实例是镜像第二个实例是见证服务器
我最初对我的主体数据库进行了完整备份和事务日志备份。通过保持相同的数据库名称将其恢复到第一个实例,恢复状态为无恢复
最后,我启动了镜像,并收到如下所示的两条错误消息。


我按照这个问题的顺序问这个问题我可以使用 T-SQL 通过 TCP 发送一个字符串吗?
Remus Rusanu 揭示了它似乎是我问题的最佳解决方案,但是......我太不成熟了,无法理解和理解他所说的一切。
到目前为止,我认为我需要为 DATABASE_MIRRORING_STATE_CHANGE 创建通知事件,我说得对吗?
我如何创建此事件通知,以使其触发时在表中插入一行,该行存储来自通知的时间戳和 ID。
到目前为止,我正在为每个 ID 设置一个警报,每个警报都运行这样的作业(此示例适用于 ID = 1):
DECLARE @state AS varchar(50);
SELECT @state = mirroring_state_desc FROM SYS.database_mirroring WHERE mirroring_guid IS NOT NULL;
IF (@state IS null) SET @state = ' ';
INSERT INTO MirroringAlerts (DateTime, alertID, alertDesc, Sync, alertCreator) values (SYSDATETIME(), 1, 'Principal synchronized with W ', @state, @@SERVERNAME)
Run Code Online (Sandbox Code Playgroud)
基本上我在这个数据库中创建一个内部日志:
CREATE TABLE [dbo].[MirroringAlerts](
[DateTime] [datetime] NOT NULL,
[alertID] [smallint] NOT NULL,
[alertDesc] [nchar](50) NOT NULL,
[Sync] [nchar](12) …Run Code Online (Sandbox Code Playgroud) SQL Server的数据库镜像功能即将消失:
此功能将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。请改用AlwaysOn 可用性组。
有谁知道什么时候?高可用性(和快速恢复)数据库有哪些选择?
我需要镜像一些数据库并在它们上使用透明数据加密(TDE),因为我们的数据必须在“静止”时加密。
我在主体和镜像上都设置了 TDE。我在设置两个数据库的镜像时遇到的问题。由于我使用的是 TDE,我不知道通过 gui 设置镜像的方法,所以我不得不使用 t-sql 来完成工作。
下面是我在镜像服务器上使用的代码
--Restore the full backup to the mirrored mdf and ldf
OPEN MASTER KEY DECRYPTION BY PASSWORD = '1Password'
RESTORE DATABASE TDE
FROM disk = '\\SERVERNAME\SQL_Stuff\Backup\TDE_FULL.bak'
WITH NORECOVERY,
REPLACE,
MOVE 'TDE' TO 'E:\TDE.mdf',
REPLACE,
MOVE 'TDE_log' TO 'G:\TDE.ldf'
CLOSE MASTER KEY
GO
--Restore the log backup to the mirrored db
OPEN MASTER KEY DECRYPTION BY PASSWORD = '1Password'
RESTORE LOG TDE
FROM DISK = '\\SERVERNAME\SQL_Stuff\Backup\TDE_LOG.trn'
WITH NORECOVERY;
CLOSE MASTER KEY …Run Code Online (Sandbox Code Playgroud) 我正在为我们的 SQL Server 开发人员创建一个测试环境。
在生产中,我们有 3 个 SQL Server,SQL01包含多个镜像到SQL02. SQL03在“具有自动故障转移的高安全性”或同步配置中充当见证人。
我已经使用 VMWare P2V 将所有三台机器虚拟化到单独的硬件上,重新配置机器的 SID,并从这些新机器上获取我们生产服务器的 IP 地址。
我一开始忘记了生产见证机器的黑洞,所以测试机器上的数据库仍然使用SQL03机器作为见证。注意到这个问题,我决定重新配置 TEST 上的数据库以指向新虚拟化的 TEST 见证,称之为TEST03.
为了重新配置数据库以使用新的见证,我在主服务器上输入了以下命令TEST01:
ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';
Run Code Online (Sandbox Code Playgroud)
反应出乎意料:
The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'. The database mirroring configuration was
not changed. Verify that the server is connected, and try again.
Run Code Online (Sandbox Code Playgroud)
我对这个错误消息感到非常困惑,因为配置在生产机器上确实有效,并且在测试机器上没有以任何方式进行修改。
为了让它工作,我需要LOGIN在测试见证上创建一个:
CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR …Run Code Online (Sandbox Code Playgroud) 我们有两个数据库设置用于在单个 SQL Server 实例上进行镜像:测试数据库和生产数据库。两者都使用完全相同的端点镜像到另一台服务器。
如果我进入测试数据库的数据库属性并单击“故障转移”按钮,它是否也会故障转移生产数据库,因为两个数据库共享一个镜像端点并且它们的服务器网络地址属性相同?

我很担心,因为当我为第二个数据库设置镜像时,我不需要配置任何新的东西。它只是使用了所有现有信息。
如果我使用“数据库属性”中的“故障转移”按钮,是否会导致故障转移使用该端点的所有数据库,或者只是我正在查看其属性的特定数据库?
有没有人成功镜像分发数据库?我们有一个专用服务器作为分销商。它处理我们从生产到报告的所有推送复制。我们想在附近建立一个相同的服务器,以防分销商崩溃。有没有人成功构建过这样的东西?
SQL Server 版本:2008 R2 Enterprise SP2
我正在尝试处理我们的 SQL Server 维护,但我遇到了一些我认为不正确的事情。我们有一个带有 3 个数据库的单个生产实例,每个数据库都异地镜像到一个 DR 实例。
在查看 DR 实例时,我注意到 LDF 文件很大,对于频繁使用的数据库超过 35GB。
我知道这可能是由于镜像数据库处于完全恢复模式并且日志从未备份过,它们只会继续增长,直到驱动器空间耗尽。
我们在主体数据库上做日志备份,我的问题是在镜像上做日志备份有什么问题?
在进行日志备份之前,必须至少完成一次来自镜像的完整数据库备份,在这种情况下,是否需要使用特殊选项,因为它是镜像?
这也是MIRROR数据库上的事务日志维护建议。
感谢您提供任何意见