第一章 Oracle介绍
Oracle简介
Oracle数据库是由甲骨文公司开发的关系型数据库;它为各行业在各类环境下(服务器、虚拟机、微机环境下)可以快速搭建一种高效率、可靠性好、高吞吐量的数据库解决方案。
Oracle的起源
1977年6月,Larry Ellison 与 Bob Miner 和 Ed Oates 在硅谷共同创办了一家名为软件开发实验室(Software Development Laboratories,SDL)的计算机公司(ORACLE公司的前身)。那个时候,32岁的Larry Ellison,这个读了三家大学都没能毕业的辍学生,还只是一个普通的软件工程师。公司创立之初,Miner是总裁,Oates为副总裁,而Ellison,因为一个合同的事情,还在另一家公司上班。没多久,第一位员工Bruce Scott(Oracle数据库软件中有个叫Scott的用户,就是这个Bruce Scott,至于Scott用户的密码为什么是Tiger,那是Scott的女儿养的猫的名字。Scott工号是4)加盟进来,在Miner和Oates有些厌倦了那种合同式的开发工作后,他们决定开发通用软件,不过他们还不知道自己能开发出来什么样的产品。Oates最先看到了埃德加·考特的那篇著名的论文连同其他几篇相关的文章并推荐Ellison和Miner也阅读一下。Ellison和Miner预见到数据库软件的巨大潜力(跟着IBM走),于是,SDL开始策划构建可商用的关系型数据库管理系统( RDBMS )。很快他们就弄出来一个不太像样的产品,或者具体的说更像一个Demo。根据 Ellison 和 Miner 他们在前一家公司从事的一个由中央情报局投资的项目代码,他们把这个产品命名为 ORACLE。因为他们相信,ORACLE(字典里的解释有"神谕, 预言"之意)是一切智慧的源泉。1979年,SDL 更名为关系软件有限公司(Relational Software,Inc.,RSI),毕竟"软件开发实验室"不太像一个大公司的名字。1983年,为了突出公司的核心产品,便再次更名为ORACLE (Oracle Systems Corporation)。
Oracle的版本及历史
Oracle数据库分为个人版本、标准版1、标准版、企业版,区别:
- 标准版1(Standard Edition one)适用于1-2cpu的服务器,单机环境,适用于中小型用户入门级应用。
- 标准版(Standard Edition)适用于1-4cpu的服务器,可以做双机热备和RAC,价格适中,适用于对数据库性能要求及安全性有进一步要求的大中型用户工作。
- 企业版(Enterprise Edition) 适用于单机、双机、多CPU多节点集群等各种环境,功能齐全,适用于对数据库性能及可靠性有高要求的企业级用户应用。
- 个人版,只在windows平台上提供,不支持RAC之外的包含企业版所有功能。
1979年,RSI公司(那时候公司叫“RSI”还不叫“ORACLE”)在夏季发布了可用于DEC公司的PDP-11计算机上的商用ORACLE产品,这个数据库产品整合了比较完整的SQL实现,其中包括子查询、连接及其他特性。出于市场策略,ORACLE公司宣称这是该产品的第二版,但却是实际上的第一版。这就是ORACLE这种“要命”的市场策略,事实上,这种策略有时候也是非常成功的。
1983年3月,RSI发布了Oracle第3版。Miner和Scott历尽艰辛用C语言重新写就这一版本。要知道,C语言当时才刚推出不久,用它来写ORACLE软件也是具有一定的风险的,但除此之外,别无他法。很快就证明了这样做是多么的正确:C编译器便宜而又有效,还有很好的移植性。从现在起,ORACLE产品有了一个关键的特性:“可移植性”。同样是1983年,IBM发布了姗姗来迟的Database 2(DB2),但只可在MVS上使用。不管怎么说,ORACLE已经占取了先机。(在开发第三版还没有结束的时候,Scott离开了ORACLE。当时用C语言改写ORACLE的压力很大,无休止的软件调试终于让Scott不堪重负,选择了一走了之。把剩下的重担交给了Miner一个人。在出售了自己的%4的股票之后,Scott后来创建了Gupta公司(现更名为Centura Software)和PointBase公司(提供百分之百纯Java嵌入式数据库),都是开发和数据库相关的产品。多年后有人问到他的%4的ORACLE股票的时候,Scott也只能报以一笑了。如果能坚持下来,那是一笔几亿美金的财富。不过当时的Scott没有那么多的想法,他只是太累了。很长一段时间里,公司研发由Miner独力承担。Miner视金钱如无物,为人低调,和Ellison的锋芒必露形成鲜明的对比。在公司里,大家一致认为他是老好人,他也深受员工爱戴。Ellison是公司的大脑,Miner则当之无愧的成为公司的心脏。他是个沉默的英雄,正如Steve Jobs背后的Steve Wozniak一样。)
1984年10月,ORACLE发布了第4版产品。产品的稳定性总算得到了得到了一定的增强,用Miner的话说,达到了“工业强度”。
1985年,ORACLE发布了5.0版。有用户说,这个版本算得上是Oracle数据库的稳定版本。这也是首批可以在Client/Server模式下运行的的RDBMS产品,在技术趋势上,Oracle数据库始终没有落后。(就在这一年,当时曾经的最大的独立软件公司Cullinet(主要销售网状数据库)已经如流星般陨落。ORACLE的主要竞争对手是Ingres数据库。Ingres在加州大学伯克利分校诞生,主要的设计者是当时鼎鼎大名的Michael Stonebraker教授。可以说Ingres数据库软件是上个世纪80年代技术上最好的数据库,Ingres市场分额的快速增长已经给ORACLE造成了很大的压力。巧的是,这个时候IBM公司再一次伸出了“上帝之手”。Ingres使用的是Stonebraker发明的QUEL(Query Language)的查询技术,这和IBM的SQL大不相同。在某些地方QUEL甚至要优于SQL。IBM当时担心Ingres把QUEL变成标准会对自己不利。经过一番衡量,决定把自己的SQL提交给数据库标准委员会。而Stonebraker教授可不打算把QUEL提交给数据库标准委员会,学院派的他认为这么做实际上是扼杀了创新精神。可以看出,学院派的思想大都会把事情搞杂。)
1986年3月12日,ORACLE公司以每股15美元公开上市,当日以20.75美元收盘,公司市值2.7亿美元。3月13日,微软以每股21美元的发行价上市,以28美元收市,公司市值达到7亿美元。远远超过了ORACLE。套有成功光环的微软和比尔·盖茨遮盖住了ORACLE和Ellison的光芒,可能这也是Ellison敌视微软的开始。
1988年,Oracle第6版发布。由于过去的版本在性能上屡受诟病,Miner带领着工程师对数据库核心进行了重新的改写。引入了行级锁(row-level locking)这个重要的特性,也就是说,执行写入的事务处理只锁定受影响的行,而不是整个表。这个版本引入了还算不上完善的PL/SQL(Procedural Language extension to SQL)语言。第6版还引入了联机热备份功能,使数据库能够在使用过程中创建联机的备份,这极大地增强了可用性。(在第六版刚发布之后,很多迫不及待开始使用的用户就怨声载道。这是个根本就没有测试好就进行发布的产品(也怪Ellison,大话总要说在前头,只好自尝苦果)。用户开始对ORACLE大肆抨击,ORACLE的一些对手也开始落井下石,针对ORACLE产品的一些弱点进行攻击,噩梦一直延续到Oracle第七版的推出才结束。)
1992年6月,Oracle第7版终于闪亮登场。这一次公司吸取了第六版匆忙上市的教训,听取了用户的多方面的建议,并集中力量对新版本进行了大量而细致的测试。该版本增加了许多新的性能特性:分布式事务处理功能、增强的管理功能、用于应用程序开发的新工具以及安全性方法。(Oracle第七版是ORACLE真正出色的产品,取得了巨大的成功。这个版本的出现真是好时机,当时Sybase公司的数据库已经占据了不少份额,ORACLE借助这一版本的成功,一具击退了咄咄逼人的Sybase。公司的销售人员这次算到了给用户兑现空头许诺的时候。公司经过两三年的治理,终于摆脱了种种麻烦,重新开始健康发展,销售额也从92年的15亿美元变为四年后的42亿美元。)
1997年6月,Oracle第8版发布。Oracle 8支持面向对象的开发及新的多媒体应用,这个版本也为支持Internet、网络计算等奠定了基础。同时这一版本开始具有同时处理大量用户和海量数据的特性。
1998年9月,ORACLE公司正式发布Oracle 8i(“i”代表Internet)。这一版本中添加了大量为支持Internet而设计的特性。这一版本为数据库用户提供了全方位的Java支持。Oracle 8i成为第一个完全整合了本地Java运行时环境的数据库,用Java就可以编写Oracle的存储过程(只要是能够打击微软的武器,ORACLE都要派上用场)。
2001年6月,在ORACLE OpenWorld大会中,ORACLE发布了Oracle 9i。在Oracle 9i的诸多新特性中,最重要的就是Real Application Clusters(RAC)了。说起Oracle集群服务器,早在第五版的时候,ORACLE就开始开发Oracle并行服务器(Oracle Parallel Server ,OPS),并在以后的版本中逐渐的完善了其功能,不过,严格来说,尽管OPS算得上是个集群环境,但是并没有体现出集群技术应有的优点。
2003年6月初,ORACLE突然宣布51亿美金收购仁科(PeopleSoft),业内再次震动。此举又一次露出ORACLE 一贯善于进攻的本性。(要知道,ORACLE在发展过程中很少对企业进行收购的,那么收购仁科目的何在?首先,ORACLE觊觎企业应用软件市场已久,但苦于不能进一步扩大市场份额,尤为重要的是,一旦成功,可以直接对最大的敌人IBM进行打击,还可以阻击SAP等巨头的强势。时至今日,ORACLE依然以不达目的不罢休的态势和仁科缠斗)。
2003年9月8日,在旧金山举办的ORACLE World大会上,Ellison宣布下一代数据库产品为“Oracle 10g”(“g”代表“grid ,网格”)。Oracle应用服务器10g(Oracle Application Server 10g)也将作为甲骨文公司下一代应用基础架构软件集成套件。这一版的最大的特性就是加入了网格计算的功能。ORACLE宣称10g可以作为网格计算的基础,矛头直指最大的敌人IBM的"随需应变"!看来,ORACLE公司已经把这一次的"赌注"押在了网格计算的大市场上。(如果说,IBM是IT产业中的一头巨鲸,那么ORACLE一定就是一条大鲨鱼:咄咄逼人,善于进攻。Ellison绝对是造概念的能手,只要是能引领出新的卖点,出些新概念,那也是值得的。那么何谓网格计算?网格计算可以把分布在世界各地的计算机连接在一起,并且将各地的计算机资源通过高速的互联网组成充分共享的资源集成。通过合理调度,不同的计算环境被综合利用并共享)。
2004年12月13日,ORACLE公司宣布签订了以每股26.50美元、总计约 103 亿美元的代价收购 仁科(PeopleSoft) 的最终协议。历时十八个月的争斗终于尘埃落定。
2005年,ORACLE在数据库的市场的份额首次超越IBM与微软的总和,同年又以58亿美元收购了Siebel公司,推动其ERP和CRM应用程序以及商业智能领域的扩展。
2007年11月,Oracle 11g正式发布,功能上大大加强。11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(Information Lifecycle Management)等多项创新。大幅提高了系统性能安全性,全新的Data Guard最大化了可用性,利用全新的高级数据压缩技术降低了数据存储的支出,明显缩短了应用程序测试环境部署及分析测试结果所花费的时间,增加了RFID Tag、DICOM医学图像、3D空间等重要数据类型的支持,加强了对Binary XML的支持和性能优化。
2008年,ORACLE又以72亿美元收购了BEA公司。
2010年,ORACLE在数据库系统市场的份额首次突破50%,同年又完成了对SUN(Java的创始公司)公司的收购,并以SUN公司的的专利状告Google专利侵权,诉求高达61亿美元的损失补偿。但是此案最后被判不成立,除了律师费以外,ORACLE还掏了一百多万美金的法庭费。
2011年,ORACLE开始大量收购基于云计算的企业级软件和服务公司,并高调进入云计算领域。
2012年12月20日,软件巨头ORACLE公司宣布已与上市公司Eloqua达成协议,并将收购这家基于云的自动化营销与营收绩效管理软件公司。
2013年2月4日以每股29.25美元作价收购网络传输产品制造商Acme Packet,交易规模约为17亿美元。
2013年6月26日,ORACLE发布了Oralce 12C。云(cloud)计算设计。12C引入了CDB与PDB的新特性,在Oracle 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在Oracle 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入Oracle 12C后,实例与数据库可以是一对多的关系。
2013年7月15日起ORACLE公司正式由纳斯达克转板至纽约证券交易所挂牌上市。转板至纽交所后,ORACLE公司将沿用“ORCL”这一交易代码。
2013年,ORACLE已超越 IBM,成为继微软后全球第二大软件公司。
2014年,Ellison辞去CEO一职,将甲骨文交给了Hurd和Catz。
2015年,ORACLE营业额高达382亿美元。
2017年6月7日发布的2017年美国《财富》500强,甲骨文公司排名第81位,营业收入370.47亿美元。
2017年7月,从此年开始ORACLE改变了以往的数据库软件发布流程,采用年度Release和季度更新的策略。
2018年2月16日,Oracle 18C发布。还是秉承着 Oracle 的 Cloud first 理念,Oracle 18C 现在 Cloud 和 Engineered Systems 上推出。Oracle 18C号称是一款自治性的数据库,可以减少很多DBA的工作,很多从事DBA工作的人员是不是要担心自己的工作受到影响?其实Oracle 18C上并未体现的特别明显,不过这是未来的一个趋势和信号!
目前Oracle已更新到ORACLE 19C版本。
Oracle平台支持
2001年发布的Oracle9i之前,甲骨文公司把他们的数据库产品广泛的移植到了不同的平台上。Oracle10g/11g/12c都支持windows、Linux各大版本,包括X-86/64位系统。
Oracle特点
- 具有完整的数据库管理功能、完备关系的产品以及具有分布式处理能力。
- 对数据的可靠性、大量性、持久性、共享性提供了一套可靠的解决方案、而且可以轻松支持多用户、大事务量的事务处理。
- 优点:可用性强、可扩展性强、数据安全性强、稳定性高,以及现阶段12C支持分布式数据处理。
- 提供了一套严禁的逻辑结构、文件结构、相关恢复技术的解释和实现。
Oracle体系结构
数据库: 是存储数据的多个物理文件的集合,如控制文件,数据文件,参数文件,日志文件,临时文件等 ,它是静态的、永久的,只要文件存在它就存在。数据库名(db_name)就是对数据库的标识。
实例: oarcle数据库服务器主要有两部分组成(物理数据库和数据库管理系统),数据库管理系统是用户和物理数据库之间的一个中间层,是软件层。这个软件层具有一定的结构,这个结构又被称为实例结构。在启动数据库时,oracle首先要在内存中获取、划分、保留各种用途的区域,运行各种用途的后台进程,即创建一个实例(instance),然后由该实例装载、打开数据库,最后由这个实例来访问和控制数据库的各种物理结构。数据库至少由一个oracle实例引用,该实例由oracle系统标识符(system identity)唯一标识,用于区别此计算机上的任何其他实例。 一个Oracle实例对应着一系列的后台进程(Backguound Processes)和内存结构(Memory Structures),可以启动和关闭。 在启动数据库并使用数据库的时候,实际上是连接到该数据库的实例,通过实例来连接、使用数据库。所以实例是用户和数据库之间的一个中间Oracle实例启动时,为了保证该实例的正常使用,系统将为该实例启动一些后台进程。这些进程是操作数据库的基础,不管有没有用户连接数据库,这些进程都会被启动。 后台进程包括:
- DBWR(Database Write) : 数据库写入程序
- LGWR(Log Write) : 日志写入程序
- CKPT(Checkpoint) : 检查点
- SMON (System Monitor): 系统监控
- PMON(Process Monitor) : 进程监控
- ARCH(Archive) : 归档
- RECO : 恢复
- LCKn : 封锁
实例名(instance_name): 数据库实例名用于对外部连接。在操作系统中要取得与数据库的联系,必须使用数据库实例名。例如,要去连接一个数据库服务器,就必须知道其数据库实例名。 查询当前数据库实例名: 方法一:select instance_name from v$instance; 方法二:show parameter instance_name; 方法三:在参数文件中查询。
服务名(Service_name): 该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即不必Service name 必须与SID一样。如果数据库有域名,则数据库服务名就是全局数据库名,否则,数据库服务名与数据库名相同。 查询当前数据库服务名: 方法一:show parameter service_name 方法二:select * from v$parameter where name like '%service_name%'; 方法三:在参数文件中查询。
数据文件: Oracle数据文件是数据存储的物理单位,数据库的数据是存储在表空间中的。而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间,一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。
表空间: 表空间是Oracle 对物理数据库数据文件(ora/dbf)的逻 辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间由同一磁盘上的一个或多个数据文件(datafile)组成,一个数据文件只能属于一个表空间。
oracle用户: 表当中的数据是有Oracle用户放入到表空间当中的,而这些表空间会随机的把数据放入到一个或者多个数据文件当中。oracle对表数据的管理是通过用户对表的管理去查询,而不是直接对数据文件或表空间进行查询。因为不同用户可以在同一个表空间上面建立相同的表名。但是通过不同的用户管理自己的表数据。
数据结构逻辑关系如下图:
Oracle体系概要图如下:
|