和力记易:论Oracle数据库的四大备份方式

Oracle作为目前世界上市场份额占有率最高的大型通用数据库,在世界上各行各业的信息化建设中起着核心首脑的作用。它(软件自身以及它所依赖运行的硬件)一旦出现问题,轻则导致业务中断,重则丢失部分数据,严重则全部数据不可逆转性损毁!这种情况在信息化越来越占生产主导地位的今天意味着什么各大CIO都非常清楚,所以他们想尽一切办法坚决杜绝这种情况的发生!

中国有句古话,凡事预则立不预则废。这句话在信息化建设高度发达的今天同样适用。针对数据库可能中断服务以及丢失数据的“预”就是“备”。针对Oracle数据库来说,主要有以下四种备份方式。

一、导出/导入(Export/Import)

导出导入是一种最初级的备份方式,它采用定时将全量、增量或者差异数据以表、用户或者全库为单位导出到某种格式的文件中达到备份的目的。它作为标准的命令被集成到了Oracle开发语言中。可以通过DBA手动执行备份命令,或者通过脚本和工具自动执行。RMAN就是此类工具中的佼佼者,曾经有很多DBA在使用。

但它是一种定时备份的模式,具有明显的备份时间窗口。备份间隔内仍然存在数据丢失的可能,比如每一天做一个增量备份的话,那么最大会丢失一天的数据。如果是可以允许一段时间内数据丢失的业务,可以采用这种模式。反之只能采用下面的一种备份模式–热备份。

二、热备份

对于热备份来说,故名思议就是刚出炉的数据还是热乎的就开始执行备份的操作。实现热备份的方式目前主要有两种方式,逻辑方式和物理方式。

1、逻辑方式

如果把Oracle数据库比作一个美女的话,那么实例库就是她的整个身体,表空间就是她的骨骼,表是她的筋络,数据是她的血肉。视图、事务、函数、pack包等是她身体上毛发和的饰品。

对于逻辑方式备份来说就是用一种方式勾勒出了这位美女的模样,让人看上去能认出就是那位美女,但是仔细看的话可能又有所不同。

这种勾勒的方式又分为两种:

1)SQL语句模式

SQL的全称是,它是一种语言,而不是专指一种数据库。很多人习惯把MSSQL简称为SQL,这是不对的。SQL之前必须加了MS(Microsoft)才能是一种数据库的名字。

SQL这种语言,大多数数据库都支持。Oracle的老大埃里森当年也是因为首先致力于对SQL语言的支持,才在SQL成为标准后挫败了很多当时没有纳入到SQL语言标准范畴内的数据库。

既然Oracle支持SQL语句,那么就可以用SQL语句进行逻辑勾勒。我们知道当我们提交数据的时候并不关心是提交到了哪种数据库里面去了,以什么样的方式存储。最终只要能提交成功并能查、改、删皆可。这些都是通过SQL语句来实现的,它同样不关心数据库的种类和存储方式。这就意味着我们就可以用SQL语句将数据从源端数据库抽取出来,然后将它装载在某个目标的数据库里面。源端数据库和目标端数据库可以是不一样的品牌,甚至可以不在同一平台上。就如同我们在勾勒美女的时候是用油画布还是国画宣纸都不影响最终对美女的展现。

CDC(Change Data Capture)就是以这种模式对Oracle进行增量备份的,当然它更多情况下用以做数据整合。

这种模式听起来似乎很美,可以不用管平台不用管数据库,直接抽取和装载数据库。但是要素描我们首先得雇佣一个画家,这一块的投资颇大,就如同CDC价值不菲一样。

另外画家在素描的时候,美女需要配合。这就如同在执行SQL语句的时候占用了Oracle自身大量的资源,甚至影响到了它的正常运行。

其次,在执行SQL语言时对于SQL语言细分的组成部分:DDL (数据定义语言)、DML (数据操作语言)、DCL (数据控制语言)和TCL(事务控制语言)以及特殊的字段比如blob和clob字段等的支持并不完美,效率低下甚至就不支持。

2)日志重做模式

我们用素描的方式来比喻逻辑备份里面的SQL语句模式,那么对于归档重做的模式我们称之为复印。归档日志是Oracle独有的一种模式,它会将自己做过的所有事情的过程都记录在里面。如果照着归档重新做一遍,则能得到同样的结果,这个结果是相对比较接近源生产库的。在这里之所以使用“相对比较接近”是因为还是有所差别的,就如彩色照片复印出来是黑白的,内容看上去差不多,但还是有差别,且存在很多限制。OGG(Oracle Goldengate)以及ODG(Oracle Dataguard)就是两款Orcle两款典型的日志重做工具。前者是Oracle收购的公司,后者是Oracle企业版包含的一个工具。

使用日志重做模式首先采用这种方法数据库必须至于归档模式下,且要是Force Logging(强制记录日志)状态。这才能满足日志重做的基本条件。因为Oracle的日志分为OnlineLog(联机日志)和ArchiveLog Log(归档日志)。如果写入的数据量较小,那么可以直接对OnlineLog进行重做。但如果写入的数据量很大或者巨大,那么对OnlineLog进行重做是来不及的,就只有延后对ArchiveLog Log进行重做。而对于一下NoLogging(无日志)的数据操作就没有办法进行重做了,所以必须采用将数据库模式设置为Force Logging(强制记录日志)状态。这对数据库的使用具有很大的限制。

另外OGG(Oracle Goldengate)以及ODG(Oracle Dataguard)的逻辑Standby模式虽然在源端获取数据是通过归档日志,但是在目标端(备份机)上进行数据还原的时候是转换成SQL语句来进行的。这就具有了1)中所述使用SQL语句的一些缺点。

2、物理方式

同于我们将SQL逻辑方式比如素描,把日志重做逻辑方式比作复印,则物理方式就是复制人。

卷复制、分割镜像快照等技术就是一种常用的物理方式。乍看起来这种模式要优于逻辑方式,但是它的优势恰恰就是它的劣势。就如同我们打得复制人的比方,在复制人的时候必须每一个染色体每一个DNA都不能出差错。否则将会前功尽弃。对于Oracle这种结构化数据来说,它的精密性不亚于人体。一旦在物理复制的时候不完整或者出错,将会导致整个数据库不可用。所以物理复制不能是单纯的把数据库当作文件进行表面复制,必须是建立在对Oracle数据的逻辑存储结构深入分析的基础之上,才能保证复制出来的数据是100%可用的。

三、冷备份

从前文课件不管是逻辑方式的热备份还是物理方式的热备份,它都存在一些问题。举个例子来说:源端数据库的一个事务写完生产ArchiveLog Log后,ArchiveLog Log转换成SQL语句在备份机上执行,执行到一半的时候正好停机了。再开机时这个没有执行完的SQL就有可能导致整个Oracle数据库无法Open。

为了尽可能的避免这种情况,用户往往在指定的时间(比如凌晨2-3点)将源端数据库合法Shutdown(关闭),以确保数据库在可用的状态时拷贝出一份完成的数据出来。

很明显拷贝的前提是将数据库Shutdown,就是说业务需要停止。所以这种备份叫做冷备份。

四、CDP

SNIA(全球网络存储工业协会StorageNetworkingIndustryAssociation)对什么是CDP做了明确界定:1、有变化就备份2、至少备份到另外一个地方3、可以恢复到任意时间点。实现的模式主要有三种:基于块、基于文件、基于应用。

按照这一点来卡的话ODG的物理Standby模式可以算是。

ODG的物理Standby模式在创建时,使用主库进行一个全copy(可以理解为不用shutdown的冷备份)。在此基础之上以“基于块”的模式对数据进行物理的拷贝和恢复。此时目标段(备份机)就是完全是源端数据库的一个复制,因为它是Oracle自身的工具,所以它深入了解Oracle自身的逻辑结构,从而有效的避免了物理复制存在数据库不可用的问题。

但是对于CDP里面的第3点:可以恢复到任意时间点。它必须借助Oracle的另外一个功能Oracle Undo(撤消日志)。

我们知道Oracle的中文名是甲骨文,它一定意义上反映了Oracle数据库操作的难易程度。

ODG的物理Standby模式虽然看起来很美,但是第一:它只属于Oracle,第二:需要专业DBA配置和维护。这就使得它的使用成本过高而成为“王谢堂前燕” ,难以飞入“寻常百姓家”。

针对这种情况,国内老牌CDP容灾备份厂家–北京和力记易科技有限公司在深入研究Oracle数据库存储结构十余家的基础之上,集ODG的逻辑Standby和Undo功能于一体。以最简单的图形化界面实现了CDP实时备份和任意时间点回退。不但支持Oracle,还是支持Windows、Linux、Unix下的MSSQLOracleDB2SybaseInformixInterbase人大金仓神舟通用等数据库,支持主流的双机集群环境:MSCS、Lifekeeper、NEC、PlusWell、Oracle RAC+ASM等模式。真正实现了“旧时王谢堂前燕,飞入寻常百姓家”。