1.3 熟悉新版Oracle 12c
Oracle数据库是积聚了众多领先性的数据库系统,在集群技术、高可用性、商业智能、安全性、系统管理等方面都领跑业界。Oracle是一个大型关系数据库管理系统,目前已经成为企业级开发首选。本章节主要介绍Oracle数据库的发展历程和Oracle 12c的新功能。
1.3.1 Oracle的发展历程
Oracle是由甲骨文公司开发出来的,并于1989年正式进入中国市场,成为第一家进入中国的世界软件巨头。Oracle大致发展历程如下:
1977年,Larry Ellison、Bob Miner和Ed Oates等人组建了Relational软件公司(Relational Software Inc., RSI)。他们决定使用C语言和SQL界面构建一个关系数据库管理系统(Relational Database Management System, RDBMS),并很快发布了第一个版本(仅是原型系统)。
1979年,RSI首次向客户发布了产品,即第2版。该版本的RDBMS可以在装有RSX-11操作系统的PDP-11机器上运行,后来又移植到了DEC VAX系统。
1983年,发布的第3个版本中加入了SQL语言,而且性能也有所提升,其他功能也得到增强。与前几个版本不同的是,这个版本是完全用C语言编写的。同年,RSI更名为Oracle Corporation,也就是今天的Oracle公司。
1984年,Oracle的第4版发布。该版本既支持VAX系统,也支持IBM VM操作系统。这也是第一个加入了读一致性(Read-consistency)的版本。
1985年,Oracle的第5版发布。该版本可称作是Oracle发展史上的里程碑,因为它通过SQL*Net引入了客户端/服务器的计算机模式,同时它也是第一个打破640KB内存限制的MS-DOS产品。
1988年,Oracle的第6版发布。该版本除了改进性能、增强序列生成与延迟写入(Deferred Writes)功能以外,还引入了底层锁。除此之外,该版本还加入了PL/SQL和热备份等功能。这时Oracle已经可以在许多平台和操作系统上运行。
1991年,Oracle RDBMS的6.1版在DEC VAX平台中引入了Parallel Server选项,很快该选项也可用于许多其他平台。
1992年,Oracle 7发布。Oracle 7在对内存、CPU和I/O的利用方面做了许多体系结构上的变动,这是一个功能完整的关系数据库管理系统,在易用性方面也做了许多改进,引入了SQL*DBA工具和Database角色。
1997年,Oracle 8发布。Oracle 8除了增加许多新特性和管理工具以外,还加入了对象扩展(Object Extension)特性(在Windows系统下开始使用,以前的版本都是在UNIX环境下运行)。
2001年,Oracle 9i release 1发布。这是Oracle 9i的第一个发行版,包含RAC(Real Application Cluster)等新功能。
2002年,Oracle 9i release 2发布,它在release 1的基础上增加了集群文件系统(Cluster File System)等特性。
2004年,针对网格计算的Oracle 10g发布。该版本中Oracle的功能、稳定性和性能的实现都达到一个新的水平。
2007年7月12日,甲骨文公司推出的最新数据库软件Oracle 11g,Oracle 11g有400多项功能,经过了1500万个小时的测试,开发工作量达到了3.6万人/月。相对过往版本而言,Oracle 11g具有与众不同的特性。
2013年6月26日,Oracle Database 12c版本正式发布,12c里面的c是cloud,也就是代表云计算的意思。
与Oracle数据库基本同时期的还有informix数据库系统。两者使用的用户有所侧重。Oracle数据库系统银行业使用较多,Informix数据库系统,通信业使用较多。由于Oracle数据库产品是当前数据库技术的典型代表,除了数据库系统外,还有应用系统和开发工具等。
1.3.2 Oracle 12c版本的新功能
新版Oracle Database 12c汇集了参会者最多的目光,Larry Ellison也在开幕演讲中重点介绍了12c的一些新特性。在学习Oracle Database 12c之前,数据库管理员希望能够提前了解它的一些新功能、新特性。
(1)PL/SQL性能增强:类似在匿名块中定义过程,现在可以通过WITH语句在SQL中定义一个函数,采用这种方式可以提高SQL调用的性能。
(2)改善Defaults:包括序列作为默认值、自增列。当明确插入NULL时指定默认值;metadata-only default值指的是增加一个新列时指定的默认值,和11g中的区别在于,11g的default值要求NOT NULL列。
(3)放宽多种数据类型长度限制:增加了VARCHAR2、NVARCHAR2和RAW类型的长度到32KB,要求兼容性设置为12.0.0.0以上,且设置了初始化参数MAX_SQL_STRING_SIZE为EXTENDED,这个功能不支持CLUSTER表和索引组织表。最后这个功能并不是真正改变了VARCHAR2的限制,而是通过OUT OF LINE的CLOB实现。
(4)TOP N的语句实现:在SELECT语句中使用“FETCH next N rows”或者“OFFSET”,可以指定前N条或前百分之多少的记录。
(5)行模式匹配:类似分析函数的功能,可以在行间进行匹配判断并进行计算。在SQL中新的模式匹配语句是“match_recognize”。
(6)分区改进:Oracle Database 12c中对分区功能做了较多的调整,其中共分成下面6个部分。
- INTERVAL-REFERENCE分区:把11g的interval分区和reference分区结合,这样主表自动增加一个分区后,所有的子表、孙子表、重孙子表、重重孙子表等都可以自动随着外接列新数据增加,自动创建新的分区。
- TRUNCATE和EXCHANGE分区及子分区。无论是TRUNCATE还是EXCHANGE分区,在主表上执行,都可以级联地作用在子表、孙子表、重孙子表、重重孙子表……。对于TRUNCATE而言,所有表的TRUNCATE操作在同一个事务中,如果中途失败,会回滚到命令执行之前的状态。这两个功能通过关键字CASCADE实现。
- 在线移动分区:通过MOVE ONLINE关键字实现在线分区移动。在移动的过程中,对表和被移动的分区可以执行查询、DML语句以及分区的创建和维护操作。整个移动过程对应用透明。这个功能极大地提高了整体可用性,缩短了分区维护窗口。
- 多个分区同时操作:可以对多个分区同时进行维护操作,比如将一年的12个分区MERGE到1个新的分区中,比如将一个分区SPLIT成多个分区。可以通过FOR语句指定操作的每个分区,对于RANGE分区而言,也可以通过TO来指定处理分区的范围。多个分区同时操作自动并行完成。
- 异步全局索引维护:对于非常大的分区表而言,UPDATE GLOBAL INDEX不再是痛苦。Oracle可以实现异步全局索引、异步维护的功能,即使是几亿条记录的全局索引,在分区维护操作,比如DROP或TRUNCATE后,仍然是VALID状态,索引不会失效,不过索引的状态是包含OBSOLETE数据,当维护操作完成,索引状态恢复。
- 部分本地和全局索引:Oracle的索引可以在分区级别定义。无论全局索引还是本地索引都可以在分区表的部分分区上建立,其他分区上则没有索引。当通过索引列访问全表数据时,Oracle通过UNION ALL实现,一部分通过索引扫描,另一部分通过全分区扫描。这可以减少对历史数据的索引量,极大地增加了灵活性。
(7)Adaptive执行计划:拥有学习功能的执行计划,Oracle会把实际运行过程中读取到的返回结果作为进一步执行计划判断的输入,因此统计信息不准确或查询真正结果与计算结果不准时,可以得到更好的执行计划。
(8)统计信息增强:动态统计信息收集增加第11层,使得动态统计信息收集的功能更强;增加了混合统计信息用以支持包含大量不同值,且个别值数据倾斜的情况;添加了数据加载过程收集统计信息的能力;对于临时表增加了会话私有统计信息。
(9)临时UNDO:将临时段的UNDO独立出来,放到TEMP表空间中,优点包括减少UNDO产生的数量,减少REDO产生的数量,在ACTIVE DATA GUARD上允许对临时表进行DML操作。
(10)数据优化:新增了ILM(数据生命周期管理)功能,添加了“数据库热图”(Database Heat Map),在视图中直接看到数据的利用率,找到哪些数据是最“热”的数据。可以自动实现数据在线压缩和数据分级,其中数据分级可以在线将定义时间内的数据文件转移到归档存储,也可以将数据表定时转移至归档文件,还可以实现在线数据压缩。
(11)应用连续性:Oracle Database 12c之前RAC的FAILOVER只做到SESSION和SELECT级别,对于DML操作无能为力,当设置为SESSION,进行到一半的DML自动回滚;而对于SELECT,虽然FAILOVER可以不中断查询,但是对于DML的问题更甚之,必须要手工回滚。而Oracle Database 12c中Oracle终于支持事务的FAILOVER。
(12)Oracle Pluggable Database:Oracle PDB体系结构由一个容器数据库(CDB)和多个可组装式数据库(PDB)构成,PDB包含独立的系统表空间和SYSAUX表空间等,但是所有PDB共享CDB的控制文件、日志文件和UNDO表空间。
1.3.3 Oracle的优势
Oracle的主要优势如下。
(1)速度:运行速度快。
(2)稳定性:Oracle是目前数据库中稳定性非常好的数据库。
(3)共享SQL和多线索服务器体系结构:Oracle 7.X以来引入了共享SQL和多线索服务器体系结构。这减少了Oracle的资源占用,并增强了Oracle的能力,使之在低档软硬件平台上用较少的资源就可以支持更多的用户,而在高档平台上可以支持成百上千个用户。
(4)可移植性:能够工作在不同的系统平台上,例如:Windows和Linux等。
(5)安全性强:提供了基于角色(ROLE)分工的安全保密管理。在数据库管理功能、完整性检查、安全性、一致性方面都有良好的表现。
(6)支持类型多:支持大量多媒体数据,如二进制图形、声音、动画以及多维数据结构等。
(7)方面管理数据:提供了新的分布式数据库能力。可通过网络较方便地读写远端数据库里的数据,并有对称复制的技术。