您的位置  > 互联网

微软SQL数据库镜像在MSSQL中是如何实现的?

首先, SQL 数据库中的镜像数据库类似于数据库中的备用数据库。 我只是谈论相似之处。 准确地说,我们需要考虑不同数据库在各自系统中的差异。 MSSQL 作为实例运行。 一个实例包含多个数据库。 您必须先登录到实例,然后选择将作用于该实例的数据库。 在数据库中,简单模式(忽略RAC)只有一个数据库与一个实例关联。 因此,可以说,在数据库中,备份数据库()完全是主数据库的快照。 在MSSQL中,镜像数据库只是所选数据库的备份,但不包括代理、登录名和任务等外部数据项(这些或更多数据库项需要在数据库镜像上单独创建或复制)。

服务器数量方面,主库和备库配置最少需要2台。在MSSQL中,最少数据是2台或3台,具体取决于您选择的高可用、高安全、高性能的方式。

高可用性模式:此操作模式选项允许您跨两台服务器同步事务写入并支持自动错误恢复。 要使用此选项,您还必须使用见证服务器。

高保护模式:此选项允许您同步两台服务器上的事务写入,但错误恢复是手动的。 由于自动错误恢复不是此选项的一部分,因此不会使用见证服务器。

高性能模式:该选项不关心两台服务器上的写入是否同步,因此提高了性能。 使用此选项时,您只能假设镜像服务器上的所有操作均已成功完成。 此选项仅允许手动错误恢复,因此不使用见证服务器。

为了保证故障自动恢复,需要第三台服务器,可以称为见证服务器(另外两个是主数据库和镜像数据库)。 您可以将此见证人视为集群的成员。 当我的组件之一无法访问并因此需要错误恢复时,它实现了以 2 比 1 投票的能力。 仅当您想实现自动错误恢复时才需要见证服务器。

在数据事务中,在将废弃数据写入数据文件之前,日志缓冲区会被刷新或写入重做日志(忽略预写条件)。 当发生实例故障等事件时(使用前滚和回滚恢复过程),需要刷新或写入重做日志。 MSSQL 还认识到将日志缓冲区写入磁盘的重要性。 但这里叫()。 首先将事务日志缓冲区信息写入磁盘或进行硬化,然后将日志记录块发送到镜像数据库。 镜像数据库收到日志记录块后,将其存储在缓冲区中,然后依次对日志记录块进行硬化。

当数据发生变化时,MSSQL数据库如何保持主库和镜像库的一致性?

用户对SCN非常熟悉,MSSQL用户使用sn机制(粗略地说就是日志序列号)。 与MSSQL不同,MSSQL分离事务(两台机器上的两个事务),而不是分布式事务(需要远程等待提交,然后再提交自己)。

另一个相似但略有扭曲的反映是重做日志和事务日志。 中,完成的重做日志将发送到远程服务器,并将完成的重做日志应用到备份数据中。 在MSSQL中,事务日志不会被传输,但是正如我上面提到的,日志缓冲区数据是通过网络发送的。 这就引出了另一种镜像反射:备份和恢复模式。

在 中,当您处于存档模式或非存档模式时,这些操作是默认的。 如果归档重做日志被传输或提交到远程服务器,那么主数据库显然处于归档模式,这就是文件的生成方式。 在此模式下运行允许少量数据丢失,因为可以在发生故障(无论何种故障)之前的任何点执行恢复。 MSSQL中也类似,不过有3种状态可供选择。

SQL 联机丛书与许多其他在线资源一样,描述了使用 MSSQL 时三种恢复模型之间的差异。 快速对比一下:MSSQL完整模式对应归档模式; 简单模式对应非归档模式; 批量模式对应于使用直接路径插入、添加提示或类似的模式操作。

根据以上三种模式的描述(这三种模式很容易转换,无需关机或重启)以及对日志缓冲区和归档重做日志的讨论,很容易得出在MSSQL中镜像数据库需要的恢复模式将数据集设置为完整模型。 简单模型也可能有效,但在这种模式下,事务日志中的一小部分数据会被维护。 在备份中,如果日志被删除,整个镜像过程就会被破坏,因为当你将事务发送到镜像数据库时如果日志被截断,则该过程无法完成。

当数据库损坏时该怎么办?

这就是镜像(或备份)的主要目的:当主数据库断开连接或遇到故障时,我们希望系统能够恢复到镜像或备份之前的状态。 如何才能实现这一目标? 我们可以自动或手动完成。 为此,需要完成一些设置。 在MSSQL中,自动故障恢复并恢复到原始状态需要HA模式,事务安全性充分,数据传输同步,并且有服务器见证。 在这种模式下运行还需要使用企业版的数据库系统。 标准版本还实现了高安全性和高性能。

还有其他版本的 MSSQL 可供选择,但这些版本不像 那样“干净”,其中包括:SQL、SQL 和 。 例如,见证服务器可以是任何版本,但如果你想对镜像服务器进行快照,那么你需要企业版或开发版。

在伙伴(通常由主数据库和镜像数据库组成)的设置过程中,它们的恢复状态开始发挥作用。 通过使用相同的名称,在远程/镜像服务器上设置镜像(使用配置数据库镜像安全向导是最简单的方法),并将镜像数据库设置为 () 状态。 在MSSQL中,没有恢复数据库,因此如果没有上述设置,就无法被其他用户用作只读数据库。

为了避免这个陷阱,您可以拍摄图像快照,以便用户可以看到“图像”。 正如我上面提到的,这要求您的数据库版本是 (或 )。 这意味着用户需要了解快照数据库,知道如何访问它,以及如何告诉应用程序使用哪个数据库。 传统上,对于.NET环境下的配置文件,可以创建主数据库和从数据库进行回滚。 如果您在 中配置了备份数据库,您会发现这非常相似。

综上所述

本文介绍如何更好地理解如何在另一个流行的 RDBMS 上执行镜像或复制。 尝试学习并解释 RDBMS 的工作原理。 从另一个模型中获得注意力可以帮助您了解当前数据库系统的工作原理。 比如我觉得很实用的就是MSSQL的归档模式和三种恢复模式之间的关系。 MSSQL 中使用的一些术语(伙伴、主控、见证、镜像)可帮助您构建和识别执行数据库镜像所涉及的操作。

为了更好地评估数据库镜像的工作原理和实现方式,您可以运行两个单独的 MSSQL 实例,无论操作系统是 XP 还是 2003。按照 MSDN 联机丛书中的步骤完成。 下载或选择一个数据库(类似于HR/SH数据库等,这些不是预装的)并将其镜像到主机服务器。 呈现给你的不仅仅是另一个数据的功能特性,你还会看到MSSQL的操作并得到你自己的正确评价(我通常使用数据库,测试使用MSSQL,反之亦然。比如说,你通常使用MSSQL,如果你现在用它来测试,你也会有新的发现)。