前言
当chao_ping提议我开一个STANDBY DATABASE技术专题讨论的时候,我本来是想专门就STANDBY DATABASE的技术方面进行讨论的。看罢三十余篇的跟贴,实在感到有必要在深入技术问题之前,先说一些题外的话,虽然这些是与技术无关的话题,但对于从业IT界的打工者来说,却是一个首先应该考虑的问题。
我们是做技术的人员,意思就是说,在企业的管理上,我们最多能做的,我们所说的,对管理者来说,只能是参考的意见,决策并不在于我们。很多IT的技术员,特别是很多初出茅庐的年轻朋友,都觉得,技术人员是一个企业中,最重要的。如果我的技术好,天下就是我的了。这里面有很多的误区。打个比方来说,技术人员对公司将用什么服务器,用什么database server做后台,有多少控制的能力呢?现在有很多公司把oracle数据平台,定在IBM的AIX UNIX 服务器,这是一个有道理的选择吗?在众多UNIX 平台上面,众所周知是,AIX并不是Oracle首选推荐的操作系统,Oracle在AIX平台上的许多bugs,这两个公司相互推诿,用户根本不能及时得到patch解决存在的问题,但是公司的决策如此,做技术的人员能决定多少,公司管理阶层也许有他们的道理,譬如说,公司层决定所有服务器象某一个公司购买,可以得到更大的折扣,减少技术上面打交到的支持厂商,等等,我们只能接受公司的选择。在这一点上,我们与公司其他的职员没有什么两样的,如果抱着“惟我独尊”的思想,首先在人际上就得不到赞同。
提到了人际关系,许多人会讲,中国的人际关系很复杂,国外也许好多了。实际上呢,全世界那里都是一样,在中国处理不好,出了国也一样处理不好。我们都有在看论坛的帖子,有人贴出来,也有人反弹,诸如低手不宜,或讽刺别人的程序不好等等,我不想用古人曰,三人行,必有我师之类来论证一番,从最低之处感念,你有问题,有人愿意帮助你,无论帮上了或没帮上你,都应心存感激之心,不是吗。
回归到STANDBY DATABASE的讨论上,许多帖子提到是否应该选用STANDBY DATABASE的问题。其实,这个问题,也并不仅仅是一个技术上面的问题。这就是我上面说了一堆题外话的原因。
当某一个DATEBASE需要特别的功能的时候,譬如HIGH AVAILABLE,DISASTER RECOVERY,SCALABILITY等等,做为技术人员,我们首先要做的是,看看市面相关的产品中,那样能提供我们所要的功能,各类产品,各有千秋。在我们所需要的功能,那个最能满足要求,不要第一个念头就问别人,没有人比你自己更了解你需要什么。做了研究之后,不确定的话,可以请向资深的人咨询一下,不过基本观点就是,别人的提议只是你的参考,我还要说,因为没有人比你自己更了解你需要什么。
技术人员确实要从技术上了解那个产品最适合技术要求,但这并不能保证最后选用的产品是最适合技术要求的产品,最后的选择,与很多方面的条件有关。举个例子来说,我有一个DATABASE需要HIGH AVAILABLE, SCALABILITY,这样子看下来OPS是最适合的,可是接下来的问题是,OPS需要额外的LICENSING FEE,我们目前有的硬件不能支持OPS,需要订购新的,订购新设备的到达之前,DATABASE就必须进入生产模式。再复杂一点呢,我们技术部门的老板要用OPS,可是项目管理部门的老板要用STANDBY DATABASE,因为现有硬件支持,又不需要购买额外软件,他们两个一个管技术,一个管钱,两个人都懂一些Oracle技术,又都不是专家。凭良心讲OPS和STANDBY都能应付目前的需求,长远来讲OPS好一些,毕竟用的是client/server式的前台软件,用户以后也许有增加的趋势。不过这些内容也超过了技术人员的职责范围,我只管按照最后的决定做就是了。因为我没有最后选择和决定的权利。
最后我希望能谈一下IT从业人员的职业道德问题。做为某一领域的专家,也许很多时候会被请教与专业相关的问题。有项目会请你推荐运行平台或后台选用那个公司的DATABASE支持。虽然很多新技术很具吸引力,但IT的技术人员不能因为自己想学,想用某一产品,而推荐并不适合该项目的产品。一、Standby Database 的工作原理
1. Oracle 与 High Availability, Disaster Recovery 及 Data Duplicate 相关功能的产品概述
Oracle 的 High Availability 功能,Oracle 是从下面几个方面来诠释的:
(1) system faults and crashes
(2) application and middleware failures
(3) network failures
(4) media failures
(5) Human Error
(6) Disasters and extended outages
(7) Planned downtime, maintenance and management tasks
上述第六项就包含了disaster recovery 在内。因此 disaster recovery 应该算做 high availability 的一个方面了。
总的来说,除了以Oracle database 本身参数进行性能调解外,Oracle 提供支持high availability 相关产品主要有下面几种:
(1) Oracle Fail Safe on NT
(2) Oracle Parallel Server
(3) Oracle Parallel Fail Safe
(4) Oracle Advanced Quening
(5) Oralce Advanced Replication
(6) Oracle Standby Database
在Duplication data 方面主要有用于distribited data 功能的Advanced Replication 和我们讨论过 standby database。
从参与讨论的帖子来看,相关的问题是集中在OPS,standby database 和 Advanced Replication 的选择,因此我就先将这三种产品做一下比较。
OPS (Oracle Parallel Sever)
OPS 最原始的设计初衷就是system/application high availability。与其他产品相比较:
OPS 是多个单CUP机或SMP(Symmetric Multi-Processing system) 的cluster (MPP Massively Parallel Processing) 。cluster 里面不同的 node 使用一个(一般是一个)或多个oracle instances 与一个database 连接。
主要的技术特点:
(1) database 所有的data files 是建立在 raw devices 上面的,因此在技术方面对OS 的设置有很高的依赖性,很多方面取决于OS的对设置是否支持。
(2) 在database 方面,每个node都有自己单独的 on-line redo log file groups,因此在做backup 和recovery 的时候,需要特殊的处理。
(3) OPS 的data files 方面并没有redundance,因此 media failure 方面,要依靠RAID (redundant array of inexpensive disk) subsystem.
Oracle 从8i 开始在OPS的基础上,逐步在不同的OS平台上,增加了Fail Safe/Failover 的功能,这里不尽详细描述。
Advanced Replication
Replication 的设计初是分散异地的application access database locally。这种技术可以将一个database 中的Tables,Indexes,Views,Packages and Package Bodies,Procedures and Functions,Triggers,Sequences,Synonyms复制到另一database中。如果是全部database 的复制,也可用于high availability。
一个范例,yahoo在美国的东岸和西岸,各有一个镜像database,是采用的 replication 的技术。东西两岸的用户是连到最近的database,从而提高访问的速度。如果一个database出了问题,用户自动转入与另一个相连,实现网站的high availability。这种high availability 对用户来说,是透明的。
其他的范例,在公司中的应用,例如,HR database中雇员资料,在accounting database 中需要除去薪资等的其他资料,可以在HR中建立一个view,以replication 技术复制到 accounting database 中。
因为大多 replicas 都是在异地,从而在异地建立了redundance data。Replication 是对于database 来说的 high availability。
2. standby database 的工作原理
写了这么多,现在才开始真正要讨论的题目。
从设计原理上来讲,standby database 是为 primary database 建立的备份,因此具有 redundance data,也是相对于 database 来说的 high availability。
standby database 为 primary database 做的备份,是通过 primary database 不断产生出的archived log files 来实现的。primary database 处于 archive mode 的状态,持续送出 archived log files 给 standby database,而 standby database 则处于 recovery mode,持续apply primary database 的 archived log files.
为了完成上述过程,必须具备以下的条件:
(1) 如果primary database 和 standby database 是运行在不同的服务器上面,那么这两台服务器必须有相同version 和 release 的操作系统;必须有相同 version, release 和 patch 的 oracle RDBMS 系统。
(2) Oracle 是允许 primary 和 standby database 在同一个服务器上面运行的。如果是这种情形,建议这两个databases 要分布在不同的physical disk drives 上面。并且不是所有的操作系统都支持mount 两个instances 连接两个同名的databases。
(3) Primary database 必需处于archive log mode。
(4) Oracle 从 version 7.3才开始支持 standby database。7.3.x ? 8.0.x 需要手工copy 所有的archived log files 从 primary server 到 standby server,并且,需要手工 recovery archived log files (当然这些可以通过 OS shell scripts, sql scripts 等等方法来实现) ;并且standby database 只能够处于close/nomount/mount 的状态。
(5) Oracle 从version 8i (8.1.5以后) 开始支持 primary database 可以将 arhived log files 自动送到最多一个remote site (一般即standby database server) ,本地则可多达七个地点。并且,standby database 在mount 的状态