诛仙摄魂和嗜血珠:Oracle 传奇

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 19:41:26
Oracle 传奇

与其他知名软件公司创业者多是技术精湛的开发高手不同,Oracle创始人Larry Ellison并非在技术上有什么独特创新或者过人之处,这和微软的Bill Gates、Google的Larry Page,国内知名公司如百度的李彦宏、网易的丁磊有差异,但这并不影响Oracle成为一家伟大的公司,甚至一度是大型数据库的代名词。

 

1.起源

如今Oracle数据库占据着整个数据库软件领域近一半的市场份额,在大型数据库领域更是影响力巨大。关于Oracle数据库的故事要从1970年的6月,IBM公司Edgar F. Codd发表的那篇论文“大型共享数据库的关系模型”(A Relational Model of Data for Large Shared Data Banks)谈起,正是这篇论文拉开了关系型数据库的大幕。当时在行业中受欢迎的还是层次型数据库软件,并且最著名也最典型的层次型数据库系统就是IBM公司的Information Management System(IMS),有意思的是,当时IBM并没有预见到职员Edgar F. Codd发表论文后会带来一股新的潮流,这股潮流虽然不会将其彻底葬送,但是却直接导致其数据库领域第一的宝座不保。

话说1977年6月,Larry Ellison跟合伙人Bob Miner和Edward Oates(这两个人也是Larry一生中最重要的合作伙伴,其中Bob Miner还曾是Larry的老领导,这位仁兄绝对是位技术天才)一起在美国硅谷创建了一家计算机公司——Software Development Laboratories(SDL)。公司创立之初,Bob Miner任总裁(还是Larry Ellison的领导,虽然Larry持有新公司60%的股份),Edward Oates任副总裁,时年已经32岁的Larry依然默默无名(读了三所大学都没能毕业),只是一个普通的软件工程师,并且因为受限于合同问题还在另一家公司上班。

不过,没过多久他们就招来了第一名员工Bruce Scott,这可是一个重量级人物,拥有着纪念意义的名字,所以必须在这里提及。接触过Oracle数据库的朋友是否还记得Oracle数据库中的一个默认用户SCOTT,没错,就是这个Bruce Scott,而SCOTT用户的密码tiger,是当时Scott养的一只猫的名字。你看看,谁说程序员不懂得生活。Scott那真是相当有艺术、有品味、有激情、有爱心哪,用本山大叔的话讲,那是相当有才。

创建初期,他们主要与其他公司合作进行开发(按照今天的流行词汇,叫外包),哥几个在三十年前就预见到这行不好干,费时费力还不一定挣得着钱。他们觉着最省事的方式就是只开发一套程序,然后在市场上反复卖、反复数钱就行了,因此他们决定从事通用软件的开发。不过,此时他们还没有想好具体做哪方面软件,直到他们看到了Edgar F. Codd的那篇论文,以及其他几篇与关系型数据库相关的文章。

当然,在后来所有描述Oracle公司发展历史的文章中,关于这个决定的描述,都一致认为当时Ellison预见到了数据库软件的巨大潜力(是否真是如此?我不知道,但是我认为这就是赶上了机遇),于是,他们将开发的方向定为可用于商业应用的“关系型数据库管理软件”(简称RDBMS,一定要记住这个词,至今Oracle已经升级到了11g,但是其程序目录中仍然有一个rdbms目录)。

此时,另外几个传奇公司,微软已于两年前,即1975年成立,Bill Gates,这位Larry Ellison视为最强对手的技术天才(与Larry Ellison不同哟,Bill Gates可是个真正的技术高手)还憋在自己家的车库中琢磨着写MS-DOS1.0。而苹果也于一年前,即1976年成立,Steve Jobs跟他的合作伙伴Steven Wozniak也还在自己家的车库中研制苹果I号。

这三个如今在业内影响力巨大的公司,虽然产品、理念、文化几乎完全不同,但却有着近乎同样的成功模式,创立者中都有一个技术天才和一个偏执狂一样的人物,比如微软的Bill Gates有Paul Allen,苹果的Steve Jobs有Steven Wozniak(也是个当之无愧的技术奇才),而Larry Ellison有Bob Miner。

再回到SDL,1979年,其更名为Relational Software INC.,简称RSI,毕竟一个公司起名叫什么实验室还是不太合适,甭管它究竟实验什么。为了突出自己的产品,RSI在1983年又再次将公司改名为Oracle(Oracle System Corporation),既是公司名也是产品名,这个名字源自于他们曾为中情局做过的一个项目的名称,也是他们于1979年推出的第一版产品的名字,字典中对该词的解释有“神喻”的含义(看过黑客帝国?对,象征意义都是一样的,说明老外起名也要讲究吉利,得天时之类寓意)。

如今的Oracle用户众多,影响力巨大,但在当时不过是个不知名的小企业和不知名的数据库软件,1979年RSI发布了可用于DEC公司的PDP-11计算机上的商用Oracle产品,虽然推出的产品是第一个版本,但基于市场策略和商业销售方面的考虑,RSI公司宣称这是该产品的第二版,但实际上就是第一版,不过这也正是Larry Ellison高明的地方,直接将新推出的产品定义为第二版,打消了用户认为第一版不够成熟的顾虑。事实证明,这一策略确实有效(对比看看,现在是2009年,如果说当前发布的初始软件版本仍然从1.0开始,并且这还是业内潮流的话——Beta版咱们就不说它,不得不说,1979年时的Larry Ellison在产品营销上起码领先国内30年)。不过这个版本基本上就是个玩具,除了做些简单的关系查询外,什么也做不了。

Oracle数据库最初的两个用户是美国中央情报局和海军情报所,在那个时代不同机构往往同时用多种计算机,而且也没有软件可移值性之类的概念,20世纪70年代末期和80年代早期的软件,一般都设计成在单一操作系统上运行,因此很快就遇到新的需求:Oracle能不能在不同的操作系统上运行?用户提出的需求,迫使Ellison和Miner作出了重要的决定:Oracle第三版全部用C语言开发。这在当时是有风险的,C语言也是刚刚推出,但最终他们获得了成功,因为所有机器都能支持C语言,而且C编译器便宜且有效,还拥有很好的移植性,因此Oracle又拥有了一项关键特性,即“可移植性”。

此后,Larry Ellison便向客户宣称Oracle能运行在所有的机器上,虽然这到现在都不可能实现(Oracle公司目前宣称的是能够在100多种不同的计算机上运行,没说所有的哟),但必须承认,这也是非常聪明的市场策略,那个年月还没有PC这个概念,各种大型计算机和操作系统都不一样,因此大的机构通常更愿意购买一种能通用的数据库(如果有的话)。此时的Larry Ellison绝对算得上大话王,这哥们完全将市场放在第一位,坚信较早占领大块的市场份额才是最重要的,因此虽然早期版本的Oracle几乎无法正常工作,到处是Bug,程序错误很多,用户也抱怨不断,但有意思的是Oracle公司的早期用户似乎不在意损失金钱和数据(FBI都没意见),Larry Ellison也只管持续不断吹嘘,同他们描述产品将能达到的美好功能(虽然现在没有)。如果Larry Ellison拥有匹诺曹血统的话,美国就不用研制航天飞机、宇宙飞船、运载火箭了,想去月球的话顺着他的鼻子向上爬就行了。几年后,Ellison总结了公司早期对待客户的态度:“喏!这是我们的软件,拿去用吧!敢不敢?”

2.发展

Oracle的第三个版本(实际是第二版,后面再说到版本号就不再强调,大家知道是怎么回事儿就行了)在1983年3月推出,除了增加了可移值性的特性外,在软件方面最重要的改进是引入事务的概念,即SQL要么成功、要么失败,取决于事务是否提交;同时还引入了另一关键特性——写不阻塞读(通过回滚段中的数据实现查询和回滚事务,避免了读锁定),对于大访问量、高并发的应用,这点非常重要。因为这一特性,想要在Oracle中实现读锁是非常麻烦的(即使你主动希望实现这一功能,不过,应该不会有这样BT需求吧)。

时隔一年多,Oracle于1984年10月推出了第4版。在这一版本,稳定性有不小的提升,用Miner的话说就是达到了“工业强度”,Miner的话还是靠谱的,起码比Ellison靠谱,不过尽管如此,还不足以达到令人满意的地步。这一版最重大的改进是增加了读一致性(Read Consistency)的特性(即一个会话修改数据时,只要不提交,其他的会话就看不到这项修改,要记住这个概念,这是Oracle极重要的特性之一)。虽然说产品始终不够健壮,但销售人员表现出色,这一年Oracle公司总收入达到1270万美元,其中表现最出色的自然是Larry Ellison(确实能吹),比如有一次Ellison听说其当时最大的竞争对手Ingres发明了一种新技术——分布式查询,没过几天Oracle就刊登广告发布了SQL之星:第一个分布式查询数据库(其实并没有这样的产品)。

Ellison就是这样,想象着产品应该怎么样,然后再去实现,因此在宣传Oracle的时候总是夸大其词(貌似至今未改),但他就是能把软件卖出去,而且还卖得不错,这点实在让人惊奇。中国有句古话说的是“男怕入错行”,Larry Ellison大师亲身向我们证实了这句中国古老谚语的正确性,比起之前干软件开发时的惨淡,他做销售可谓风生水起。

1985年4月,Oracle发布了第5版,据称这也是首批支持Client/Server模式运行的RDBMS产品,而且一年后发布的5.1升级版,终于新增了分布式查询功能(还算不错,最终还是实现了的,虽然晚了两年),即一次查询、访问存储于多个位置上的数据。当时Oracle主要竞争对手是Ingres数据库,由Berkeley大学的Michael Stonebraker教授负责设计,当时Ingres数据库的市场份额增长速度甚至比Oracle还要快。幸运的是,关键时刻又是IBM伸手拉了Ellison一把,这回也不是主动的。

鉴于Ingres的高速发展,IBM担心其把所使用的查询方式QUEL变成标准,会对自己的SQL形成重大威胁。Ingres使用的QUEL(Query Language,查询语言)查询方式和IBM的SQL(Structured Query Language,结构化查询语言)大不相同。QUEL由Stonebraker教授发明,在某些地方甚至优于SQL。IBM多番思量后,决定把SQL提交给数据库标准委员会。这就让Oracle找到了机会,因为Stonebraker教授并不打算把QUEL提交给数据库标准委员会(教授多是学院派,压根就不认同这种标准化的行为,反而觉着这种方式将会扼杀新技术的发展)。于是,Ellison借助这个天赐良机,大力宣扬Oracle与IBM的兼容性。

同时,Ingres还犯下了一个致命的错误,很晚才开发PC上运行的版本,而Ellison和Bill Gates一样都看到了PC市场的巨大潜力,因此Oracle在4.0时就有了PC上运行的版本(虽然实际上没啥用),这让Ellison再一次掌握了宣传利器:Oracle能够运行在PC上,Ingres却不能(弱化对手优势,化解自己弱势是他们最拿手的本领),再加上Oracle公司销售上的强势,以及Ingres过分关注技术而不关心市场的学术化运作方式,最终,SQL在1986年正式成为了工业标准。而Ingres……你听说过这家公司吗?

1986年3月12日,是Oracle公司历史上不可忘却的一天,其股票以每股15美元上市,当日收盘价为20.75美元,公司市值达到2.7亿美元。24小时之后,即3月13日,微软以每股21美元的价格上市,收盘时则上涨到28美元,公司市值达到7亿美元,是Oracle的近3倍。Oracle的上市给Ellison带来了9300万美元的身家,但第二天微软上市后,Bill Gates拥有的股票市值超过了3亿美元,Oracle和Ellison在短暂的闪亮登场后,就开始长久地笼罩在微软和Bill Gates的阴影之下,从这一天(这可能也是Ellison敌视微软的开始)起,这两家同样极其成功的公司就难分难解地联系在一起。、

3.挫折

1988年7月Oracle公司推出了6.0版本,这一版中最重要的改进是引入了行级锁(Row-Level Locking,之前最小粒度也是表级锁),与延迟写入(Deferred Writes)功能,同时,这一版还开始提供PL/SQL(程式化的编程语言,比如写的过程、函数等都是通过PL/SQL实现。注意这个版本只是开始提供PL/SQL语言的支持,但还没有包、函数、过程、触发器等特性),并开始提供对联机热备份的支持,这样数据库执行备份时就不再需要停机。综合来看,Oracle可说是当时最强大的数据库软件,不过,由于6.0版本这个先天不足的早产儿出生,Oracle遭遇了历史最为黑暗的一段发展时期。

在这里,我们不得不再次感叹Larry Ellison非凡的口才,新版本推出后很多用户都是迫不及待地开始使用。但是,由于Oracle内部测试流程极其简单,新版本上市前没有充分地测试,事实上这个工作反而是由用户帮着完成(使用过程中被动测试),因此,一旦面世,问题瞬间就像山洪般暴发了。这段灰暗的岁月,一直到6.0.27版本发布,产品质量趋于稳定后才告结束(从版本号上看,已经至少经历了27次修改)。有意思的是,这期间用户流失很少,因为大多数人不想重写相关应用程序,而且对于大型数据库而言,更换数据库软件费用极其高昂,因此只能依赖Oracle(目前也还是这样,上了贼船,再想下来可就难了)。还有一点要注意,Oracle 6.2版首先在DEC VAX平台上引入了Oracle Parallel Server(OPS)的选项,即RAC的前身(另外,Oracle公司从未正式对外发行6.1版)。

软件本身质量问题只是一方面,更严重的问题是Oracle公司内部管理混乱。从1977年创立到1990年,Oracle销售额几乎都保持了每年1倍以上的增长,但公司的财务和销售管理十分混乱,销售人员为了完成任务得到提成,大量签订无法收款的合同,甚至有人弄虚作假,合同执行情况也无人过问,以至于现金流量是负值。Larry Ellison高薪聘请高级管理人员整顿公司时发现,1990年第三财政季度有1500万美元的销售合同无法执行。这样一来,季度销售额虽达到创记录的2.36亿美元,但利润只增长了1%,距离预期相差甚远。消息公布第二天,Oracle的股票从25.38元跌到了17.5元,损失了30%的市值。

为了度过危机,Oracle解雇了10%的员工。但随后的两个季度情况变得更糟,Oracle股票价值一落千丈,10月底的收盘价仅为5.38美元,公司的前景暗淡甚至面临破产。在最艰难的时期,Ellison几乎放弃不变卖股票的信心,事实上他一度是靠贷款维持自己的奢侈生活(要知道,春天的时候,Ellison拥有的股票价值还近10亿美元,但入了冬之后市值就只剩下1.6亿美元)。当然,Ellison最终还是没有卖掉自己手里的股票,这也足以证明他确实热爱自己的公司并一直怀有信心。

1991年,Oracle中国公司正式成立,公司名称为“北京甲骨文软件系统有限公司”。从这天开始,如果你碰到某人自我介绍说“我是甲骨文的”,千万别以为是某研究机构出来的,或者是碰到了现实版的穿越时空的人物,对方有可能只是某家数据库软件公司的外企机构职员。

4.兴旺

1992年6月,Oracle终于发布了第7版,这是一个功能完备的关系型数据库管理系统,让Ellison有了真正的王牌(好几年前,Ellison就已经在宣扬此版本中的一些特性)。更为聪明的是,第7版在上市前多方面听取了用户意见,并重点进行了大量而细致的测试,避免了重蹈上一版本的覆辙。此外,这一版及后续升级的小版本中增加了很多对后来版本影响巨大的特性,下面列举几个三思认为较重大的修改:

  • 基于成本的优化器(CBO),即Oracle数据库在执行查询前,会自动根据查询对象的统计信息进行计算,生成最佳的执行计划(理论上的最佳),而之前都是基于规则(RBO)的优化器来生成执行计划。在后续的几个版本中,Oracle工程师不断对这一优化器进行改进并最终在Oracle 9i版本中取代RBO成为系统默认优化器。
  • 完整性约束(包括主键、外键、CHECK约束等)。
  • 支持包、函数、存储过程、触发器的创建和用户自定义函数。
  • 可用于数据复制的Snapshot(Materialized View的前身)。
  • 同时易用性方面也作了许多改进,引入了SQL*NET工具并增强了管理功能。

接下来,Oracle 7.1在1994年5月推出,主要增加下列重要特性:

  • 引入对ANSI/ISO SQL92标准的支持。
  • 推出高级复制的特性(Advanced Replication)。
  • 引入Snapshot刷新组。
  • 引用DBMS_SQL包来处理动态SQL。
  • 允许将表空间置为只读状态。

1995年5月推出Oracle 7.2,主要增加下列重要特性:

  • 数据文件支持自动扩展,或重置大小。
  • 支持手动收缩回滚段。
  • FROM子句开始支持子查询。
  • CREATE TABLE AS语句开始提供并行支持。

1996年2月再次推出Oracle 7.3,主要增加下列重要特性:

  • 开始提供Standby Database的支持(即Data Guard的前身)。
  • 开始提供对位图索引(Bitmapped Indexes)的支持。
  • 引入全文检索(Context)的特性。
  • 引入空间数据库(Spatial Data)的特性。
  • 提供方式收集Oracle运行时的跟踪信息,有助于性能调试。

在Oracle整个历史中,第7版拥有非常重要的意义。从上述增加的重要特性中也可看出,N多现在非常知名的高级特性,其前身均是从这个版本开始尝试提供。而Oracle公司内部经过这几年管理上的加强,也逐渐步入健康发展的轨道。

到1996年年底,Oracle公司的年销售额已经达到了42亿美元,但是Larry Ellison并不满足,同样是靠软件吃饭的公司,眼瞅着几乎同时起步的Bill Gates雄据全球首富宝座,而Oracle公司反而在经历了最初的辉煌之后渐渐沉默(甚至几乎彻底完蛋)。你让我不爽,我就折腾你!Ellison在打击对手方面可谓绝顶高手,在1995年巴黎举行的欧洲信息技术论坛会议上,Larry Ellison介绍了网络计算机(Network Computer,NC)的概念:配置简单,充分利用网络资源的低价电脑,没有软盘和硬盘,因此不需要操作系统,其重点在于不需要微软的操作系统,只要打开电源用浏览器连网,就可以获得信息。不过Bill Gates在随后的发言中表示,他认为Ellison提出的网络计算机没有任何价值,只是大型机哑终端的翻版。

这一天的胜利最终仍然属于Ellison,作为一个如此拉风的男人,无论走到哪里都是众人瞩目的焦点,就好像黑夜中的萤火虫那样炫目!关于网络计算机的报道出现在所有报刊的主要版面上,Oracle公司借助这一事件,不但吸引了足够多的人的眼球,也展示了其网络的巨大信心。大众对于网络计算机的评价不一,大型公司和机构对网络计算机有所认同,起码其管理成本应该能降低不少;但反对者也不是没有,微软就更是表现得不屑一顾(老板都发话了,底下的人也得赶紧出声响应啊),微软负责技术的副总裁就表示:“人们想要电脑提供越多的功能,而不是越少。网络计算机根本不值一提”。

没过多久Oracle就联合IBM、Sun、Apple和Netscape制定了网络计算机的标准。微软一看情形不对,也迅速发表了一个名为SIPC(Simply Interactive Personal Computer)的标准进行反击。SIPC基本上和网络计算机一样,只有一点不同:它需要用Windows操作系统。而事实上,直到现在,也没有一台真正的网络计算机面世,随着AMD和英特尔的竞争,个人计算机价格不断下降已经成为电脑行业趋势(千万不能忽视摩尔定律),网络计算机已经失去了能提供足够养分的土壤。

1997年6月,Oracle推出了第8版,从这一版本开始引入Object Relational Database(ORDBMS)的概念,即所谓的面向对象的关系型数据库管理系统。在功能方面也增强不少,比如引入对索引组织表的支持(Index Organized Tables),备份恢复特性的功能也有所提升,开始支持表空间时间点恢复,增量备份等功能,RMAN也是从这一版本开始提供(关于备份恢复的内容我们将在第三部分详细介绍)。同时,这一版本开始具有同时处理大量用户和海量数据的特性,也为支持Internet、网格计算(后来的i和g)等奠定了基础。如果与7.0之前的版本相比,这个版本也称的上是一款非常不错的产品,可惜它被夹在经典的第7版和更加经典的Oracle 8i之间,其光芒必然要被掩盖,只有当你我回顾历史的时候才能够记起,在8i之前,也曾有过一个版本号叫做8的Oracle产品!

5.革新

虽然网络计算机最终流产,但Ellison还是敏锐地发现了Internet的巨大魅力和前景:“Oracle将只会做一件事情,我们管理海量的数据并通过网络提供这些数据”。

1999年2月,Oracle正式发布了Oracle 8i的第一个版本8.1.5,i代表Internet,这一版本中添加了大量为支持Internet而设置的特性,比如iFS、SQLj、WebDB、interMedia等特性,以及与Oracle的Java开发工具Jdeveloper的集成应用等。同时,本地也完整集成了一个Java运行时环境(Java也是微软的对头,Ellison在打击微软方面可谓不遗余力),内部又引入了对Java存储过程的支持,作为对PL/SQL标准过程的补充;在数据库管理方面引入了Log Miner特性(一种可用来读取Redolog的工具,Oracle后续版本中提供的一些高级特性,如逻辑Standby、Streams等也都是借助类似方式实现);分区功能也有所增强,如提供了对Hash分区和复合分区的支持,以及一些分区的管理操作;传输表空间的特性也是从这一版本开始提供;同时本地管理表空间也首次出现于这一版本,但表空间在创建时默认仍然是字典管理方式(如果你对此存在疑问,别着急,相关内容将会在第五部分详细介绍);其操作的易用性较之前版本有非常明显的提升,主要体现在Oracle EM使用上;高级复制的特性已经非常完善;Standby的特性也基本成熟,备库已经支持自动应用,并且在暂停应用时能够以只读模式打开,当作查询服务器来分担主库压力。8i的最终版本是2000年8月发布的8.1.7,不仅对整个数据库行业影响巨大,用户使用后反响也强烈,我记得在2006年某知名Oracle数据库论坛上做过一次使用中的数据库版本调查,当时仍有不少用户在使用Oracle 8.1.7(也许,现在仍然有吧)。8i对Oracle公司的影响同样不可磨灭,在.com浪潮中,Oracle是站在风口浪尖的弄潮儿。2001年6月,Oracle正式发布了第9版,这一版同样延续了8i时针对互联网应用的特性,因此版本号后面也跟了一个i,常称作9i。从第7版开始,Oracle不仅在内部管理上步入正轨,而且产品质量也渐入佳境,颇有一版更比一版好的态势。在三思看来,9i同样应被看作是具有划时代意义的版本,因为之前版本中提供的很多重要特性均是在这一版本中被转正,比如OPS正式更名为RAC,Standby被更名为Data Guard,LMT(Local-Managed Tablespace,本地管理表空间)试用多年,也终于在这一版本中被改为创建表空间时的默认属性,还有很多其他细微但非常实用的修改,简直数不胜数,如SPFILE——服务器端的初始化参数的引入(改动虽小,影响甚大,当然都是积极层面的影响),系统管理的UNDO表空间(System Managed Undo Tablespace)的引入(有效提升系统性能,极大限度避免ORA-1555),内存管理方面引入了PGA_AGGREGATE_TARGET参数,用来自动分配PGA内存,有效提升性能。Flashback Query也在这一版本中首次出现,通过该特性能够查询UNDO表空间中尚未被覆盖的UNDO数据,也可以作为数据恢复的一种补充手段(关于Flashback特性的应用详见本书第三部分)。2002年5月,在升级到9i R2后又提供了一种新的数据复制特性:流(Streams),期望是用来替换之前的高级复制,同时Data Guard也提供了一种新的Standby方式,逻辑Standby(关于Data Guard特性的应用详见本书第三部分)。

虽然网络计算机最终流产,但Ellison还是敏锐地发现了Internet的巨大魅力和前景:“Oracle将只会做一件事情,我们管理海量的数据并通过网络提供这些数据”。
1999年2月,Oracle正式发布了Oracle 8i的第一个版本8.1.5,i代表Internet,这一版本中添加了大量为支持Internet而设置的特性,比如iFS、SQLj、WebDB、interMedia等特性,以及与Oracle的Java开发工具Jdeveloper的集成应用等。同时,本地也完整集成了一个Java运行时环境(Java也是微软的对头,Ellison在打击微软方面可谓不遗余力),内部又引入了对Java存储过程的支持,作为对PL/SQL标准过程的补充;在数据库管理方面引入了Log Miner特性(一种可用来读取Redolog的工具,Oracle后续版本中提供的一些高级特性,如逻辑Standby、Streams等也都是借助类似方式实现);分区功能也有所增强,如提供了对Hash分区和复合分区的支持,以及一些分区的管理操作;传输表空间的特性也是从这一版本开始提供;同时本地管理表空间也首次出现于这一版本,但表空间在创建时默认仍然是字典管理方式(如果你对此存在疑问,别着急,相关内容将会在第五部分详细介绍);其操作的易用性较之前版本有非常明显的提升,主要体现在Oracle EM使用上;高级复制的特性已经非常完善;Standby的特性也基本成熟,备库已经支持自动应用,并且在暂停应用时能够以只读模式打开,当作查询服务器来分担主库压力。

8i的最终版本是2000年8月发布的8.1.7,不仅对整个数据库行业影响巨大,用户使用后反响也强烈,我记得在2006年某知名Oracle数据库论坛上做过一次使用中的数据库版本调查,当时仍有不少用户在使用Oracle 8.1.7(也许,现在仍然有吧)。8i对Oracle公司的影响同样不可磨灭,在.com浪潮中,Oracle是站在风口浪尖的弄潮儿。
2001年6月,Oracle正式发布了第9版,这一版同样延续了8i时针对互联网应用的特性,因此版本号后面也跟了一个i,常称作9i。从第7版开始,Oracle不仅在内部管理上步入正轨,而且产品质量也渐入佳境,颇有一版更比一版好的态势。在三思看来,9i同样应被看作是具有划时代意义的版本,因为之前版本中提供的很多重要特性均是在这一版本中被转正,比如OPS正式更名为RAC,Standby被更名为Data Guard,LMT(Local-Managed Tablespace,本地管理表空间)试用多年,也终于在这一版本中被改为创建表空间时的默认属性,还有很多其他细微但非常实用的修改,简直数不胜数,如SPFILE——服务器端的初始化参数的引入(改动虽小,影响甚大,当然都是积极层面的影响),系统管理的UNDO表空间(System Managed Undo Tablespace)的引入(有效提升系统性能,极大限度避免ORA-1555),内存管理方面引入了PGA_AGGREGATE_TARGET参数,用来自动分配PGA内存,有效提升性能。Flashback Query也在这一版本中首次出现,通过该特性能够查询UNDO表空间中尚未被覆盖的UNDO数据,也可以作为数据恢复的一种补充手段(关于Flashback特性的应用详见本书第三部分)。

2002年5月,在升级到9i R2后又提供了一种新的数据复制特性:流(Streams),期望是用来替换之前的高级复制,同时Data Guard也提供了一种新的Standby方式,逻辑Standby(关于Data Guard特性的应用详见本书第三部分)。

6.前进

2004年2月,Oracle公司正式发布了第10版,从这一版中,Oracle数据库有了一个新的后缀:g,即grid(网格),这是自Oracle 8i中增强互联网功能后的又一次重大更名。10g主打网格计算,跟8i、9i时的面向Internet增加相应特性一样,这只是Oracle 计划未来面向的领域而已,说得更直白些,它只是为这些应用打下良好的基础,用不用在你,如果你仍将其当作一个标准的数据库软件使用,那么i呀g呀对你都没有什么影响。10g中网格计算相当于将整个信息化的各个物理和逻辑的组成部分(如存储、数据库、应用程序等)定义成虚拟化的服务,由Grid Control(Oracle公司提供的控制软件)统一控制。Ellison野心极大,单单占有数据库领域是不够地,通过Grid Control就可以控制整个企业的信息化设备。

我们不管Larry Ellison商业策略上的考量究竟怎样,仅从数据库层面来讲,10g确实进行了太多实用的革新,比如在内存管理方面,我们知道9i时引入PGA_AGGREGATE_TARGET,用来自动分配PGA内存,在10g中引入了一个SGA_TARGET,用来自动分配SGA内存,而到了11g,Oracle又提供了一个新的参数MEMORY_TARGET,能够完全自动地管理整个数据库内存。没有应用过早期版本的用户可能感受不会那么深刻,为了加深大家的印象,在这里三思仅从易用性的角度给大家作个比较,8i及8i之前的版本,有十多个与内存空间分配相关的参数需要设置(如果设置不当,对性能影响极大,甚至做某些工作的时候,DBA必须重新设置某些初始化参数),9i时减少到5个内存相关参数;10g只需要设置2个;到了11g,只需要设置1个,就是MEMORY_TARGET,对于其他参数,在默认情况下Oracle都会在运行过程中自动进行调整。所以,仅从这个发展过程上也能看出,Oracle每一个新的版本,都会在易用性上做出很大改进,DBA终于能够闲下来了啊(好事?坏事?)。

看看Oracle公司官网的这篇文章吧“Oracle 数据库 10g:为 DBA 提供的最重要的 20 个特性”。

10g真的好,谁用谁知道。特别说明一下,本书所做示例如非特别注明,默认均是在10g R2版本进行。

2007年7月,Oracle公司正式发布了11g,我个人认为这一版在整个Oracle数据库版本历史中足以与1992年发布的Oracle 7媲美,这一版提供了很多激动人心的特性。比如RAT(Real Application Testing)终于步入实用阶段,该特性允许你将生产环境中数据库的真实负载记录下来,拿到测试库中重演(最佳搭配自然是Standby数据库),这将有助于测试某些应用程序修改后对数据库的真实影响;结果集缓存(Result Cache)则能更有效地利用内存,其实质相当于将查询的结果集保存于内存中,当再有新的相同查询需求时,就不需要再解析、执行、读取I/O等操作,直接就可以从内存中获得查询结果,大大提高查询效率(如果应用得好的话);以及高级压缩(Advanced Compression)等。

同时,原来的一些特性在功能上也增强不少,比如分区方面,自5.0以来无数用户盼星星盼月亮一样期待的interval分区终于推出(Oracle将根据设定的条件自动添加新分区,再也不需要DBA自己写脚本来管理分区了);Data Guard方面,物理Standby终于能够在只读打开模式时应用REDO数据,实用性和可用性均大增;内存管理方面,新提供的MEMORY_TARGET参数能够更有效地管理Oracle内存空间,其他还包括压缩特性的增强,SQL、PL/SQL方面新增加了数据类型和更强大的编译方法等。

另外,如果你足够敏感,这条信息也许能给你一些其他方面的启示,11g的首发平台是Linux,打破了一直以来首发平台都是Solaris的传统,从某种层面上,也表明了服务器领域主流操作系统的变迁。你想说什么时候首发平台会是Windows?貌似短期内都不太可能啊:)

另外,在本书写作过程中,Sun公司已被Oracle公司收购,Solaris现在是Oracle公司自己的产品了。

说到这里,三思也想引申一下关于数据库新版本及是否升级的问题。信息爆炸的时代,软件更新频繁,新版本不一定是好版本(比如11g发布了不到三个月就推出了Release1),当然新版本也不一定是不好的版本(比如Oracle 7,发布之后好评如潮,用户哭着喊着要升级,也可能是Oracle 6太差,两相对比太强烈)。

但这些都不重要,DBA需要关注的重点是,要升级的版本是否是适合你的版本。如果要归结成一句话,我认为“稳定是第一位”。新版本固然提供了很多新的功能,但是有一点大家一定要明白,是软件就会有Bug,越新的特性,Bug也越多,尤其像11g,安装包就已经达到1.7G的庞然大物,有Bug不稀奇,没Bug才稀奇。所以,做第一个吃螃蟹的人,贸然尝鲜也许

OK,我的话说完了,但Oracle的故事还远没有结束……。