Oracle 12c中文版数据库管理、应用与开发实践教程 (清华电脑学堂)
上QQ阅读APP看书,第一时间看更新

1.1 Oracle 12c概述

Oracle数据库系统是美国Oracle公司提供的以分布式数据库为核心的一组软件产品,是目前最流行的C/S或B/S体系结构的数据库之一。目前Oracle 12c是最新版本,本节首先介绍该版本的基础知识。

1.1.1 发展历史

Oracle公司是全球最大的信息管理软件及服务供应商,它的创建来源于一篇技术型论文。这篇论文是1970年6月,IBM公司的研究员德加·考特(Edgar Frank Codd)在Communications of ACM上发表的《大型共享数据库数据的关系模型》。

随后,在1977年6月,Larry Ellison与Bob Miner和Ed Oates在硅谷共同创办了一家名为软件开发实验室(Software Development Laboratories, SDL)的计算机公司(Oracle公司的前身),该公司开始策划构建可商用的关系型数据库系统。根据Ellison和Miner在前一家公司从事的一个由中央情报局投资的项目代码,他们把这个产品命名为Oracle。因为他们相信Oracle(字典里的解释有“神谕,预言”之意)是一切智慧的源泉。

1979年,SDL更名为关系软件有限公司(Relational Software, Inc., RSI),毕竟“软件开发实验室”不太像一个大公司的名字。

1983年,为了突出公司的核心产品,RSI再次更名为Oracle。Oracle从此正式走入人们的视野。RSI在1979年的夏季发布了可用于DEC公司的PDP-11计算机上的商用Oracle产品,这个数据库产品整合了比较完整的SQL实现,其中包括子查询、连接及其他特性。出于市场策略,公司宣称这是该产品的第2版,但实际上却是第1版。同年3月,RSI发布了Oracle第3版。

1984年10月,Oracle发布了第4版产品,该版本的产品稳定性得到了增强。

1985年,Oracle发布了第5版。有些用户说,这个版本算得上是Oracle数据库的稳定版本。这也是首批可以在C/S模式下运行的RDBMS产品,在技术趋势上,Oracle数据库始终没有落后。

1986年3月12日,Oracle公司以每股15美元公开上市。两年后,Oracle发布了第7版,它是Oracle真正出色的产品,它的发布取得了巨大的成功。

1997年6月,Oracle发布第8版,它支持面向对象的开发及新的多媒体应用,这个版本也为支持Internet、网络计算等奠定了基础。1998年9月,Oracle公司正式发布Oracle 8i, “i”代表Internet。Oracle 8i成为第一个完全整合了本地Java运行时环境的数据库。

在2001年6月的Oracle Open World大会中,Oracle发布了Oracle 9i,它是一个更加完善的数据库版本。

2007年11月,Oracle 11g正式发布。Oracle 11g是Oracle公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理等多项创新。

2013年6月26日,Oracle 12c版本正式发布,其中“c”代表云计算,首先发布的版本号是12.1.0.1.0,目前最新的版本号是12.1.0.2.0。Oracle 12c数据库引入了一个新的多承租方架构,使用该架构可以轻松部署和管理数据库云。另外,一些创新特性可最大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的增强,使得Oracle 12c成为私有云和公有云部署的理想平台。

1.1.2 数据库版本

Oracle 12c为适合不同规模的组织需要提供了多个量身定制的版本,并为满足特定的业务和IT需求提供了几个企业版专有选件。Oracle 12c数据库有4个版本,即企业版、标准版、标准版1和个人版。

1.企业版

Oracle 12c企业版将对正在部署私有数据库云的客户和正在寻求以安全、隔离的多租户模型发挥Oracle数据库强大功能的SaaS(Software-as-a-Service,软件即服务)供应商有极大帮助。而且企业版提供综合功能来管理要求最严苛的事务处理、大数据以及数据仓库负载。客户可以选择各种Oracle数据库企业版选件来满足业务用户对性能、安全性、大数据、云和可用性服务级别的期望。

Oracle 12c企业版数据库具有以下优势。

(1)使用新的多租户架构,无须更改现有应用即可在云上实现更高级别的整合。

(2)自动数据优化特性可高效地管理更多数据、降低存储成本和提升数据库性能。

(3)深度防御的数据库安全性可应对不断变化的威胁和符合越来越严格的数据隐私法规。

(4)通过防止发生服务器故障、站点故障、人为错误以及减少计划内停机时间和提升应用连续性,获得最高可用性。

(5)可扩展的业务事件顺序发现和增强的数据库中大数据分析功能。

(6)与Oracle Enterprise Manager Cloud Control 12c无缝集成,使管理员能够轻松管理整个数据库生命周期。

2.标准版

Oracle 12c标准版是面向中型企业的一个经济实惠、功能全面的数据管理解决方案。该版本中包含一个可插拔数据库用于插入云端,还包含Oracle真正应用集群用于实现企业级可用性,并且可随用户的业务增长而轻松扩展。

使用Oracle 12c数据库具有以下优势。

(1)每用户350美元(最少5个用户),可以只购买目前需要的许可,然后使用Oracle真正应用集成随需扩展,从而节省成本。

(2)提高服务质量,实现企业级性能、安全性和可用性。

(3)可运行于Windows、Linux和UNIX操作系统。

(4)通过自动化的自我管理功能轻松管理。

(5)借助Oracle Application Express、Oracle SQL Developer和Oracle面向Windows的数据访问组件简化应用开发。

3.标准版1

Oracle 12c标准版1经过了优化,适用于部署在小型企业、各类业务部门和分散的分支机构环境中。该版本可在单个服务器上运行,最多支持两个插槽。Oracle 12c标准版可以在包括Windows、Linux和UNIX在内的所有Oracle支持的操作系统上使用。

使用Oracle 12c标准版1数据库具有以下优势。

(1)以极低的每用户180美元起步(最少5个用户)。

(2)以企业级性能、安全性、可用性和可扩展性支持所有业务应用。

(3)可运行于Windows、Linux和UNIX操作系统。

(4)通过自动化的自我管理功能轻松管理。

(5)借助Oracle Application Express、Oracle SQL Developer和Oracle面向Windows的数据访问组件简化应用开发。

4.个人版

个人版数据库只提供Oracle作为数据库管理系统的基本数据库管理服务,它适用于单用户开发环境,其对系统配置的要求也比较低,主要面向开发技术人员使用。

Oracle 12c的所有版本均使用同一个代码库构建而成,彼此之间完全兼容。Oracle 12c可用于多种操作系统中,并且包含一组通用的应用程序开发工具和编程接口。客户可以从标准版1开始使用,而后随着业务的发展或根据需求的变化,轻松升级到标准版或企业版。升级过程非常简单,只需安装下一个版本的软件,无须对数据库或应用程序进行任何更改,便可在一个易于管理的环境中获得Oracle举世公认的性能、可伸缩性、可靠性和安全性。

1.1.3 新特性

Oracle 12c企业版包含五百多个新特性,如数据库管理、RMAN、Data Guard以及性能调优等方面的改进。其中包括一种新的架构,可简化数据库整合到云的过程,客户无须更改其应用即可将多个数据库作为一个进行管理。本节只介绍对开发人员有用的Oracle 12c数据库的部分新特性。

1.WITH语句的改善

在Oracle 12c中,开发人员可以用SQL语句更快地运行PL/SQL函数或过程,这些是由SQL语句的WITH语句加以定义和声明的。尽管不能在PL/SQL块中直接使用WITH语句,但是可以在PL/SQL中通过一个动态SQL加以引用。

2.改善默认值

改善默认值包括将序列作为默认值;自增列;当明确插入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的语句实现

在之前的版本中有许多间接手段来获取顶部或底部记录TOP N查询结果的限制(如ROWNUM伪列),而在Oracle 12c中,通过新的FETCH语句(如FETCH FIRST|NEXT|PERCENT)简化这一过程并使其变得更为直接。

【范例1】

查询dba_users数据字典中user_id列的值最大的前10位的用户信息。语句如下:

      SELECT * FROM dba_users ORDER BY user_id DESC FETCH FIRST 10 ROWS ONLY;

5.行模式匹配

类似分析函数的功能,可以在行间进行匹配判断并进行计算。在SQL中新的模式匹配语句是match_recognize。

6.分区改进

Oracle 12c中对分区功能做了较多的调整,共分为6部分,简单说明如下。

(1)INTERVAL和REFERENCE分区

把11g的INTERVAL分区和REFERENCE分区结合,这样主表自动增加一个分区后,所有的子表、孙子表、重孙子表、重重重孙子表等都可以自动随着外接列新数据增加,自动创建新的分区。

(2)TRUNCATE和EXCHANGE分区及子分区

无论是TRUNCATE分区还是EXCHANGE分区,在主表上执行时,都可以级联地作用在子表、孙子表、重孙子表、重重重孙子表上同时运行。对于TRUNCATE而言,所有表的TRUNCATE操作在同一个事务中,如果中途失败,会回滚到命令执行之前的状态。这两个功能通过关键字CASCADE实现。

(3)在线移动分区

通过MOVE ONLINE关键字实现在线分区移动。在移动的过程中,对表和被移动的分区可以执行查询、DML语句以及分区的创建和维护操作。整个移动过程对应用透明。这个功能极大地提高了整体可用性,缩短了分区维护窗口。

(4)多个分区同时操作

可以对多个分区同时进行维护操作,例如,将一年的12个分区MERGE到一个新的分区中,又如将一个分区SPLIT成多个分区。可以通过FOR语句指定操作的每个分区,对于RANGE分区而言,也可以通过TO来指定处理分区的范围。多个分区同时操作自动并行完成。

(5)异步全局索引维护(UPDATE GLOBAL INDEX)

对于非常大的分区表而言,异步全局索引不再痛苦。Oracle可以实现异步全局索引异步维护的功能,即使是几亿条记录的全局索引,在分区维护操作,例如DROP或者TRUNCATE后,仍然是VALID状态,索引不会失效,不过索引的状态是包含OBSOLETE数据,当维护操作完成,索引状态恢复。

(6)部分本地和全局索引

Oracle的索引可以在分区级别定义。无论全局索引还是本地索引都可以在分区表的部分分区上建立,其他分区上则没有索引。当通过索引列访问全表数据时,Oracle通过UNION ALL实现,一部分通过索引扫描,另一部分通过全分区扫描。这可以减少对历史数据的索引量,极大地增加了灵活性。

7.Adaptive执行计划

拥有学习功能的执行计划,Oracle会把实际运行过程中读取到的返回结果作为进一步执行计划判断的输入,因此统计信息不准确或查询真正结果与计算结果不准时,可以得到更好的执行计划。

8.统计信息增强

动态统计信息收集增加第11层,使得动态统计信息收集的功能更强;增加了混合统计信息用以支持包含大量不同值,且个别值数据倾斜的情况;添加了数据加载过程收集统计信息的能力;对于临时表增加了会话私有统计信息。

9.临时UNDO

将临时段的UNDO独立出来,放到TEMP表空间中,这样做有以下三个优点。(1)减少UNDO产生的数量。

(2)减少REDO产生的数量。

(3)在ACTIVE DATA GUARD上允许对临时表进行DML操作。

10.数据优化

新增数据生命周期管理(Information Lifecycle Management, ILM)的功能,添加“数据库热图(Database Heat Map)”,在视图中直接看到数据的利用率,找到哪些数据是最“热”的数据。可以自动实现数据的在线压缩和数据分级,其中,数据分级可以在线将定义时间内的数据文件转移到归档存储,也可以将数据表定时转移至归档文件,也可以实现在线的数据压缩。

11.应用连接性

Oracle 12c之前RAC的FAILOVER只做到SESSION和SELECT级别,对于DML操作无能为力,当设置为SESSION,进行到一半的DML自动回滚;而对于SELECT,虽然FAILOVER可以不中断查询,但是对于DML的问题更甚之,必须要手工回滚。但是在Oracle 12c版本中,Oracle数据库终于支持了事务的FAILOVER操作。

12.Oracle Pluggable Database

Oracle PDB由一个容器数据库(CDB)和多个可组装式数据库(PDB)构成,PDB包含独立的系统表空间和SYSAUX表空间等,但是所有PDB共享CDB的控制文件、日志文件和UNDO表空间。

Oracle Pulggable Databases特性可以带来以下好处。

(1)加速重新部署现有的数据库到新的平台的速度。

(2)加速现有数据库打补丁和升级的速度。

(3)从原有的DBA的职责中分离部分责任到应用管理员。

(4)集中式管理多个数据库。

(5)提升RAC的扩展性和故障隔离。

(6)与Oracle SQL Developer和Oracle Enterprise Manager高度融合。