数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle数据库与SQL Server数据库镜像对比


发布日期:2023年11月28日
 
Oracle数据库与SQL Server数据库镜像对比
数据库镜像是将数据库事务处理从一个数据库移动到不同环境中的另一个数据库中镜像的拷贝是一个备用的拷贝不能直接访问它只用在错误恢复的情况下Oracle数据库与MSSQL数据操作上有很大的不同但是在镜像操作方面有类比的地方这篇文章关于MSSQL数据库镜像在Oracle数据库中是如何实现的它们之间存在哪些差异呢
首先微软SQL数据库中的镜像数据库类似于Oracle数据库中的备用数据库我说的只是类似确切的说我们需要考虑不同数据库在自己体系中的差异MSSQL作为一个实例来操作一个实例包含几个数据库你首先要登录一个实例然后选择哪个数据库作用于该实例而在Oracle数据库中简单模式(忽略RAC)就只有一个数据库与一个实例相联系因此可以这么说在Oracle数据库中备份数据库(standby database)就完全是主数据库的快照而在MSSQL中镜像数据库仅仅是选择的那个数据库的备份但没有包括代理登录任务(这些或者更多的数据库项目需要单独在数据库镜像上创建或者复制)这些外部数据项
在服务器数量上Oracle的主数据库和备用数据库配置最小需要在MSSQL中最小数据是个或根据你所选择的高可用性高安全性高性能方式所决定
高可用性方式这个操作模式选项允许你在两台服务器上同步事务写入并支持自动错误恢复要使用这个选项你必须还要使用一个证人服务器
高保护方式这个选项可以让你在两台服务器上同步事物写入但是错误恢复是手工的因为自动的错误恢复不是这个选项的一部分所以也不会用到证人服务器
高性能方式这个选项不关心两台服务器上的写入是否是同步的因此在性能上有所提高当使用这个选项的时候你只能假设镜像服务器上的所有事情都是成功完成这个选项只允许手工的错误恢复因此不会用到证人服务器
为了保证故障自动恢复就需要有第三台服务器可以称之为目击者(另外两个就是主数据库和镜像数据库)你可以将这个目击者当作群集中的一个成员它实现了投票的能力当我的一个组件不可达并因此需要进行错误恢复的时候证人服务器只有在你想实现自动错误恢复的时候才需要用到
在Oracle数据的一个事务中日志缓沖器在废数据写入数据文件(忽略writeahead情况)前被刷新或者写入到redo日志中这种刷新或者写入到redo日志的行为是有必要的如像实例失败(使用前滚和回滚恢复过程)这样的事件发生时MSSQL也承认将日志缓沖器写入到磁盘的重要性不过这里称之为硬化(hardening)首先将事务日志缓沖器的信息写入到磁盘或者硬化接着将日志记录块发送到镜像数据库中镜像数据库接收到该日志记录块后将之存入到某个缓沖器中随后依次硬化该日志记录块
当数据发生变化时MSSQL数据库如何保持主数据库和镜像数据库的一致性呢?
Oracle用户非常熟悉SCN而MSSQL用户通过使用mirroring_failover_lsn机制(粗略来讲就是一个日志序列号) MSSQL与Oracle不同MSSQL将事务分离(两个事务在两个机器上)而不是一个分布式事务(在自身提交前需要远程等待提交)
另外一个相似点但稍微有些畸变的反射就是redo日志和事务日志在Oracle中完成的redo日志将被发送到远程的服务器中将完成的 redo日志应用到备份数据中去在MSSQL中事务日志没有被传输但是就像我以上提到的日志缓沖器数据发送到网络上这就导致另外一个镜像反射备份和恢复模式
在Oracle中当你处于归档模式或者非归档模式的时候这些操作是内定的如果归档redo日志被传输或者提交到一个远程的服务器那么主数据库明显就是在归档模式下那些文件就是这么产生的运行在这种模式下允许有少量的数据丢失因为在发生故障(无论什么样的故障)前恢复能够在任意一个点上执行在MSSQL中是类似的但是有三种状态需要选择
《SQL Server联机丛书》像许多其它的在线资源一样讲述了在使用MSSQL时种恢复模式的不同点快速的比较有MSSQL完整模式对应于 Oracle中的归档模式;简单模式对应于非归档模式;bulk模式与使用直接路径插入添加提示或者与nologging模式操作类似
根据以上三种模式(这三种模式很容易转换不需要关机或者重启)的描述以及日志缓沖器和归档redo日志的讨论中很容易断定在MSSQL中进行数据库的镜像需要将数据的回复模式设置成完全模式(full model)简单模式(Simple model)或许也能行但是这种模式下维持事务日志中的小部分数据在备份中如果在日志被删节了整个镜像过程也就破环了因为当你在将事务发送到镜像数据库中的时候如果日志被删节了这个过程就不能完成
说到数据库被破坏该怎么办呢?
这正是镜像(或者说备份)的主要目的当主数据库断开或者说遇到故障时候我们希望系统能回到镜像前或者备份前的状况去这如何才能实现呢?我们能自动实现或者手动实现想实现这些需要一些已经完成的设置在MSSQL中自动故障恢复回到原来状态需要在HA模式事务安全是full数据传输是同步有目击服务器的情况下这种模式下运行还需要使用企业版的数据库系统高安全性和高性能在标准版的情况下也能实现
MSSQL还有其它版本的选择但是这些并不如Oracle的反射干净这些版本包括DeveloperWorkgroup 和 SQL Express举个例子目击服务器能够是任何的版本但是如果你想给镜像服务器做一个快照那么你就需要企业或者开发版的了(wwwliancom)
在设置伙伴(partner通常有主数据库和镜像数据库组成)过程中他们的恢复状态开始起作用通过使用相同的名字镜像在远程/镜像服务器上建立(使用配置数据库镜像安全向导是最简单的方法)起来并且镜像数据库被设置成NORECOVERY通常它是恢复(recovering)状态的在 MSSQL中恢复数据库是没有的因此没有进行上述的设置是不能被其他用户当作只读数据库来使用的
为了避免这个中缺陷你可以给镜像做一个快照使得该影像对用户可见正如我上述所提到的那样这需要你的数据库版本是企业(或者开发)版这就意味着用户需要有快照数据库的知识知道如何进入存储它如何告诉应用程序使用哪个数据库惯例上来说配置文件使用的NET环境你能建立一个主数据库和一个故障回滚的辅数据库如果在Oracle中配置过备份数据库你就会觉得这很类似

上一篇:解决SQL Server 5120 5123错误

下一篇:SQL Server 2008安装过程中出现1608错误的解决办法