数据库镜像是将数据库事务处理从一个数据库移动到不同环境中的另一个数据库中。镜像的拷贝是一个备用的拷贝,不能直接访问,它只用在错误恢复的情况下。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。举个例子,目击服务器能够是任何的版本,但是如果你想给镜像服务器做一个快照,那么你就需要企业或者开发版的了。(www.3lian.com)
在设置伙伴(partner,通常有主数据库和镜像数据库组成)过程中,他们的恢复状态开始起作用。通过使用相同的名字,镜像在远程/镜像服务器上建立(使用配置数据库镜像安全向导是最简单的方法)起来,并且镜像数据库被设置成NORECOVERY,通常它是恢复(recovering)状态的。在 MSSQL中,恢复数据库是没有的,因此没有进行上述的设置,是不能被其他用户当作只读数据库来使用的。
为了避免这个中缺陷,你可以给镜像做一个快照,使得该“影像”对用户可见。正如我上述所提到的那样,这需要你的数据库版本是企业(或者开发)版。这就意味着用户需要有快照数据库的知识,知道如何进入存储它,如何告诉应用程序使用哪个数据库。惯例上来说,配置文件使用的.NET环境,你能建立一个主数据库和一个故障回滚的辅数据库。如果在Oracle中配置过备份数据库,你就会觉得这很类似。
Oracle数据库与SQL Server数据库镜像对比
时间: 2024-10-04 21:06:04
Oracle数据库与SQL Server数据库镜像对比的相关文章
【原创:数据库】SQL SERVER数据库开发之存储过程应用
可能有不少朋友使用SQL SERVER做开发也已经有段日子,但还没有或者很少在项目中使用存储过程,或许有些朋友认为根本没有必要使用存储过程等等.其实当你一个项目做完到了维护阶段时,就会发现存储过程给我们带来了好处了,修改方便,不能去改我们的应用程序,只需要改存储过程的内容,而且还可以使我们的程序速度得到提高. QUOTE: SQL SERVER 联机丛书中的定义: 存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合. 可以创建一个过程供永久使用,或在一个会话
Oracle与SQL Server数据库的区别
随着信息技术的飞速发展,数据处理不仅在数量上要求越来越大,而且在质量上也要求越来越高. 操作系统的稳定对数据库来说是十分紧要的,在数据库可操作平台上,Oracle可在所有主流平台上运行,Oracle数据库采用开放的策略目标,它使得客户可以选择一种最适合他们特定需要的解决方案.客户可以利用很多种第三方应用程序.工具.对开发商来说是很大的支持.而SQL Server却只能在Windows上运行了,这个就显得比较单调了,但SQL Sever在Window平台上的表现,和Windows操作系统的整体结合
ORACLE 创建DBlink访问SQL SERVER数据库
Oracle中使用透明网关链接到Sqlserver 在最近项目中需要从Oracle中访问SQL Server数据库, 自然想到了透明网关. 因为Oracle数据库是Linux上的, 而Linux上的Oracle9i不包括连接到SQL Server的透明网关.就在一台单独的Windows服务器上安装了透明网关用做Oracle访问SQL Server的桥梁. 环境如下: Oracle Database Server:Linux + oracle 9.2.0.4 IP:10.194.129.197
人人都是 DBA(V)SQL Server 数据库文件
原文:人人都是 DBA(V)SQL Server 数据库文件 SQL Server 数据库安装后会包含 4 个默认系统数据库:master, model, msdb, tempdb. SELECT [name] ,database_id ,suser_sname(owner_sid) AS [owner] ,create_date ,user_access_desc ,state_desc FROM sys.databases WHERE database_id <= 4; master mas
PowerShell连接SQL SERVER数据库进行操作的实现代码_PowerShell
核心代码 #配置信息 $Database = 'DemoDB' $Server = '"WIN-AHAU9NO5R6U\DOG"' $UserName = 'kk' $Password = '123456' #创建连接对象 $SqlConn = New-Object System.Data.SqlClient.SqlConnection #使用账号连接MSSQL $SqlConn.ConnectionString = "Data Source=$Server;Initial
SQL Server数据库对于应用程序的关系
以下的文章主要是介绍SQL Server数据库与其实际应用元数据,我前两天在相关网站看见SQL Server数据库与其实际应用元数据的资料,觉得挺好,就拿出来供大家分享,希望会给大家带来一些帮助在此方面. 我常被问到如何把驻留在物理服务器/SQL 实例上的SQL Server数据库转变为它们相应的应用程序名称.在准备计划好的服务器停机通知时,这种需要就产生了,但在我的组织内与IT经理或非技术人员沟通时,这也是有价值的.如果你不是数据 我常被问到如何把驻留在物理服务器/SQL 实例上的数据库转变为
SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
server|备份|错误|对象|解决|数据|数据库 介绍SQL Server 数据库使用备份还原造成的孤立用户和对象名'xxx'无效的错误的解决办法 在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损坏,这时需要从数据库的备份中直接恢复.但是,此时会出现问题,这里说明几种常见问题的解决方法.一.孤立用户的问题比如,以前的数据库的很多表是用户test建立的,但是当我们恢复数据库后,test用户此时就成了孤立用户,没有与之对应的登陆用户名,哪怕你建立
SQL Server数据库与其实际应用元数据介绍
以下的文章主要是介绍SQL Server数据库与其实际应用元数据,我前两天在相关网站看见SQL Server数据库与其实际应用元数据的资料,觉得挺好,就拿出来供大家分享,希望会给大家带来一些帮助在此方面. 以下的文章主要是介绍SQL Server数据库与其实际应用元数据,我前两天在相关网站看见SQL Server数据库与其实际应用元数据的资料,觉得挺好,就拿出来供大家分享,希望会给大家带来一些帮助在此方面. 我常被问到如何把驻留在物理服务器/SQL 实例上的SQL Server数据库转变为它们相
《数据库基础及实践技术——SQL Server 2008》一3.1 SQL Server数据库概述
3.1 SQL Server数据库概述 SQL Server 2008中的数据库由包含数据的表集合以及其他对象(如视图.索引.存储过程等)组成,目的是为执行与数据有关的活动提供支持.SQL Server支持在一个实例中创建多个数据库,每个数据库在物理和逻辑上都是独立的,相互之间没有影响.每个数据库存储相关的数据.例如,可以用一个数据库存储商品及销售信息,用另一个数据库存储人事信息. 从数据库的应用和管理角度来看,SQL Server将数据库分为两大类:系统数据库和用户数据库.系统数据库是SQL