SQL数据库与oracle数据库镜像有什么不同对比_数据库其它

Oracle数据库与MSSQL数据操作上有很大的不同,但是,在镜像操作方面有类比的地方。这篇文章关于MSSQL数据库镜像在Oracle数据库中是如何实现的,它们之间存在哪些差异呢。

首先,微软SQL数据库中的镜像数据库类似于Oracle数据库中的备用数据库。我说的只是类似,确切的说,我们需要考虑不同数据库在自己体系中的差异。MSSQL作为一个实例来操作,一个实例包含几个数据库,你首先要登录一个实例,然后选择哪个数据库作用于该实例。而在Oracle数据库中,简单模式(忽略RAC)就只有一个数据库与一个实例相联系。因此,可以这么说,在Oracle数据库中,备份数据库(standby database)就完全是主数据库的快照。而在MSSQL中,镜像数据库仅仅是选择的那个数据库的备份,但没有包括代理,登录,任务(这些或者更多的数据库项目需要单独在数据库镜像上创建或者复制)这些外部数据项。

在服务器数量上,Oracle的主数据库和备用数据库配置最小需要2台。在MSSQL中,最小数据是2个或3个,根据你所选择的高可用性、高安全性、高性能方式所决定。

高可用性方式:这个操作模式选项允许你在两台服务器上同步事务写入,并支持自动错误恢复。要使用这个选项,你必须还要使用一个证人服务器。

高保护方式:这个选项可以让你在两台服务器上同步事物写入,但是错误恢复是手工的。因为自动的错误恢复不是这个选项的一部分,所以也不会用到证人服务器。

高性能方式:这个选项不关心两台服务器上的写入是否是同步的,因此在性能上有所提高。当使用这个选项的时候,你只能假设镜像服务器上的所有事情都是成功完成。这个选项只允许手工的错误恢复,因此不会用到证人服务器。

为了保证故障自动恢复,就需要有第三台服务器,可以称之为目击者(另外两个就是主数据库和镜像数据库),你可以将这个目击者当作群集中的一个成员。它实现了2比1投票的能力,当我的一个组件不可达,并因此需要进行错误恢复的时候。证人服务器只有在你想实现自动错误恢复的时候才需要用到。

在Oracle数据的一个事务中,日志缓冲器在废数据写入数据文件(忽略write-ahead情况)前被刷新或者写入到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时,3种恢复模式的不同点。快速的比较有:MSSQL完整模式对应于Oracle中的归档模式;简单模式对应于非归档模式;bulk模式与使用直接路径插入,添加提示,或者与nologging模式操作类似。

根据以上三种模式(这三种模式很容易转换,不需要关机或者重启)的描述以及日志缓冲器和归档redo日志的讨论中,很容易断定在MSSQL中进行数据库的镜像需要将数据的回复模式设置成完全模式(full model)。简单模式(Simple model)或许也能行,但是这种模式下维持事务日志中的小部分数据,在备份中,如果在日志被删节了,整个镜像过程也就破环了,因为当你在将事务发送到镜像数据库中的时候,如果日志被删节了,这个过程就不能完成。

说到数据库被破坏该怎么办呢?

这正是镜像(或者说备份)的主要目的:当主数据库断开或者说遇到故障时候我们希望系统能回到镜像前或者备份前的状况去。这如何才能实现呢?我们能自动实现或者手动实现。想实现这些,需要一些已经完成的设置。在MSSQL中,自动故障恢复,回到原来状态需要在HA模式,事务安全是full,数据传输是同步,有目击服务器的情况下。这种模式下运行还需要使用企业版的数据库系统。高安全性和高性能在标准版的情况下也能实现。
MSSQL还有其它版本的选择,但是这些并不如Oracle的反射“干净”,这些版本包括:Developer、Workgroup 和 SQL Express。举个例子,目击服务器能够是任何的版本,但是如果你想给镜像服务器做一个快照,那么你就需要企业或者开发版的了。

在设置伙伴(partner,通常有主数据库和镜像数据库组成)过程中,他们的恢复状态开始起作用。通过使用相同的名字,镜像在远程/镜像服务器上建立(使用配置数据库镜像安全向导是最简单的方法)起来,并且镜像数据库被设置成NORECOVERY,通常它是恢复(recovering)状态的。在MSSQL中,恢复数据库是没有的,因此没有进行上述的设置,是不能被其他用户当作只读数据库来使用的。

为了避免这个中缺陷,你可以给镜像做一个快照,使得该“影像”对用户可见。正如我上述所提到的那样,这需要你的数据库版本是企业(或者开发)版。这就意味着用户需要有快照数据库的知识,知道如何进入存储它,如何告诉应用程序使用哪个数据库。惯例上来说,配置文件使用的.NET环境,你能建立一个主数据库和一个故障回滚的辅数据库。如果在Oracle中配置过备份数据库,你就会觉得这很类似。

结论

这篇文章内容包括按照Oracle的方式,如何更好的理解在另一种主流的RDBMS上执行镜像或者复制,。试着学习和解释你的RDBMS如何工作的,从另外一种模式来得到你的注意有助于你搞清楚你当前数据库系统运行原理。举个例子,我发现非常有实用价值的是Oracle归档模式和MSSQL三种恢复模式之间的关系。使用在MSSQL中的一些术语(伙伴,主数据库,目击,镜像)有助于你构成和识别Oracle中执行数据库镜像的操作。
为了更好的评价数据库镜像是如何运作,如何实施的,你可以运行两个单独的MSSQL实例,操作系统是XP或者是2003都没有关系。按照MSDN联机丛书的步骤完成一遍。下载或者选用AdventureWorks数据库(类似于Oracle的HR/SH数据库等。这些都没有预安装的),将其镜像到主机服务器上。呈现在你面前的不仅仅是另外一个数据的所具有功能特性,你将还会看到MSSQL所具有的操作,得到自己的正确评价(我平时使用的是Oracle数据库,测试用的是MSSQL,反过来说,你平时使用的是MSSQL,现在用Oracle来测试的话,也会有新的发现)。

时间: 2024-09-13 03:03:35

SQL数据库与oracle数据库镜像有什么不同对比_数据库其它的相关文章

SQL Server与Oracle在并行处理方法方面的对比

数据库并行访问,也就是两个或两以上用户同时访问同一数据,这也是数据库引擎如何设计和实现适 度反应所面临的最大问题.设计优良.性能卓越的数据库引擎可以轻松地同时为成千上万的用户服务.而 "底气不足"的数据库系统随着更多的用户同时访问系统将大大降低其性能.最糟糕的情况下甚至可能导 致系统的崩溃. 当然,并行访问是任何数据库解决方案都最为重视的问题了,为了解决并行访问方面的问题各类数据 库系统提出了各种各样的方案. SQL Server和Oracle两大DBMS也分别采用了不同的并行处理方法

数据库设计规范化的五个要求 推荐收藏_数据库其它

若符合这两个条件,则可以说明这个数据库的规范化水平还是比较高的.当然这是两个泛泛而谈的指标.为了达到数据库设计规范化的要求,一般来说,需要符合以下五个要求. 要求一:表中应该避免可为空的列. 虽然表中允许空列,但是,空字段是一种比较特殊的数据类型.数据库在处理的时候,需要进行特殊的处理.如此的话,就会增加数据库处理记录的复杂性.当表中有比较多的空字段时,在同等条件下,数据库处理的性能会降低许多. 所以,虽然在数据库表设计的时候,允许表中具有空字段,但是,我们应该尽量避免.若确实需要的话,我们可以

WordPress导入数据库出现”Unknown collation: ‘utf8mb4_unicode_ci”错误的解决办法_数据库其它

从WordPress4.2版本开始,如果我们在MYSQL5.1版本数据中导出的数据编码是带有utf8mb4格式的,如果我们搬迁网站复原数据的时候,MYSQL5.5等高版本数据库导入到MYSQL5.1低版本的时候会出现"Unknown collation: 'utf8mb4_unicode_ci"错误问题,以前是没有这个问题的,从WP4.2开始才有的. 要解决这个问题,如果我们使用的VPS/服务器,可以类似老左昨天的"Linux CentOS6环境下MySQL5.1升级至MyS

为什么ASP中执行动态SQL总报错误信息?提示语句语法错误_数据库相关

问:为什么ASP中执行动态SQL总报错误信息?提示语句语法错误 答: 有时候写ASP用conn.execute(sql)查询.更新.插入Access数据库数据时,明明正确的语句却往往会显示sql语句错误,相当恼火,特进行了归纳,可适当为字段添加"["."]"解决: 复制代码 代码如下: 例1:select * from a  如出现错误,可改为:select * from [a]  例2:UPDATE [user] SET password = '"&am

sql学习之CASE WHEN THEN ELSE END的用法_数据库其它

超强:SQL命令中的case...when...then...else...end条件查询(不同于where) 与 类型转换的用法 case...when...then...else...end,是在from前面,可以改变记录中某字段的值,不能决定是否显示该记录: where,是在from后面,不可以改变记录中某字段的值,但可以决定是否显示该记录. case...when...then...else...end,可用于对同一记录的多个字段求和,带分支判断. 另外,对字段判断和处理,往往需要强制类

掌握SQL Server数据库快照的工作原理第1/2页_数据库其它

数据库快照是怎样工作的?  可以使用典型的数据库命令CREATE DATABASE语句来生成一个数据库快照,在声明中有一个源数据库快照的附加说明.当快照被建立时,同时生成一个稀疏文件.这个文件(只能使用在NTFS卷中)在初始化的时候并没有磁盘空间分配给它--尽管你可能在WINDOWS资源管理器中看到了文件的大小,它会看上去与原始的源数据库文件的大小相同.对磁盘来说其实这个文件的大小接近于零.  数据库快照在初始化时读的数据文件是来自于源数据库的.当源数据库的数据发生变化时,数据引擎就会将原始数据

SQL注入之基于布尔的盲注详解_数据库其它

基于布尔的盲注 Web的页面的仅仅会返回True和False.那么布尔盲注就是进行SQL注入之后然后根据页面返回的True或者是False来得到数据库中的相关信息. 由于本次是布尔注入,手注无法完整地进行脱裤.所以在本节需要编写大量的代码来帮助我们进行SQL注入,得到数据.所以在这章里面会有很多的Python代码. 本次的示例就是Less-8. 通过进行下面的语句的注入测试 http://localhost/sqlilabs/Less-8/?id=2' http://localhost/sqli

sql 插入数据的三种常用方法及小贴士_数据库其它

复制代码 代码如下: INSERT INTO table1(id, name, address) VALUES(1, ygl, 'beijing') 适用于T-sql和PL/SQL SELECT id, name, address INTO table2 FROM table1 自动创建table2,T-sql用法 INSERT INTO table2(id, name, address) SELECT id, name, address FROM table1 这里简单说一下第三句,由于可以指

SQL中代替Like语句的另一种写法_数据库其它

比如查找用户名包含有"c"的所有用户, 可以用 use mydatabase select * from table1 where username like'%c%" 下面是完成上面功能的另一种写法: use mydatabase select * from table1 where charindex('c',username)>0 这种方法理论上比上一种方法多了一个判断语句,即>0, 但这个判断过程是最快的, 我想信80%以上的运算都是花在查找字 符串及其它