Oracle Database 11g 快捷版速览

作者:Przemyslaw Piotrowski

新的快捷版反映了 Oracle Database 代码库自 10.2.0.1 以来的重要更新,对开发人员和 DBA 而言有着重大价值。

2011 年 9 月发布

在本文中,您将了解 Oracle Database 11g 快捷版 (XE) 中引入的新特性。Oracle 免费数据库产品的这个最新版本囊括了企业版从 10.2.0.1 到 11.2.0.2 的重要更新。(这很能说明更改的跨度:4 个 10g 发布周期和 4 个 11g 发布周期。)从 PIVOT 运算符、延迟段创建和虚拟列等相对简单的改进到自适应游标共享、数据库驻留连接池和基于版本的重定义等开创性特性,这个新版本为“快捷”RDBMS 设定了新标准。

针对日益增长的存储需求,Oracle Database 11g XE 现在单为用户数据就提供了足足 11GB,这几乎是 Oracle Database 10g XE 中先前 4GB 限制的三倍。其他硬件限制保持不变,CPU 使用上限仍为一个物理内核,内存仍为 1GB。Oracle Database 11g XE 可直接用于 Windows 和 Linux 平台。

以下是现在可通过快捷版免费获得的 Oracle Database 11g 第 2 版功能的快速浏览。

安装和升级

与 Database Upgrade Assistant (DBUA) 或手动升级等传统方法相比,XE 这个新版本的升级非常简单:整个过程包括:生成现有数据库的转储文件、卸载旧版本、安装新版本以及导入转储文件。(注意:Oracle Application Express 应用程序通过单独的路径升级,不包括在完整转储中,而是由提供的 gen_inst.sql 脚本负责处理。)

 11g-xe-quicktour-f1

图 1 安装屏幕

安装过程允许选择常规部署或静默安装,因此可以轻松针对大规模部署编写此过程的脚本。有关详细信息,请参见 Oracle Database 快捷版安装指南,该指南说明了执行升级所需的具体步骤。

11g-xe-quicktour-f2

图 2 新的 Web 界面

应用程序开发

Oracle Application Express (APEX) 仍是最积极开发的 Oracle 数据库特性之一,自 Oracle Database 10g XE 中附带的 2.1 版以来,该特性已历经两个重要的里程碑。首先,Oracle APEX 3.0 带来了 PDF 打印、Access 迁移、页面缓存以及一些构建器增强。随后,以 Oracle APEX 4.0.2 形式与 11g XE 绑定的 4.0 版引入了 Websheet,这是一项可以轻松管理内容的独特技术,用户可以用它来控制公开数据的内容和结构。其他改进包括:原生动态操作、插件框架、用于简化应用程序开发过程的团队特性、RESTful Web 服务、J2EE APEX 监听器以及改进的应用程序构建器。(截至撰写本文时发布的最新版本 4.1 版提供了改进的错误处理、在表单中使用 ROWID 而不是主键的能力、电子表格上载功能,并对构建器进行了更多改进。)

要了解这些版本的更多详细信息,请查看 Oracle APEX 更改日志 2.23.03.24.04.1

11g-xe-quicktour-f3

图 3 Oracle APEX 主页

凭借 Oracle 对开源 PHP 驱动程序 (OCI8) 的众多贡献,该模块现在改进了与 OCI 驱动程序的连接性和兼容性,包括支持快速应用通知。PHP 开发人员还可以从对服务器端连接池的原生支持受益,该连接池可提高 Web 流量的性能。要了解在这个新版本中使用 PHP 的详细信息,Oracle 学习资料库两日速成教程 + PHP 开发人员指南 是最佳起点。

Oracle 的 Java 数据库驱动程序已升级至 JDBC 4.0 标准,该标准提供自动加载、改进的连接处理、对 ROWID、XML 及 ANYTYPE 数据类型的支持。其他增强包括 SQL 批注和改进的异常处理。

.NET 开发人员无疑将会欣赏通过配置文件设置 ODP.NET 的能力,以及 LOB 检索和上下文缓存方面的性能改进。

SQL

SQL 是 Oracle Database 11g 的亮点之一,快捷版也继承了这一亮点。许多出色的新特性都是为了响应用户在过去几年中的反馈而实现的。其他的则是向前迈进一步,给您的开发工具箱带来令人印象深刻的新功能。

以前,添加新的非空列是一个巨大挑战,尤其是对包含海量数据的巨型表。此类操作在 ALTER 语句执行期间会锁定整个表,通常需要一些复杂的解决方法。Oracle Database 11g 第 2 版就不存在这种情况,它通过一种全的新方法来处理如何添加必需列,从而巧妙地解决了这一问题。因为新列中所有行都被赋于了一个常量默认值,不能为空,所以新列仅存储在数据字典中,更改是瞬间发生的。

虚拟列是在用户看来像常规表列一样的命名表达式。它们并不占用磁盘空间,是通过从基列中衍生的的信息对基列进行补充的极好方式。虚拟列能够以多种不同方式提供额外信息,从而填补了表和视图间的空白。

多次部署索引会带来选错执行计划的风险,通常无法提前预测。通过引入不可见索引,Oracle Database 11g 第 2 版提供了一种降低该风险的全新方法。可见性允许通过将 OPTIMIZER_USE_INVISIBLE_INDEXES 参数设置为 TRUE 在会话中隐蔽静默部署索引,也可以在系统级设置该参数,这样所有不可见索引要么由优化器选取,要么仍被忽略。在创建索引期间 (CREATE INDEX … INVISIBLE) 或之后 (ALTER INDEX … INVISIBLE) 需要提供可见性关键字。默认情况下,除非针对会话另行指定,否则服务器会被配置为忽略这些关键字。

备受期待的 SQL 字符串聚合函数 LISTAGG 也包含在正式版中。简练精确的语法 LISTAGG(...) WITHIN GROUP (ORDER BY …) 不仅易于使用,而且在速度上还远超迄今已知的所有替代方法。这并不是唯一的新聚合函数;另一个是 NTH_VALUE,该函数允许您选取窗口中的第 n 个值,这填补了 FIRST_VALUELAST_VALUE 函数之间的空白。同时,LAG 和 LEAD 函数还多了忽略空值的新选择。

11g-xe-quicktour-f4

图 4 LISTAGG 用法示例

转置列(即使在先前的 Oracle 版本中可用)现在也通过专用 SQL 运算符 PIVOTUNPIVOT 变得更加轻松。现在只需 select 语句中的一条显式子句即可交换行列获得交叉表格形式,附带的即需即用的 UNPIVOT 功能以便向回旋转转置结果。一个出色特性是 PIVOT 能够操作任意数目的列,它使用 XML 作为输出:(PIVOT XML (SUM(...) FOR … IN. (ANY))

递归子查询分解是 Oracle 提高与 ANSI SQL 标准的兼容性的诸多新特性之一。从 11g 开始,WITH 子句现在可以接受递归形式,这意味着它可以从 WITH 块内部引用自身。当然我们不是马上要对 CONNECT BY 说再见,但从现在起新的 WITH 子句将成为处理层次结构数据的首选方法。

每个 DBA 都喜爱的工具(当然是 SQL*Plus)也在不知不觉中得到了许多改进。SHOW 命令现在可以显示会话的 EDITION,还可通过 SPPARAMETERS 子句显示 SPFILE 内容。此外,新的调试机制允许通过 SET ON 命令捕获所有 SQL、PL/SQL 和 SQL*Plus 错误并记录在错误日志表中。最后,现在可以直接在命令行显示 BLOB 的内容。

PL/SQL

细粒度的依赖性跟踪是一个处理数据库内部对象失效的出色的新方法,是最吸引开发人员的特性之一。以前,对父对象的所有操作都会导致子对象无效,即使是更改对子对象无任何影响时也是如此。现在,只有直接受更改影响的对象才会无效。PL/SQL 编码人员无疑将认为单凭此项特性就值得升级。

原生 PL/SQL 编译终于可以脱离第三方 C 编译器独立进行,现在若要对 PL/SQL 代码进行原生编译,只需在会话、对象或实例级将 PLSQL_CODE_TYPE 设为 NATIVE。无需外部编译器 — 而是将经过解释的 PL/SQL 代码透明转换成经过编译的 M 代码。编译后的代码的运行速度比解释代码高一个量级,因此可绝对免费提供惊人的性能提升。

该版本中的触发器相当引人注目,最值得关注的更改以复合触发器的形式,这种触发器允许在触发它们的语句的生命周期内共享全局状态。这不但可防止表异常突变,还可补充交叉版本。其他改进包括能够通过 FOLLOWS 子句指定同类型触发器的顺序,以及将触发器创建为 DISABLED 的方法。

较小的增强包括:新的高性能 PL/SQL 数据类型 (SIMPLE_INTEGER)、非常需要的用于循环的 CONTINUE 语句、直接向变量分配序列值的功能,以及超过 32KB 的动态 SQL 语句的支持。

可管理性

在过去几年中,Oracle 新增了许多数据库特性将停机时间降至最低,并且解决了影响应用程序可用性的几乎每个方面的问题。然而,有一个特定的维护任务,它严格要求必须将应用程序停下来。现在,引入基于版本的重定义 (EBR) 填补了这一空白,这是一项革命性的新技术,可以完全消除应用程序升级期间的停机。在 XE 中提供此特性是一个极大的好消息。

所采用的方法是向数据字典本身添加一个全新的维度:版本。版本指的是数据库对象定义的修订版本,它是分层的,可在数据库、会话、服务或操作系统级进行配置。升级期间,您只需切换用户在重新连接时将要看到的版本。

11g-xe-quicktour-f5

图 5 使用基于版本的重定义

由于表本身并不能版本化(它需要数据副本),于是引入了新的对象类型来帮助不断变化的表:版本控制视图交叉版本触发器。它们用于控制对象可见性以及在共存版本之间来回快速传输数据。有关 EBR 的更多信息,请参见 Oracle Database 高级应用程序开发人员指南

对内存管理的改进始于 10g,在 11g 中得到进一步发扬光大。为进一步减少管理工作,现在可以使用自动内存管理 (AMM) 将 SGA 和 PGA 作为一个整体来管理,这意味着不再需要微调 SGA_TARGETPGA_AGGREGATE_TARGET 来满足期望的 OLTP 或批处理需求,Oracle 现在将通过一个简单的 MEMORY_TARGET 设置来调整内存分配,并根据需要进行扩展。还有一项新功能是关于参数文件管理的:现在可以从内存中创建 PFILE。DBA 无疑将欣赏这个小功能。

改进列表中还包括核心安全引擎。最值得一提的更改是为口令添加了区分大小写功能,这样在数据库登录过程中无法再忽略大写锁定键。这项改进以及少数其他身份验证改进,如设置最大失败尝试数、隐藏版本标志功能以及预防拒绝服务 (DoS) 攻击,通过一系列带 SEC_ 前缀的系统参数来控制。

安装期间创建了数百个空表的数据库应用程序现在可以得益于另一个有趣的用于减小存储占用的功能(延迟段创建),默认情况下所有新表都将启用该功能。使用延迟段创建某个表时 (CREATE TABLE … SEGMENT CREATION DEFERRED,),首次插入记录前不会为该表分配任何存储空间。当可选择表与各个应用程序模块一起填充但整个程序包一起交付时,这种行为可大大节省空间。可以通过在实例级将 DEFERRED_SEGMENT_CREATION 设置为 FALSE 或在创建表时通过显式方式 (CREATE TABLE … SEGMENT CREATION IMMEDIATE) 来禁用此功能。

统计信息的收集现在通过自动维护任务基础架构来管理。自动任务(其通常叫法)现在是重复发生的系统维护任务的基础,可通过 DBA_AUTOTASK% 视图对其进行监视。

该版本打包了大量可减轻 DBA 负担的小特性,如使表处于只读 (ALTER TABLE … READ ONLY) 状态、与原有导出参数文件的数据泵兼容性,以及 RMAN 在脚本中对变量的支持。

新的初始化参数包括:用于控制 DDL 语句在 DML 锁定时的等待时间的 DDL_LOCK_TIMEOUT、用于向警报日志报告所有 DDL 修改的 ENABLE_DDL_LOGGING、用于配置重做刷新行为的 COMMIT_WAIT 以及用于设置 I/O 保护级别的 DB_ULTRA_SAFE 等等。

最后,您可能会非常惊讶地发现警报日志采用了 XML 格式,跟踪文件现在将写入由 DIAGNOSTIC_DEST 参数指定的 $ORACLE_BASE/diag 目标。跟踪文件和日志文件的位置现在由 ADR 结构控制。

性能

Oracle Database 11g 第 2 版为现有的共享和专用模式带来了一个全新的连接类型。专门针对 Web 流量创建的数据库驻留连接池 (DRCP) 使用专用服务器和连接代理的组合来处理来自 Web 应用程序的简短、临时的会话。根据各种统计信息,DRCP 比共享服务器快 10 倍,比专用服务器快 20 倍。它通过一组超时、池限制和会话设置,仅启动少数专用进程来处理进入池中的连接,从而解决了服务器资源耗尽的问题。

使用默认配置的 DRCP 设置只需要两个简单步骤:启动池,然后通过设置 (SERVER=POOLED) 而不是 (SERVER=DEDICATED)(SERVER=SHARED) 来修改 TNS 项。有了这样的设置,所有到数据库的新连接将仅持续短暂的生命周期并将由 Oracle 服务器自动进行循环。

11g-xe-quicktour-f6

图 6 启用池化服务器并验证池连接性

以前,使用所提供的绑定变量对 SQL 语句进行首次分析时,数据库将在生命周期内保持其执行计划。尽管绑定窥视对于均匀分布的值的效果非常好,但在处理偏差数据时不是很有效。Oracle Database 11g 第 2 版中引入的自适应游标共享 (ACS) 是专为解决此问题而设计的,它采用的办法是为具有不同绑定的同一语句保留多个计划。这允许您基于实际绑定值来选择执行计划。ACS 在默认情况下已启用且不能禁用,它对最终用户和开发人员是完全透明的。

还有一段从头开始重新编写的 Oracle Database 引擎。加入了 Oracle 新的大型对象 (LOB) 实现 SecureFiles,它在 I/O 缓冲访问、ASSM 依赖性、动态块大小、减少争用和卓越的性能方面有着全新的特性。SecureFiles 可以使用 LOB 子句 (LOB(...) STORE AS SECUREFILE) 单独定义,也可以通过将 DB_SECUREFILE 参数设置为 ALWAYS 在实例级针对所有新 LOB 进行定义。从现在起,SecureFiles 将是您处理数据库中媒体内容的必然选择。

原有的 Statspack 很不错,它在监视性能统计信息方面发挥了重要作用,在历次版本中得到了许多增强。在 11g 第 2 版中,它可以自动捕获快照,带有广泛的报表功能,并允许对实例性能进行一站式洞察。有关完整手册,请参见 XE 安装的 ORACLE_HOME/rdbms/admin 目录下的 SPDOC.TXT 文件。

最后,性能调优专家将会惊喜地发现数据字典在与等待事件有关的视图(如 V$SESSION、V$SESSION_WAIT 和 V$SESSION_EVENT)中包含高分辨率、微秒级的统计信息。

更多……

希望本文能够激发您深入了解这个新版本的兴趣。一旦您对提升的存储限制、开发增强和可管理性方面的改进有了更好的了解,无疑将使您从中获益。自从 2005 年快捷版的第一个 Beta 版推出我就开始使用它了,目睹了它几乎无处不在的部署 — 从开发人员便携式电脑和虚拟机场到 ISV 演示和应用程序包。有了这一新版本,它无疑会变得更为普及。


Przemyslaw Piotrowski 是一位高级数据库管理员,擅长实现最高可用性架构和敏捷开发环境。他精通 Oracle 数据库及其配套技术,在管理、开发和设计方面有着广泛的经验。