Sie sind auf Seite 1von 408

THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY.

COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

D77758CN20
学生指南– 第 2 卷
面向管理员

Edition 2.0 | Dec 2014 | D88762

Learn more from Oracle University at oracle.com/education/


Oracle Database 12c: 新功能-

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

作者 版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Dominique Jeunot 免责声明

Jean-Francois Verrier 本软件和相关文档是根据许可证协议提供的,该许可证协议中规定了关于使用和公开本


软件和相关文档的各种限制,并受知识产权法的保护。除非在许可证协议中明确许可或
适用法律明确授权,否则不得以任何形式、任何方式使用、拷贝、复制、翻译、广播、
技术撰稿人和审稿人 修改、授权、传播、分发、展示、执行、发布或显示本软件和相关文档的任何部分。除
Andy Rivenes 非法律要求实现互操作,否则严禁对本软件进行逆向工程设计、反汇编或反编译。

James Spiller 此文档所含信息可能随时被修改,恕不另行通知,我们不保证该信息没有错误。如果贵


方发现任何问题,请书面通知我们。
Donna Keesling

Oracle University and Error : You are not a Valid Partner use only
Maria Billings 有限权利声明

Lachlan Williams 如果将本软件或相关文档交付给美国政府,或者交付给以美国政府名义获得许可证的任


Peter Fusek 何机构,必须符合以下规定:

Mark Fuller U.S. GOVERNMENT END USERS:


Oracle programs, including any operating system, integrated software, any programs
Gregg Christman installed on the hardware, and/or documentation, delivered to U.S. Government end
Dimpi Sarmah users are "commercial computer software" pursuant to the applicable Federal
Acquisition Regulation and agency-specific supplemental regulations. As such, use,
Kevin Jernigan duplication, disclosure, modification, and adaptation of the programs, including any
Branislav Valny operating system, integrated software, any programs installed on the hardware,
and/or documentation, shall be subject to license terms and license restrictions
Frank Fu applicable to the programs. No other rights are granted to the U.S. Government.
Joel Goodman
商标声明
Gerlinde Frenzen
Oracle 和 Java 是 Oracle 和/或其附属公司的注册商标。其他名称可能是各自所有者的
Harald Van Breederode 商标。
Hermann Baer
Jim Stenoish
Mark Drake
Beda Hammerschmidt 编辑
Prabhaker Gongloor Anwesha Ray
Patrick Wheeler Malavika Jinka
Maria Colgan Smita Kommini
Jesse Kamp
Paul Needham 制图员
Pat Huey Seema Bopaiah
Roy F Swonger Maheshwari Krishnamurthy
Ron Soltani
Sue Lee 出版商
Sharath Bhujani Jobi Varghese
Pavithran Adka
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

目录

Oracle University and Error : You are not a Valid Partner use only
1 简介
概览 1-2
Oracle DB 创新历程 1-3
企业云计算 1-4
Oracle Database 12c 新增功能和增强功能 1-5

2 Enterprise Manager Cloud Control 和其他工具


Oracle Database 12c 新增功能和增强功能 2-2
课程目标 2-3
管理员的主要难题 2-4
Enterprise Manager Cloud Control 2-5
Cloud Control 组件 2-7
组件和通信流 2-8
Oracle Management Repository 2-9
控制 Enterprise Manager Cloud Control 框架 2-10
启动 Enterprise Manager Cloud Control 框架 2-11
停止 Enterprise Manager Cloud Control 框架 2-12
不同目标类型 2-13
目标搜索 2-14
Enterprise Manager Cloud Control 2-15
用户界面 2-16
安全性:概览 2-17
使用身份证明安全地进行管理 2-18
区分身份证明 2-19
测验 2-21
Enterprise Manager Database Express 体系结构 2-22
配置 EM Database Express 2-23
主页 2-25
菜单 2-26
测验 2-28
Database Configuration Assistant 2-29

III
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle SQL Developer:连接 2-30


Oracle SQL Developer:DBA 操作 2-31
测验 2-32
小结 2-33
练习 2-34

Oracle University and Error : You are not a Valid Partner use only
3 课程单元多租户容器数据库和可插入数据库
Oracle Database 12c 新增功能和增强功能 3-3
课程目标 3-4
难题 3-5
11g 发行版 2 的 Oracle DB 3-6
新的多租户体系结构:优点 3-7
多租户体系结构的其他好处 3-9
配置 3-11
多租户容器数据库 3-12
原始安装 3-13
添加用户数据 3-14
分离 SYSTEM 和用户数据 3-15
USER 容器中的 SYSTEM 对象 3-16
命名容器 3-17
预配可插入数据库 3-18
在多租户容器数据库内互操作 3-19
多租户容器数据库体系结构 3-20
容器 3-21
问题:根与 PDB 3-22
问题:PDB 与根 3-23
术语 3-24
公用用户和本地用户 3-25
公用和本地权限和角色 3-26
共享和非共享对象 3-27
数据字典视图 3-28
影响 3-29
测验 3-31
小结 3-34
练习 3-35

IV
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

4 创建容器数据库和可插入数据库
Oracle Database 12c 新增功能和增强功能 4-2
课程目标 4-3
目标 4-5
工具 4-6
创建容器数据库的步骤 4-7

Oracle University and Error : You are not a Valid Partner use only
创建容器数据库:使用 SQL*Plus 4-8
创建容器数据库:使用 DBCA 4-9
新子句:SEED FILE_NAME_CONVERT 4-10
新子句:ENABLE PLUGGABLE DATABASE 4-11
创建 CDB 后:CDB 的新特性 4-12
数据字典视图:DBA_xxx 4-13
数据字典视图:CDB_xxx 4-14
数据字典视图:示例 4-15
数据字典视图:V$xxx 视图 4-16
创建 CDB 后:待办事项列表 4-17
自动诊断资料档案库 4-18
自动诊断资料档案库:alert.log 文件 4-19
测验 4-20
练习 4-22
预配新的可插入数据库 4-23
工具 4-24
方法 1:从 PDB$SEED 创建新 PDB 4-25
步骤:使用位置子句 4-26
步骤:不使用位置子句 4-28
同步 4-29
方法 2:将非 CDB 插入 CDB 4-30
使用 DBMS_PDB 将非 CDB 插入 CDB 4-32
方法 3:克隆本地 PDB 4-33
方法 3:克隆非 CDB 或远程 PDB 4-34
方法 4:将移走的 PDB 插入 CDB 4-35
方法 4:流 4-36
插入示例方案 PDB:使用 DBCA 4-38
删除 PDB 4-39
将 12.1 之前版本的数据库移植到 12.1 CDB 4-40

V
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

测验 4-41
小结 4-43
练习 4-44

5 管理多租户容器数据库和可插入数据库
Oracle Database 12c 新增功能和增强功能 5-2

Oracle University and Error : You are not a Valid Partner use only
课程目标 5-3
连接 5-4
使用 SQL*Developer 连接 5-7
切换连接 5-8
启动 CDB 实例 5-9
装载 CDB 5-10
打开 CDB 5-11
打开 PDB 5-12
关闭 PDB 5-13
关闭 CDB 实例 5-14
自动打开 PDB 5-15
更改 PDB 打开模式 5-16
更改 PDB 模式:使用 SQL Developer 5-17
修改 PDB 设置 5-18
实例参数更改影响 5-19
实例参数更改影响:示例 5-20
测验 5-21
小结 5-23
练习 5-24

6 管理 CDB 和 PDB 中的表空间和用户


Oracle Database 12c 新增功能和增强功能 6-2
课程目标 6-3
PDB 中的表空间 6-4
在 CDB 中创建永久表空间 6-5
分配默认表空间 6-6
创建本地临时表空间 6-7
分配默认临时表空间 6-8
用户、角色和权限 6-9
本地用户、角色和权限 6-10

VI
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

创建本地用户 6-11
公用用户 6-12
创建用户 6-13
公用方案/用户和本地方案/用户 6-14
公用权限和本地权限 6-15
授予和撤消权限 6-16

Oracle University and Error : You are not a Valid Partner use only
创建公用角色和本地角色 6-17
向角色授予公用或本地权限/角色 6-18
向用户授予公用角色和本地角色 6-19
创建共享对象和非共享对象 6-20
定义者权限的限制 6-21
测验 6-22
小结 6-24
练习 6-25

7 备份、恢复和闪回 CDB 和 PDB


Oracle Database 12c 新增功能和增强功能 7-2
课程目标 7-3
目标 7-4
RMAN 中的新语法和子句 7-5
CDB 备份:整个 CDB 备份 7-6
CDB 备份:部分 CDB 备份 7-7
PDB 备份:整个 PDB 备份 7-8
PDB 备份:部分 PDB 备份 7-9
PDB 备份:用户管理的热 PDB 备份 7-10
练习 7-11
恢复 7-12
实例故障 7-13
NOARCHIVELOG 模式 7-14
介质故障:CDB 临时文件恢复 7-15
介质故障:PDB 临时文件恢复 7-16
介质故障:控制文件丢失 7-17
介质故障:重做日志文件丢失 7-18
介质故障:根 SYSTEM 或 UNDO 数据文件 7-19
介质故障:根 SYSAUX 数据文件 7-20
介质故障:PDB 数据文件 7-21

VII
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

介质故障:PITR 7-22
闪回 CDB 7-24
特殊情况 7-26
测验 7-27
小结 7-29
练习 7-30

Oracle University and Error : You are not a Valid Partner use only
8 课程单元自动数据优化和存储增强功能
Oracle Database 12c 新增功能和增强功能 8-3
课程目标 8-4
ILM 难题和解决方案 8-5
ILM 组件 8-6
ILM 难题 8-7
解决方案 8-8
组件 8-10
什么是自动数据优化 8-12
数据分类级别 8-13
热图和 ADO 8-14
启用热图段级别统计信息 8-15
DBA_HEAT_MAP_SEGMENT 视图 8-16
块级别统计信息 8-17
区级别统计信息 8-18
定义自动检测条件 8-19
定义自动操作 8-20
压缩作用域和类型 8-21
创建压缩策略表空间和组 8-22
创建压缩策略段和行 8-23
创建存储分层策略 8-25
存储分层:优先级 8-26
存储分层:READ ONLY 8-27
依赖于函数的策略 8-28
一个段的多个 SEGMENT 策略 8-29
一个段只能有一个 ROW 策略 8-31
策略继承 8-32
显示策略 DBA_ILMPOLICIES/DBA_ILMDATAMOVEMENTPOLICIES 8-33
显示策略 DBA_ILMDATAMOVEMENTPOLICIES 8-34

VIII
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

准备评估和执行 8-35
定制评估和执行 8-36
监视评估和执行 8-37
ADO DDL 8-39
打开和关闭 ADO 8-40
停止活动跟踪和清除热图统计信息 8-41

Oracle University and Error : You are not a Valid Partner use only
活动跟踪的特定情况 8-42
测验 8-44
联机移动数据文件 8-46
压缩 8-47
REUSE 和 KEEP 8-48
状态 8-49
兼容性 8-50
闪回数据库 8-51
联机移动分区 8-52
联机移动分区:优点 8-53
联机移动分区:压缩 8-54
测验 8-55
小结 8-56
练习 8-57

9 数据库中归档和期间 (Temporal) 功能
Oracle Database 12c 新增功能和增强功能 9-2
课程目标 9-3
归档难题 9-4
归档解决方案 9-5
数据库中归档:HCC 9-6
归档难题和解决方案 9-8
数据库中归档 9-10
ORA_ARCHIVE_STATE 列 9-11
会话可见性控制 9-12
禁用行归档 9-13
测验 9-14
PERIOD FOR 子句概念 9-16
按有效时间列进行过滤:示例 1 9-17
按有效时间列进行过滤:示例 2 9-18

IX
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

DBMS_FLASHBACK_ARCHIVE 9-19
测验 9-20
期间历史记录增强功能:FDA 优化 9-21
期间历史记录增强功能:用户上下文元数据 9-22
小结 9-23
练习 9-24

Oracle University and Error : You are not a Valid Partner use only
10 课程单元安全性
Oracle Database 12c 新增功能和增强功能 10-3
课程目标 10-4
审计类型 10-5
审计线索实施 10-6
Oracle Database 12c 审计 10-8
安全性和性能:审计体系结构 10-9
整合 10-10
数据泵审计策略 10-11
统一审计实施 10-12
测验 10-14
安全性 10-16
简单性:审计策略 10-17
第 1 步:创建审计策略 10-18
第 2 步:启用/禁用审计策略 10-20
查看审计策略 10-21
使用预定义的审计策略 10-22
包括应用程序上下文数据 10-23
删除审计策略 10-24
审计清理 10-25
测验 10-26
小结 10-27
练习 10-28

11 权限
Oracle Database 12c 新增功能和增强功能 11-2
课程目标 11-3
主要难题 11-4
新增的管理权限 11-5

X
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

操作系统验证和操作系统组 11-6
SYSBACKUP 的口令验证 11-8
Oracle Database Vault 数据保护和管理授权用户 11-10
测验 11-11
新增系统权限:PURGE DBA_RECYCLEBIN 11-13
权限分析 11-14

Oracle University and Error : You are not a Valid Partner use only
权限分析流 11-15
使用的权限结果 11-17
比较使用的权限和未使用的权限 11-18
列出捕获 11-19
删除分析 11-20
测验 11-21
PL/SQL 调用过程中的权限检查 11-22
PL/SQL 调用过程中的新权限检查 11-23
INHERIT (ANY) PRIVILEGES 权限 11-25
通过新的 BEQUEATH 视图进行权限检查 11-26
测验 11-27
小结 11-29
练习 11-30

12 Oracle 数据编写
Oracle Database 12c 新增功能和增强功能 12-2
课程目标 12-3
Oracle 数据编写:概览 12-4
Oracle 数据编写和操作活动 12-6
可用的编写方法 12-7
Oracle 数据编写:示例 12-8
什么是编写策略 12-9
管理编写策略 12-11
将编写策略应用于表或视图 12-12
完全编写:示例 12-13
部分编写:示例 12-14
正则表达式 12-15
修改编写策略 12-16
从编写策略中排除用户 12-17
将 Oracle 数据编写与其他 Oracle DB 安全解决方案结合使用 12-18

XI
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle DB 安全功能 12-19


最佳实践:防止未经授权的策略修改和排除 12-21
最佳实践:注意事项 12-22
小结 12-23
练习 12:概览 12-24

Oracle University and Error : You are not a Valid Partner use only
13 课程单元高可用性
Oracle Database 12c 新增功能和增强功能 13-3
课程目标 13-4
DBA 职责分离 13-5
在 RMAN 中使用 SQL 13-6
备份和还原非常大的文件 13-7
RMAN 复制增强功能 13-8
复制活动数据库 13-9
新增功能 13-10
NOOPEN 选项 13-11
复制多租户容器数据库 13-12
使用第三方快照恢复数据库 13-13
测验 13-14
跨平台传输数据 13-15
数据传输 13-16
传输数据库:流程步骤 - 1 13-17
传输数据库:流程步骤 - 2 13-18
传输表空间:流程步骤 - 1 13-19
传输表空间:流程步骤 - 2 13-20
测验 13-21
表恢复 13-22
从备份恢复表 13-23
表恢复:图形化概览 13-24
指定恢复时间点 13-25
表恢复流程步骤 - 1 13-26
定制设置 13-27
测验 13-28
小结 13-29
练习 13:概览 13-30

XII
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

14 课程单元易管理性
Oracle Database 12c 新增功能和增强功能 14-3
课程目标 14-4
实时数据库操作监视:概览 14-5
用例 14-6
当前的工具 14-7

Oracle University and Error : You are not a Valid Partner use only
定义数据库操作 14-9
组合数据库操作的范围 14-10
数据库操作概念 14-11
标识数据库操作 14-12
启用对数据库操作的监视 14-13
标识、启动和完成数据库操作 14-14
监视数据库操作的进度 14-15
监视加载数据库操作 14-16
监视加载数据库操作详细信息 14-17
使用视图报告数据库操作 14-18
使用函数报告数据库操作 14-20
数据库操作优化 14-22
测验 14-23
小结 14-25
练习 14:概览 14-26

15 紧急监视、实时 ADDM、比较时段 ADDM 以及 ASH 分析


Oracle Database 12c 新增功能和增强功能 15-2
课程目标 15-3
紧急监视:难题 15-4
紧急监视:目标 15-5
实时 ADDM:难题 15-7
实时 ADDM:目标 15-8
流程 15-10
使用 DBMS_ADDM 程序包 15-11
测验 15-12
AWR 比较时段报告 15-13
方法:保留的快照集 15-14
缺少了什么 15-15
比较时段 ADDM:分析 15-16

XIII
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

工作量一致性 15-17
比较模式 15-18
报告:配置 15-19
报告:查找结果 15-20
使用 DBMS_ADDM 程序包 15-21
测验 15-23

Oracle University and Error : You are not a Valid Partner use only
ASH:概览 15-24
顶级活动页面 15-25
ASH 分析页面:活动 15-26
小结 15-27
练习 15:概览 15-28

16 ADR 和网络增强功能
Oracle Database 12c 新增功能和增强功能 16-2
课程目标 16-3
自动诊断资料档案库 16-4
ADR 文件类型 16-5
ADR 文件:位置 16-6
ADR 文件:DDL 和调试日志文件 16-7
新的 ADRCI 命令 16-9
网络性能:压缩 16-10
设置压缩 16-11
会话数据单元 (SDU) 大小 16-12
设置 SDU 大小 16-13
测验 16-14
小结 16-15
练习 16:概览 16-16

17 课程单元性能
Oracle Database 12c 新增功能和增强功能 17-3
课程目标 17-4
内存中列存储的目标 17-5
优点 17-7
概览 17-8
行存储与列存储:2 维视角 17-10
内存中列单元 17-11

XIV
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

内存中列存储高速缓存与缓冲区高速缓存 17-12
内存中的双格式 17-13
不再出现索引问题 17-14
流程 17-15
部署 IM 列存储 17-16
部署 IM 列存储:对象设置 17-17

Oracle University and Error : You are not a Valid Partner use only
部署 IM 列存储:列设置 17-18
IM 列存储的候选对象 17-19
IM 列存储的候选列 17-21
定义 IM 列存储优先级 17-22
填充到 IM 列存储中的段 17-23
定义 IM 列存储压缩 17-24
IM 列存储压缩指导 17-26
计算压缩率 17-28
默认内存中设置 17-29
更改内存中属性的影响 17-30
移动或拆分内存中段 17-31
INMEMORY 继承 17-32
对象设置之后 17-33
检索内存中对象的 CREATE DDL 语句 17-34
测验 17-35
查询获益 17-37
测试和比较查询性能 17-38
对内存中表的查询:简单谓词 17-39
MINMAX 修剪统计信息 17-40
IM 列存储统计信息 17-41
执行计划:TABLE ACCESS IN MEMORY FULL 17-42
对内存中表的查询:联接 17-43
执行计划:JOIN FILTER CREATE / USE 17-45
对内存中表和非内存中表进行查询 17-46
对内存中列和非内存中列进行查询 17-48
DML 和内存中列存储 17-49
建议 17-50
视图 17-51
与其他产品的交互 17-52
优化程序 17-53

XV
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

IM 列存储和 RAC 17-55


IM 列存储和数据泵 17-57
数据泵 TRANSFORM 名称 17-58
小结 17-59
练习 17:概览 17-60

Oracle University and Error : You are not a Valid Partner use only
18 内存中高速缓存
Oracle Database 12c 新增功能和增强功能 18-2
课程目标 18-3
整个数据库内存中高速缓存 18-4
设置强制整个数据库高速缓存 18-6
监视整个数据库内存中高速缓存 18-8
自动大表高速缓存之前的内存中并行查询 18-9
自动大表高速缓存 18-11
配置自动大表高速缓存 18-12
使用自动大表高速缓存 18-14
监视自动大表高速缓存 18-15
小结 18-17
练习 18:概览 18-18

19 SQL 优化增强功能
Oracle Database 12c 新增功能和增强功能 19-2
课程目标 19-3
主题安排 19-4
SQL 计划基线:体系结构 19-5
SQL 计划管理:概览 19-7
自适应 SQL 计划管理 19-8
自动演化 SQL 计划基线 19-9
SQL 管理库增强功能 19-10
测验 19-11
课程主题安排 19-12
自适应执行计划 19-13
动态计划 19-14
动态计划:自适应过程 19-15
动态计划:示例 19-16
重新优化:统计信息反馈 19-17

XVI
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

统计信息反馈:监视查询执行 19-18
统计信息反馈:重新分析语句 19-19
自动重新优化 19-20
测验 19-22
课程主题安排 19-23
SQL 计划指令 19-24

Oracle University and Error : You are not a Valid Partner use only
创建 SQL 计划指令 19-25
使用 SQL 计划指令 19-26
SQL 计划指令:示例 19-27
批量加载的联机统计信息搜集 19-28
Oracle Database 12c 中的并发统计信息增强功能 19-29
全局临时表的统计信息 19-30
直方图增强功能 19-32
最高频率直方图 19-33
混合直方图 19-34
混合直方图:示例 19-35
扩展统计信息增强功能 19-36
捕获列组使用情况 19-37
捕获列组使用情况:运行工作量 19-38
复查列组使用情况 19-39
创建在工作量监视期间检测到的列组 19-40
自动动态采样 19-41
测验 19-42
小结 19-43
练习 19-44

20 资源管理器和其他性能增强功能
Oracle Database 12c 新增功能和增强功能 20-2
课程目标 20-3
资源管理器和可插入数据库 20-4
在 PDB 之间协调资源 20-5
CDB 资源计划基础:份额 20-6
CDB 资源计划基础:限制 20-8
CDB 资源计划:完整示例 20-10
创建 CDB 资源计划 20-11
设置默认指令 20-12

XVII
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

查看 CDB 资源计划指令 20-13


维护 CDB 资源计划 20-14
管理 PDB 中的资源 20-15
管理 PDB 资源计划 20-16
结合使用 20-17
注意事项 20-18

Oracle University and Error : You are not a Valid Partner use only
失控查询和资源管理器 20-19
控制 IM 列存储重新填充资源消耗 20-21
默认 UNIX/Linux 体系结构 20-22
多进程多线程 UNIX/Linux 体系结构 20-23
多进程多线程体系结构:优点和设置 20-24
多进程多线程体系结构:注意事项 20-25
多进程多线程体系结构:监视 20-26
数据库智能闪存高速缓存增强功能 20-27
启用和禁用闪存设备 20-28
内存中 PQ 算法:优点 20-29
智能闪存高速缓存:新统计信息 20-30
临时还原:概览 20-31
临时还原:优点和设置 20-32
临时还原监视 20-33
限制程序全局区的大小 20-34
小结 20-35
练习 20:概览 20-36

21 表、索引和联机操作增强功能
Oracle Database 12c 新增功能和增强功能 21-2
课程目标 21-3
为什么同一组列有多个索引 21-4
对同一组列创建多个索引 21-5
测验 21-7
SQL*Plus 中的不可见列和隐藏列 21-8
SET COLINVISIBLE 和 DESCRIBE 命令 21-9
测验 21-10
联机重新定义:包含 VPD 的表 21-11
联机重新定义:dml_lock_timeout 21-12
高级行压缩:新功能名称和语法 21-13

XVIII
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

LOB 压缩:新名称 21-14


使用压缩指导 21-15
增强的联机 DDL 功能 21-16
DROP INDEX / CONSTRAINT 21-17
索引 UNUSABLE 21-18
SET UNUSED 列 21-19

Oracle University and Error : You are not a Valid Partner use only
小结 21-20
练习 21:概览 21-21

22 课程单元其他
Oracle Database 12c 新增功能和增强功能 22-3
课程目标 22-4
完全可移动导出/导入:概览 22-5
完全可移动导出/导入:用法 22-6
完全可移动导出/导入:示例 22-8
通过网络移动数据库:示例 22-9
禁用 Oracle 数据泵导入的日志记录 22-10
将视图导出成表 22-11
指定加密口令 22-13
在导入期间压缩表 22-14
在导入期间创建 SecureFile LOB 22-15
测验 22-16
SQL*Loader 对标识列的直接路径加载的支持 22-17
SQL*Loader 和外部表的增强功能 22-18
SQL*Loader 快速模式 22-19
小结 22-21
练习 22:概览 22-22

23 分区增强功能
Oracle Database 12c 新增功能和增强功能 23-2
课程目标 23-3
引用分区增强功能 23-4
间隔引用分区 23-5
TRUNCATE TABLE CASCADE 23-6
多分区维护操作 23-7
添加多个分区 23-8

XIX
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

创建范围分区表 23-9
添加多个分区 23-10
截断多个分区 23-11
删除多个分区 23-12
拆分成多个分区 23-13
拆分成多个分区的规则 23-14

Oracle University and Error : You are not a Valid Partner use only
拆分成多个分区:示例 23-15
合并多个范围分区 23-16
合并列表分区和系统分区 23-17
测验 23-18
分区索引:概述 23-19
分区表的部分索引 23-20
对表创建部分索引 23-21
在分区和子分区级别指定 INDEXING 子句 23-22
创建本地或全局部分索引 23-23
解释计划:LOCAL INDEX ROWID 23-24
解释计划:GLOBAL INDEX ROWID 23-25
受影响的数据字典视图:概览 23-26
异步全局索引维护 23-28
DBMS_PART 程序包 23-29
分区维护操作期间的全局索引维护优化 23-30
测验 23-31
小结 23-32
练习 23:概览 23-33

24 JSON
Oracle Database 12c 新增功能和增强功能 24-2
课程目标 24-3
JSON:概览 24-4
JSON:示例 24-5
Oracle RDBMS 中的 JSON 24-6
将 JSON 数据映射到 SQL 类型 24-7
创建 JSON 数据 24-8
查询 JSON 数据 24-9
使用其他运算符查询 JSON 数据 24-10
使用 JSON_TABLE 和 NESTED PATH 运算符解除 JSON 数据嵌套 24-11

XX
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

为 JSON 数据编制索引 24-12


使用索引查询 24-13
使用 JSON 搜索索引查询 24-14
视图 24-15
小结 24-16
练习 24:概览 24-17

Oracle University and Error : You are not a Valid Partner use only
25 SQL 增强功能和 Migration Assistant for Unicode
课程目标 25-3
放宽了数据类型的长度限制 25-4
针对扩展数据类型配置数据库 25-5
使用 VARCHAR2、NVARCHAR2 和 RAW 数据类型 25-6
Database Migration Assistant for Unicode 25-7
SecureFile 25-8
SQL 行限制子句 25-9
SQL 行限制子句:示例 25-10
测验 25-11
小结 25-13
练习 25:概览 25-14

附录 A:新进程、视图、参数、程序包和权限
实例和数据库 A-2
多租户体系结构:一般体系结构图示 A-3
CDB 和 PDB A-4
热图和 ADO A-6
数据库中归档和期间有效性 A-8
安全性:审计 A-9
安全性:权限分析 A-10
安全性:权限分析和新增权限 A-11
安全性:Oracle 数据编写 A-12
HA:闪回数据归档 A-13
易管理性:数据库操作 A-14
易管理性:ADDM A-16
性能:内存中列存储 A-17
性能:整个数据库内存中高速缓存 A-19
性能:自动大表高速缓存 A-20

XXI
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

性能:SQL 优化 A-21
性能:资源管理器 A-22
性能:多进程多线程 A-23
性能:数据库智能闪存高速缓存 A-24
性能:临时还原 A-25
性能:联机操作 A-26

Oracle University and Error : You are not a Valid Partner use only
其他:分区 A-27
其他:JSON A-28
其他:SQL A-29
附录 C:数据比较 A-30

附录 B:可插入数据库:其他创建方法
使用数据泵将非 CDB 插入 CDB B-2
使用复制方法将非 CDB 插入 CDB B-3
在 CDB 之间克隆 PDB B-4
插入移走的 PDB:使用 SQL Developer B-5

附录 C:方案和数据更改管理
课程目标 C-2
数据库生命周期管理包:新增功能 C-3
Change Management Pack 功能 C-4
Change Management Pack 组件 C-5
字典基线 C-6
字典比较 C-8
字典同步 C-9
比较更改传播与 11g SQL 脚本 C-10
数据库生命周期管理包方案更改计划 C-11
更改请求 C-13
方案同步 C-15
数据库生命周期管理包数据比较 C-17
DBMS_COMPARISON C-18
流程 C-20
准则 C-21
创建数据比较 C-23
比较作业和结果 C-24
结果:仅参考行 C-25

XXII
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

练习 C-31
小结 C-30
测验 C-28

更多信息 D-2
结果:仅候选行 C-26
结果:不相同的行 C-27

建议的 Oracle University ILT 课程 D-3


附录 D:其他课程中的新增功能和增强功能

XXIII
Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

紧急监视、实时 ADDM、

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


比较时段 ADDM 以及 ASH 分析

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle Database 12c 新增功能和增强功能


Enterprise Manager Enterprise Manager Enterprise Manager
和其他工具 Cloud Control Database Express 其他工具

CDB 和 PDB 基础功能 CDB 和 PDB 创建 CDB 和 PDB 管理

Oracle University and Error : You are not a Valid Partner use only
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录

安全性 统一审计 权限分析 数据编写

HA RMAN

易管理性 数据库操作 实时 ADDM 比较时段 ADDM ADR


12.1.0.2 12.1.0.2

内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速 12.1.0.2

缓存
SQL 优化 资源管理器 索引、表

数据泵、SQL*Loader 和外部表 分区
其他
12.1.0.2
JSON SQL

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

自动数据库诊断监视器 (ADDM) 新增了以下功能:紧急监视、实时 ADDM、比较时段


ADDM 以及活动会话历史记录 (ASH) 分析。

Oracle Database 12c:新功能 - 面向管理员 15-2


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

课程目标

学完本课后,应能完成以下工作:

Oracle University and Error : You are not a Valid Partner use only
• 解释紧急监视
• 描述实时 ADDM
• 使用实时 ADDM
• 描述比较时段 ADDM
• 使用比较时段 ADDM
• 生成比较时段 ADDM 报告
• 了解用来查看 ASH 数据的增强功能

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要全面了解实时 ADDM、紧急监视、比较时段 ADDM 以及 ASH 分析功能,请参阅以下


信息来源:
• “Oracle Enterprise Manager Cloud Control 12c: Database Management”自定进
度联机课程
• Oracle Enterprise Manager Cloud Control 12c Demo Series 演示:
- Use Real-Time ADDM
- Compare Period ADDM
- Use Active Session History (ASH) Analytics

Oracle Database 12c:新功能 - 面向管理员 15-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

紧急监视:难题
• 发生故障的系统
• 响应缓慢的数据库

Oracle University and Error : You are not a Valid Partner use only
– 所有用户的查询速度都非常慢。
– 性能屏幕的数据刷新速率很慢。
– 吞吐量明显降低。
• 由于内部资源争用数据库挂起
– 数据库完全无响应;不允许登录。
– 用户的查询挂起。
– 性能屏幕不刷新。

解决方案:关闭数据库实例?

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

DBA 可以根据不同的故障现象判断系统出现了问题:
• 用户抱怨查询无响应。
• EM 性能页的刷新速率越来越慢。
• 吞吐量异常降低。
您希望能够通过 ADDM 执行常规性能分析,但是可能存在一些严重限制:
• 在运行缓慢的系统上,该时段的快照可能不可用。
• 根据性能问题的严重性,捕获 AWR 快照可能并不明智甚至根本无法实现。
• 您无法连接到数据库,因为它已挂起。
关闭数据库实例是唯一的解决方法吗?可能有不像退回服务器实例这么极端的另一种解决
方法。
要执行此分析,您需要能够进行连接并快速进行轻量分析,以确定谁阻塞了数据库、为什
么数据库会挂起。此分析应该不需要 I/O 资源或全局资源,例如入队或闩锁。

Oracle Database 12c:新功能 - 面向管理员 15-4


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

紧急监视:目标

运行紧急监视应该是退回数据库之前的最后手段。

Oracle University and Error : You are not a Valid Partner use only
1. 切换到紧急监视允许您:
– 在诊断模式下连接到实例
– 查看实时收集并刷新数据的紧急性能页
– 查看实时刷新的顶级阻塞和被阻塞会话及死锁的 ASH
数据和挂起分析表
2. 查看挂起分析数据有助于:
– 终止导致挂起或死锁的根源阻断器
– 关闭并启动实例

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在关闭实例之前,您可以启动紧急监视。它允许您快速查看并执行性能分析,即使您无法
使用正常连接登录到实例。
紧急监视允许具有 SYSDBA 身份证明的 DBA 在诊断模式下连接并进行快速的轻量分析,
以确定谁阻塞了数据库以及为什么数据库会挂起。这种连接不需要 I/O 资源,也不需要全
局资源。
在 Enterprise Manager 11g 中,可以通过单击按钮显式启用和禁用“内存访问模式”。
这样做是为了启动/停止收集器进程,收集器进程负责从 SGA 读取性能数据。
在新方法中,没有收集器进程。您无需在模式之间切换。导航到“Emergency Monitoring
(紧急监视)”时,代理直接连接到 SGA 并绕过 SQL 检索层来获取性能统计信息以开
始收集 SGA 数据。返回常规性能监视之后,它将停止收集。
它显示实时刷新的数据,以及实时刷新的主要阻塞和被阻塞会话及死锁的 ASH 数据和挂
起分析表。

Oracle Database 12c:新功能 - 面向管理员 15-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

它使用从 ASH 缓冲区获取的历史数据填充性能页。


ASH 缓冲区通常包含过去 60 分钟等待数据的历史记录,但不能保证一定包含。在以下情
况下,ASH 缓冲区可能没有足够的历史记录:
• 如果活动会话活动过多,则 ASH 缓冲区可能不到一小时便已经填满并刷新到磁盘。
• 如果资源争用情况严重,则负责将数据写入 ASH 缓冲区的进程可能会受阻,从而导
致数据丢失。
在某些情况下,它会将提供给用户的历史记录量从通常的 30 分钟减少到更短时间。

Oracle University and Error : You are not a Valid Partner use only
当紧急监视显示阻塞其他用户的会话时,您可以终止会话。否则,您可以关闭数据库实例
或尝试深入分析。

Oracle Database 12c:新功能 - 面向管理员 15-6


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

实时 ADDM:难题

• 发生故障的系统
• 响应缓慢的数据库

Oracle University and Error : You are not a Valid Partner use only
– 所有用户的查询速度仍非常慢。
– 性能屏幕的数据刷新速率仍很慢。
– 吞吐量仍明显降低。
• 由于其他资源争用数据库挂起
– 数据库仍无响应;可能允许也可能不允许登录。
– 用户查询仍在等待。
– 性能屏幕不能快速刷新。
– 您找不到任何要终止的阻塞会话。
– 紧急监视不提供根本原因。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

您找不到任何阻塞会话,数据库仍运行缓慢。然而,在尝试其他分析之前,您不希望退回
数据库实例。
实时 ADDM 使您能够执行补充分析,即紧急监视未提供的根本原因分析。

Oracle Database 12c:新功能 - 面向管理员 15-7


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

实时 ADDM:目标

1. 在退回实例之前切换到实时 ADDM。
– 开始从所有数据库实例收集性能数据

Oracle University and Error : You are not a Valid Partner use only
– 分析因严重本地或全局资源争用而导致的瘫痪系统的
近期数据
– 对数据库活动异常活跃(尽管不严重)的系统进行整体
分析
– 检测近期活动(过去 10 分钟)的查找结果
– 提供可行的建议
2. 使用提供的建议解决问题。
3. 返回常规性能分析。
注:可以针对 RAC 环境进行调用

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

实时 ADDM 的工作方式与用于分析性能的 ADDM 非常相似。


常规 ADDM 使用 AWR 快照运行并提供查找结果和建议,以告诉您需要做出哪些更改来
提高性能。
实时 ADDM 不访问 AWR 快照,但访问 SGA 数据中的 ASH 近期活动。
您可以使用 SYSDBA 权限以下列任一模式连接,具体取决于实例的状态:
• 诊断模式:如果无法连接
• 正常模式:如果仍可以连接
然后分析开始,从 SGA 收集所有数据库实例的近期性能数据,分析因严重本地或全局资
源争用而导致的瘫痪系统的数据。
它对数据库活动异常活跃(尽管不严重)的系统进行整体分析。分析完成后,您可以查看
查找结果。
实时 ADDM 可以发现下列情况:无法执行审计跟踪,因为磁盘空间不足,因此禁止建立
连接;需要终止某个会话,因为登录触发器尝试锁定已锁定的表,因此禁止建立任何其他
连接。实时 ADDM 可以确定占用了所有资源的长时间运行的查询。

Oracle Database 12c:新功能 - 面向管理员 15-8


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

某个会话阻塞了其他用户时,“Hang Data(挂起数据)”选项卡提供具有“Final
Blockers(最终阻断器)”和“Blocked Sessions(阻塞的会话)”的“Hang Analysis
(挂起分析)”页。您将看到阻断器会话的详细信息,因此能够终止进程 ID。
顶级活动快照提供了过去 10 分钟内实例的顶级活动。由于实时 ADDM 重点分析最近的
时段,因此仅适用于查明当前的性能问题。
始终查看建议以获取有关不同解决方案的帮助。然后返回常规性能监视。
可以按照与单实例相同的方式针对 RAC 环境调用实时 ADDM。

Oracle University and Error : You are not a Valid Partner use only

Oracle Database 12c:新功能 - 面向管理员 15-9


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

流程
是否可以 是
发生故障的系统 紧急分析?
登录?

否 是 否

Oracle University and Error : You are not a Valid Partner use only
紧急监视 实时 ADDM 常规性能监视

查看 启动分析
• ASH 数据 • 挂起分析数据
• 挂起数据 • I/O 度量
• 主机度量

是 明显的 否
终止会话 查看
阻断器会话? • 查找结果
• 建议
• 挂起数据
是 • 顶级活动快照
其他阻断器?

否 遵从建议或关闭

系统 如果需要,通过创建用户
结束 定义的问题报告给 Oracle
正常运行?
否 技术支持部门

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

您可以组合使用紧急监视和实时 ADDM。
当系统变得非常慢或挂起,您必须找到快速解决方案时,请使用紧急监视获得要执行的快
速措施。查找要终止的导致阻塞的会话,或者关闭数据库实例再将其启动。
如果不希望立即关闭数据库实例,请执行更深入的实时 ADDM 分析。它将从 SGA 收集
数据,执行分析来向您提供报告,其中包括导致当前状况的根本原因以及建议和可能的措
施。如果提供了任何建议,请遵从。如果没有提供建议,请关闭数据库实例。
在任一情况下,您都可以创建用户定义的问题并使用支持工作台将您的问题报告给 My
Oracle Support。

Oracle Database 12c:新功能 - 面向管理员 15-10


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用 DBMS_ADDM 程序包

SQL> SELECT dbms_addm.real_time_addm_report()


FROM dual;

Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

您可以使用 DBMS_ADDM 程序包的新函数。REAL_TIME_ADDM_REPORT 将返回一个 clob,


其中包含过去五分钟的实时 ADDM 报告。

Oracle Database 12c:新功能 - 面向管理员 15-11


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

测验

实时 ADDM 和常规 ADDM 之间的差异在于用于分析的源

Oracle University and Error : You are not a Valid Partner use only
不同。下面哪些说法是正确的?
a. 实时 ADDM 使用过去 10 分钟的 AWR 快照。
b. 实时 ADDM 使用 SGA 数据中的 ASH 近期活动。
c. 常规 ADDM 使用尚未清除的 AWR 快照。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

答案:b、c
实时 ADDM 的工作方式与用于分析性能的常规 ADDM 非常相似;实时 ADDM 不访问
AWR 快照,而是从 SGA 数据访问 ASH 近期活动。

Oracle Database 12c:新功能 - 面向管理员 15-12


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

AWR 比较时段报告

生产性能不一致:
• 今天,它非常差。

Oracle University and Error : You are not a Valid Partner use only
• 昨天,它非常出色。

• 发生了哪些变化?(原因未知)
• 性能为什么会下降?

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

DBA 在性能方面遇到的难题是,当性能降低或提升时,查明什么发生了更改以及为何会
发生更改,哪些更改可能影响了两个时段之间的性能。
在下列情况下,这可能是正常的:执行的是不同的工作量;更改了存储设备;在最终用户
执行其平常工作的同时执行 ETL;或者仅仅是每周 ETL 执行比上周多运行了三个小时。
在分析性能变化时,DBA 需要对具有可比性的时段进行比较。

Oracle Database 12c:新功能 - 面向管理员 15-13


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

方法:保留的快照集

• 创建一个“昨天”保留快照集和一个“今天”保留
快照集。

Oracle University and Error : You are not a Valid Partner use only
昨天时段 今天时段

DBA

• 对两个保留快照集运行比较。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

以前的方法可以为两个时段创建保留快照集并运行比较报告。您使用自己选择的快照为
基时段创建一个“昨天”保留快照集,同样使用自己选择的快照为比较时段创建一个“今
天”保留快照集。在创建保留快照集时,您确保快照在保留期过后不会被从 AWR 中清除。
“比较时段”操作对两个时段各自的 AWR 数据集进行比较。报告显示了一个对两个时段
进行比较的 HTML 报告,其中显示了在等待事件、OS 统计信息、服务、SQL 统计信息、
实例活动、I/O 统计信息和段统计信息等方面的差异。
当性能发生了降低或提升并且知道已完成的更改时,DBA 可以执行测试来检测:
• 数据库升级
• 方案更改
• 参数更改、是否使用了新的优化程序增强功能
• 系统或 I/O 统计信息收集、是否使用了新的存储类型(例如,使用了 ASM 而非文件
系统)
• 内存增加或减少带来的影响
• 添加的 CPU 或 RAC 环境中的新节点

Oracle Database 12c:新功能 - 面向管理员 15-14


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

缺少了什么

在下面两种情况下仅报告 AWR 统计信息:


• 比较两个时段

Oracle University and Error : You are not a Valid Partner use only
• 比较数据库重放的捕获和重放或者
两次重放

缺少带有分析的智能报告:
• 发生的更改
• 根本原因与性能下降结果之间的映射

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

AWR 比较时段报告提供了许多有用的信息,但是您仍必须对这些度量执行分析,才能发
现映射到性能下降或提高的根本原因的结果。

Oracle Database 12c:新功能 - 面向管理员 15-15


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

比较时段 ADDM:分析

Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

与 AWR 之前的方法不同,比较时段 ADDM 执行因果分析。


1. 它首先确定可能会导致性能变化的系统更改。例如,它检测数据库版本中的配置更
改或者随 SQL 更改发生的工作量更改。这些原因可能会导致性能变化。
2. 然后,它确定这些特定更改的结果。为此,它分别针对基时段和比较时段运行
ADDM 分析,然后计算两个时段之间的差异。
3. 最后,它通过规则集将结果映射到原因。例如,SGA_TARGET 减少可能会导致 I/O
增加。
比较时段 ADDM 提供比之前方法更多的信息、更改识别和智能因果分析。
此项更改是否是因为工作量发生了更改?是否有新应用程序开始运行?在操作系统级别是
否有任何更改?实例参数已更改?
报告显示在硬件和软件级别资源命令发生的更改。
与之前的 AWR 比较时段报告相比,通过此指导,这些问题和其他问题回答起来更简单。

Oracle Database 12c:新功能 - 面向管理员 15-16


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

工作量一致性

“当前”比较时段 与 “早期”基时段

Oracle University and Error : You are not a Valid Partner use only
• 测试时段 • 基线
• “当前”生产时段
• 数据库重放的捕获时段
• 第一次 RAT 重放
• 第二次 RAT 重放 • 修改之前的第一次 RAT 重放

工作量一致性

• 运行同一应用程序?
• 在考虑 SQL 语句和负载的情况下衡量工作量的相似性。
• 数据库重放的捕获和重放之间是否实现了理想中的完全一致。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要生成比较时段 ADDM 报告,您必须执行以下步骤:


1. 将基时段定义为正常时段。
2. 定义参考时段,您将对照该时段比较问题时段。问题时段可以涵盖诸多情形,例如,
生产数据库中的时段、在测试数据库中执行测试的时段,以及在 RAC 环境中使用新
优化程序增强功能或另一类型的存储或者添加更多内存、更多 CPU 或新节点的时段。
在某些情况下,可以使用数据库重放的捕获和重放功能,在其中基时段是捕获时段,比较
时段是重放时段。
在比较过程中一个新因素发挥着作用,即两个时段之间的工作量一致性。您是否在比较相
似的事物?两个时段中的 SQL 语句是否相似?两个时段中是否运行相同的应用程序?这称
为“SQL 通用性”。
这是在考虑 SQL 语句及其相应负载的情况下衡量工作量相似性的好方法。在实际系统中,
不能 100% 确定 DBA 在将完全相同或极其相似的应用程序时段进行比较。如果报告结果
显示一致性级别达到 80 或 90%,则 DBA 可以依赖比较时段 ADDM 提供的查找结果做出
判断。
使用 Real Application Testing 进行测试时,理想情况下数据库重放的捕获和重放之间或者
两次重放之间一致性级别可以达到 100%,因为工作量由数据库重放打包。

Oracle Database 12c:新功能 - 面向管理员 15-17


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

比较模式

Oracle University and Error : You are not a Valid Partner use only
一个快照的偏移量

系统移动窗口

定制时段

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

1. 首先,选择您要检查的比较时段,即您发现性能下降的比较时段。
2. 将其与性能可接受并反映相似工作量的基时段进行比较。
因此,您可以通过三个选项定义基时段。
- 第一个选项允许您选择一个快照的偏移量。在本示例中,比较时段从 2 开始到
3 结束;因此,基时段从 1 开始到 2 结束。在此相同的选项中,您可以选择一
天的偏移量,以便它使用前一天的相同时间作为比较时段。您甚至可以选择将
特定一天中的性能与前一周中同一时间的性能进行比较。
- 第二个选项允许您选择一个基线,可以是现成的系统移动窗口基线,也可以是
您创建的反映您的正常应用的任何其他基线。
- 第三个选项允许您选择任何其他时段。
3. 在任何情况下,它都会自动将基时段调整为与所选时段尽可能接近的一系列 AWR
快照。
4. 运行报告。它应返回两个时段的差异详细信息。

Oracle Database 12c:新功能 - 面向管理员 15-18


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

报告:配置

100%

Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

报告将显示各种类型的信息,而不是像 AWR 比较时段报告一样仅显示统计信息列表。


它显示能够更简单、更快速进行解读的图形。
屏幕顶部的概览显示两个时段。
报告显示在 SQL 通用性方面,比较的两个时段完全相同。如果报告显示一致性低于
80%,则您不应该依赖此比较做出判断,因为您比较了两个没有可比性的时段。因此,
如果您需要有效、可靠的比较,请检查 SQL 通用性至少为 80% 或 90%。即使一致性低
于 80%,仍值得看一下查找结果。可以通过它了解系统中运行了哪些新的 SQL 以及它
们对性能有何影响。
现在通过此智能报告,您可以发现两个时段间发生的更改。在概览下面的详细信息中,
您可以选择仅查看两个时段间发生的配置更改,而不必查看两个时段间完全相同的所有
配置信息。
如果存在实例参数更改,则它将显示基时段值和比较时段值。
此信息告知您现有更改,但是不解释性能下降(或提高)的原因以及此更改对性能下降
(或提高)是否有影响。此更改有可能完全不影响性能。甚至可能对性能有所帮助。因
此,可能是某个其他更改导致了性能降低。

Oracle Database 12c:新功能 - 面向管理员 15-19


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

报告:查找结果
100%

Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

您需要获得解释性能下降或提高原因的查找结果。
同样,您可以选择仅查看下降或提高的方面,也可以查看所有这些方面,另外还可以设置
需要查看其查找结果的影响的百分比。
在幻灯片所示的示例中,性能下降的一个原因是缓冲区高速缓存大小不足,从 2 GB 调到
1.52 GB,因此不够用。对于分析的每项性能差异,您可以获得每项查找结果的详细说明,
以及具有正面或负面影响的 SQL 语句。
“Resource(资源)”选项卡显示 CPU 消耗、内存和 I/O 使用情况。对于 CPU 消耗,它
可以显示 Oracle 消耗的 CPU 以及所消耗的 Oracle 运行队列。I/O 页面显示两个时段中的
相对 I/O 告知您两个时段都属于非 I/O 密集型。“Memory(内存)”页面可以显示两个时
段中的交换。

Oracle Database 12c:新功能 - 面向管理员 15-20


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用 DBMS_ADDM 程序包

比较同一实例中的两个时段:

Oracle University and Error : You are not a Valid Partner use only
“当前”比较时段 “早期”基时段

Snap_ID 123 到 124 Snap_ID 121 到 122

SQL> SELECT dbms_addm.compare_instances (


base_dbid => 1319927350,
base_instance_id => 1,
base_begin_snap_id => 121,
base_end_snap_id => 122,
comp_dbid => 1319927350,
comp_instance_id => 1,
comp_begin_snap_id => 123,
comp_end_snap_id => 124,
report_type => 'XML')
FROM dual;

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

您可以使用 DBMS_ADDM 程序包的新函数。DBMS_ADDM.COMPARE_INSTANCES 返回包


含比较时段 ADDM 报告的 clob,该报告将同一实例两个不同时段的性能进行比较。
所使用的参数如下所示:
• BASE_DBID:基时段的数据库 ID
• BASE_INSTANCE_ID:基时段的实例 ID
• BASE_BEGIN_SNAP_ID:基时段开头的快照 ID
• BASE_END_SNAP_ID:基时段末尾的快照 ID
• COMP_DBID:比较时段的数据库 ID
• COMP_INSTANCE_ID:比较时段的实例 ID
• COMP_BEGIN_SNAP_ID:比较时段开头的快照 ID
• COMP_END_SNAP_ID:比较时段末尾的快照 ID
• REPORT_TYPE:报告的输出类型 - XML 或 HTML(默认为 HTML)
在幻灯片中,您可以看到两个时段的 ADDM 比较,每个时段在时间上通过起始和结束快
照分隔。

Oracle Database 12c:新功能 - 面向管理员 15-21


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用 DBMS_ADDM 程序包

用于比较时段的函数:

Oracle University and Error : You are not a Valid Partner use only
• COMPARE_INSTANCES
• COMPARE_DATABASES
• COMPARE_CAPTURE_REPLAY_REPORT
• COMPARE_REPLAY_REPLAY_REPORT

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

其他 PL/SQL 函数:
• COMPARE_INSTANCES:针对实例级性能比较生成比较时段 ADDM 报告。
• COMPARE_DATABASES:针对数据库范围内的性能比较生成比较时段 ADDM 报告。
• COMPARE_CAPTURE_REPLAY_REPORT:生成比较时段 ADDM 报告以将工作量捕
获与工作量重放的性能进行比较。
• COMPARE_REPLAY_REPLAY_REPORT:生成比较时段 ADDM 报告以将一个工作量
重放与另一工作量重放的性能进行比较。
上述所有函数都返回 clob。
注:有关可用过程的完整说明,请参阅《Oracle Database 12c PL/SQL References and
Types》文档。

Oracle Database 12c:新功能 - 面向管理员 15-22


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:b
b. 错
a. 对
在输出格式上。
测验

与 AWR 比较时段报告不同,比较时段 ADDM 执行因果分析。


版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 15-23


比较时段 ADDM 报告和 AWR 比较时段报告之间的差异表现

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

ASH:概览
滚动缓冲区

统计信息

Oracle University and Error : You are not a Valid Partner use only
ASH

V$SESSION
最近历史记录

MMON
SGA V$ACTIVE_SESSION_HISTORY

MMNL

AWR 快照

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

AWR 数据存在的问题之一是,根据其本质,对系统中当前正在发生的事物进行分析需要
过去 5 到 10 分钟内发生的活动的详细信息。因为 AWR 每 60 分钟创建一次系统快照,所
以,最后一个快照离现在都差不多有一个小时之久。因此,AWR 没有包含执行当前分析
所需的足够信息。
活动会话历史记录包含最近的会话活动的历史记录。因为对会话活动进行记录成本非常昂
贵,所以 ASH 每秒对 V$SESSION 进行取样并记录会话正在等待的事件。而不会对非活
动会话进行取样。此取样工具非常高效,因为它直接访问内部数据库结构。
ASH 被设计为内存中的滚动缓冲区,需要时会覆盖早期的信息。通过
V$ACTIVE_SESSION_HISTORY 视图可以获得 ASH 统计信息。此视图中每个样本的每个
活动会话均占用一行。
将所有 ASH 数据都刷新到磁盘是无法接受的,因为数据量太大。合适的做法是在将数据
刷新到磁盘时对其进行筛选。MMON 每 60 分钟自动执行此工作,并且每当缓冲区填满
时,可管理性监视程序指示灯 (MMNL) 也自动执行此工作。
ASH 内存来自 SGA 并且在实例的生命周期内一直是固定的。这表示每个 CPU 具有 2 MB
内存。不过,ASH 的大小不能超过共享池大小的 5%。

Oracle Database 12c:新功能 - 面向管理员 15-24


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

顶级活动页面

Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Enterprise Manager 11g 中,顶级活动页面显示了大量 ASH 信息。幻灯片中显示了该


页面的一个示例。该信息的显示方式有许多限制。这包括:
1. 无法切换屏幕顶部显示的面积图上的维。
2. 下方左侧的表固定为显示“Top SQL(顶级 SQL)”,而右侧的表只能用来显示几
个维,例如“Top Sessions(顶级会话)”或“Top Modules(顶级模块)”。
3. 该信息未利用 ASH 数据的完整值,因为某些实际上已通过 ASH 数据捕获的关键维
根本没有显示。
4. 用来为详细区域选择时段的滑块是一个固定宽度(5 分钟实时,30 分钟历史)。
5. 可视化图形局限于按等待类显示的堆叠面积图,因此,您看到的始终是一个个堆叠
在一起的等待类。
6. 数据不能显示为活动报告,也就是说,它不能脱机发送给其他用户进行审阅。
7. 细化功能有限,只能简单地将您带到其他页面。
8. ASH 报告当前为文本格式并且不可交互。

Oracle Database 12c:新功能 - 面向管理员 15-25


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

ASH 分析页面:活动

Oracle University and Error : You are not a Valid Partner use only
1

2 2

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

新的 ASH 分析页面克服了这些限制,允许用户执行以下任务:
1. 在页面的左中部显示的“Filters(筛选器)”中对维进行筛选。
2. 在页面的左下和右下部为左侧和右侧的表选择维。
3. 更改滑块宽度来为详细区域选择时段。
4. 进一步细化负载映射图以显示不同的等待,其中用块大小指示各个等待的重要性。

Oracle Database 12c:新功能 - 面向管理员 15-26


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED







解释紧急监视
使用实时 ADDM
描述实时 ADDM

使用比较时段 ADDM
描述比较时段 ADDM
在本课中,您应该已经学会:

生成比较时段 ADDM 报告
小结

了解用来查看 ASH 数据的增强功能

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 15-27


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED




15-2:清理
15-1:使用紧急监视
练习 15:概览

15-3:使用比较时段 ADDM(可选演示)

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 15-28


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

ADR 和网络增强功能

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle Database 12c 新增功能和增强功能


Enterprise Manager Enterprise Manager Enterprise Manager
和其他工具 Cloud Control Database Express 其他工具

CDB 和 PDB 基础功能 CDB 和 PDB 创建 CDB 和 PDB 管理

Oracle University and Error : You are not a Valid Partner use only
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录

安全性 统一审计 权限分析 数据编写

HA RMAN

易管理性 DB 操作 实时 ADDM 比较时段 ADDM ADR


12.1.0.2 12.1.0.2

内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速 12.1.0.2

缓存
SQL 优化 资源管理器 索引、表

数据泵、SQL*Loader 和外部表 分区
其他
12.1.0.2
JSON SQL

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

自动诊断资料档案库 (ADR) 和网络有许多增强功能。

Oracle Database 12c:新功能 - 面向管理员 16-2


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

课程目标

学完本课后,应能完成以下工作:

Oracle University and Error : You are not a Valid Partner use only
• 描述新的 ADR DDL 和调试日志文件
• 使用 ADRCI 实用程序命令列出并查看日志文件
• 描述网络数据压缩的优点
• 说明 DEFAULT_SDU_SIZE 的更改

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要全面了解自动诊断资料档案库的增强功能和使用方法,请参阅 Oracle 文档中的以下


指南:
• 《Oracle Database Administration Guide 12c Release 1 (12.1)》中的“Managing
Diagnostic Data”一章
• 《Oracle Enterprise Manager Licensing Information 12c Release 1 (12.1)》中
“Enterprise Database Management”一章中的“Legacy: Lifecycle Management
Pack for Oracle Database”一节
• 《Oracle Database Utilities 12c Release 1 (12.1)》中的“ADRCI: ADR Command
Interpreter”一章
• 《Oracle Database Net Services Administrator’s Guide 12c Release 1 (12.1)》中
的“Optimizing Performance”一章
• 《Oracle Database Net Services Reference 12c Release 1 (12.1)》中的
“Parameters for the sqlnet.ora File”一章

Oracle Database 12c:新功能 - 面向管理员 16-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

自动诊断资料档案库
DIAGNOSTIC_DEST

$ORACLE_BASE

Oracle University and Error : You are not a Valid Partner use only
$ORACLE_HOME/log
ADR
基目录

diag V$DIAG_INFO

crs rdbms asm

数据库 ASM
主机名称
名称 名称

ADR crs SID SID


主目录

alert cdump incident hm trace (其他) log

incdir_1 … incdir_n ddl debug


ADRCI
log.xml alert_SID.log

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

自动诊断资料档案库 (ADR) 是一个基于文件的资料档案库,用于存放数据库诊断数据(如


跟踪、意外事件转储和程序包、预警日志、健康状况监视报告、核心转储等)。它对多个
实例和多种产品使用一个统一的目录结构,并存储在任何数据库之外。因此,即使在数据
库关闭时也可用来诊断问题。从 Oracle Database 11g 发行版 1 开始,数据库服务器、自
动存储管理 (ASM) 和其他 Oracle 产品或组件将所有诊断数据都存储在 ADR 中。每种产
品的每个实例都将诊断数据存储在自己的 ADR 主目录下。例如,在具有共享存储和 ASM
的 Real Application Clusters 环境中,每个数据库实例和每个 ASM 实例在 ADR 中都有一
个主目录。ADR 的统一目录结构对所有产品和实例都使用一致的诊断数据格式。统一的工
具集使客户和 Oracle 技术支持部门能够跨多个实例关联并分析诊断数据。
将生成两个预警日志文件。可以使用 Enterprise Manager 和 ADR 命令解释器 (ADRCI) 实
用程序查看文本格式的预警日志(已删除了 XML 标记)。
本幻灯片中的图显示了 ADR 主目录的目录结构。
新的 log 目录包含两个子目录:ddl 和 debug。

Oracle Database 12c:新功能 - 面向管理员 16-4


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

ADR 文件类型

• 日志:活动的概要信息
• 跟踪:

Oracle University and Error : You are not a Valid Partner use only
– 后台跟踪文件
– SQL 跟踪文件
• 转储:
– 特定类型的跟踪文件
– 意外事件的详细时间点信息
• 核心:
– 内存转储
– 特定于端口的全二进制格式

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

日志文件是包含概要信息的共享文件。RDBMS 预警日志是此类日志的一个很好的示例。
跟踪、转储和核心文件包含用来调查问题的诊断数据,它们都涉及向文件中写入消息。
• 跟踪文件包含相当详细的信息(例如,状态转换或正在处理的结构),它覆盖了较长
的时段。每个服务器和后台进程都可以向关联的跟踪文件写入信息。跟踪文件在进程
的生命周期内定期更新,并且可能包含关于进程环境、状态、活动和错误的信息。此
外,当进程检测到严重错误时,它会将有关错误的信息写入到其跟踪文件中。SQL
跟踪工具也会创建跟踪文件,这些文件提供关于各个 SQL 语句的性能信息。
• 转储文件包含关于某个状态或某个结构的非常详细的时间点信息。转储是一种特定
类型的跟踪文件,是为了响应事件(如意外事件)而一次性输出的诊断数据,而跟踪
通常是连续输出的诊断数据。当发生意外事件时,数据库会将一个或多个转储写入到
为该意外事件创建的意外事件目录中。意外事件转储还会在文件名中包含意外事件
编号。
• 核心文件包含内存转储,采用特定于端口的全二进制格式。核心文件名称中包括字符
串“core”和操作系统进程 ID。核心文件仅对 Oracle 技术支持部门的工程师有用。
并非在所有平台上都能找到核心文件。

Oracle Database 12c:新功能 - 面向管理员 16-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

ADR 文件:位置

诊断数据 ADR 位置

Oracle University and Error : You are not a Valid Partner use only
前台进程跟踪 <ADR_HOME>/trace

后台进程跟踪 <ADR_HOME>/trace

预警日志数据 <ADR_HOME>/alert&trace

核心转储 <ADR_HOME>/cdump

意外事件转储 <ADR_HOME>/incident/incdir_n

CRS 日志 <ADR_HOME>/<hostname>/crs

DDL 日志 <ADR_HOME>/log/ddl

调试日志 <ADR_HOME>/log/debug

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

• CRS 日志:集群就绪服务守护程序 (CRSD) 日志文件位于


<ADR_HOME>/<host_name>/crs 中。
• DDL 日志:一个 log.xml 文件,其中仅包含从预警日志文件移过来的 DDL 语句和
详细信息。在 <ADR_HOME>/log/ddl 目录中创建。
• 调试日志:该文件中包含用于描述异常事件的条目。在 <ADR_HOME>/log/debug
目录中创建。

Oracle Database 12c:新功能 - 面向管理员 16-6


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

ADR 文件:DDL 和调试日志文件

新的特定的 ADR 日志文件:


• DDL 日志

Oracle University and Error : You are not a Valid Partner use only
SQL> ALTER SYSTEM SET enable_ddl_logging=TRUE;

DDL 日志文件

CREATE TABLE dept

CREATE INDEX i_edpt

DROP USER u2
• 无 DDL 日志文件
• 不在预警日志中
记录 DDL

SQL> ALTER SYSTEM SET enable_ddl_logging=FALSE;

• 调试日志

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

DDL 日志
Oracle Database 11g 针对 DDL 日志记录增加了一定的支持,支持将 RDBMS DDL 语句
记录到预警日志中。将实例参数 ENABLE_DDL_LOGGING 设置为 TRUE 可激活 DDL 日志
记录。Oracle Database 12c 默认情况下会通过将 ENABLE_DDL_LOGGING 设置为
FALSE 来关闭 DDL 日志记录。如果已打开,则 RDBMS DDL 日志记录将写入到一个新
类型的 ADR 文件中,该文件具有与预警日志相同的格式和基本行为,但是它仅包含 DDL
语句和日期。当设置为 TRUE 时,init.ora 参数 ENABLE_DDL_LOGGING 将作为
Oracle DB 生命周期管理包的一部分进行许可。
调试日志
Oracle DB 组件可以检测到不妨碍执行检测的组件正确运行的异常状况、状态或事件。
组件可以针对这些状况、状态或事件发出警告。这些警告不够严重,不一定能达到意外事
件级别,也不能保证会写入到预警日志中。但是,它们保证会记录到日志文件中,因为对
将来出现的问题进行诊断时可能需要它们。开发者可能会发现创建这类事件的记录非常有
用,但当前缺少相应的机制。调试日志是用于记录这些警告的文件。调试日志具有与预警
日志相同的格式和基本行为,但是它仅包含有关可能需要纠正的潜在问题的信息,因而信
息量比预警日志和跟踪文件少。

Oracle Database 12c:新功能 - 面向管理员 16-7


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

数据库管理员不应直接使用调试日志。

Oracle Database 12c:新功能 - 面向管理员 16-8


调试日志包括在 IPS 意外事件程序包中。调试日志的内容供 Oracle 技术支持部门使用。

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

新的 ADRCI 命令

显示 DDL 日志文件内容:
adrci> SHOW LOG;

Oracle University and Error : You are not a Valid Partner use only
• <ADR_HOME>/log/ddl/log.xml 文件内容可使用
编辑器显示:
– UNIX 中的 vi
– Windows 中的记事本
2012-08-23 15:01:00.200000 +00:00
create table t(a varchar(40), b number, c varchar(240), d varchar(240))
2012-08-23 15:03:49.121000 +00:00
create table scott.tabjfv(c number) tablespace users
2012-08-23 15:11:58.017000 +00:00
drop user test cascade
~

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要查看采用 XML 格式的 DDL 日志文件的内容,可以使用 ADRCI SHOW LOG 命令。


此命令使用 vi 编辑器(在 UNIX 上)或记事本(在 Windows 上)自动打开 ddl 日志文
件。可使用 :q 命令离开 vi 编辑器。

Oracle Database 12c:新功能 - 面向管理员 16-9


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

网络性能:压缩

• 减少数据量

Oracle University and Error : You are not a Valid Partner use only
• 降低使用的带宽
• 对应用程序是透明的
• 压缩方案

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

网络性能通常受限于两个因素:带宽和数据量。简而言之,带宽是管道的大小。管道越
大,可以通过它推送的数据位越多。数据量是需要传输的位数。因此,要提高网络性能,
必须增大带宽或减少数据量。在许多情况下,增大带宽成本效益太低或者不可行。在这种
情况下,唯一的选择是减少数据量。
在网络层中压缩数据可减少传输的位数。这降低了所使用的带宽,因而可以传输更多的数
据。在网络层中执行压缩时,压缩对应用程序是透明的。
有多种可行的压缩方案。在高级压缩选件 (ACO) 中,可以使用 GZIP 和 LZO 压缩方案在
网络层中压缩数据,因为它们能够单独处理数据单元(SDU 大小)。
压缩会更改数据量的计算。因此,在网络带宽是瓶颈的情况下,压缩将有所帮助。如果运
行已受到 CPU 制约,则网络压缩将只会使问题变得更糟。

Oracle Database 12c:新功能 - 面向管理员 16-10


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

设置压缩

在 sqlnet.ora 文件中设置以下压缩操作参数:

Oracle University and Error : You are not a Valid Partner use only
• SQLNET.COMPRESSION
• SQLNET.COMPRESSION_LEVELS
• SQLNET.COMPRESSION_THRESHOLD

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

通过 sqlnet.ora 文件中的三个新参数,DBA 可以为压缩操作设置参数。网络压缩是作为


高级压缩选件的一部分提供的(而网络加密不再是一个成本选件)。
SQLNET.COMPRESSION:可以设置为 ON 或 OFF 以启用或禁用压缩。默认值为 OFF。
SQLNET.COMPRESSION_LEVELS:在协商时将使用压缩级别来验证在两端使用了什么
级别并选择同一个级别。对于数据库驻留连接池 (DRCP),仅支持压缩级别 LOW。可以将
压缩级别设置为 HIGH 以使用高 CPU 使用率和高压缩率,或者将其设置为 LOW 以使用低
CPU 使用率和低压缩率。默认值为 LOW。
SQLNET.COMPRESSION_THRESHOLD:此参数指定执行压缩所需的最小数据大小。如果
要发送数据的大小小于此值,则压缩将无法执行。默认值为 1024(字节)。

Oracle Database 12c:新功能 - 面向管理员 16-11


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

会话数据单元 (SDU) 大小

在以下情况下,请修改 SDU 大小:


• 来自服务器的数据被分段时

Oracle University and Error : You are not a Valid Partner use only
• 处于延迟较长的广域网 (WAN) 中时
• 数据包大小始终相同时
• 返回大量数据时
在以下情况下,不要修改 SDU 大小:
• 可以优化应用程序以降低网络使用时
• 对于高速网络,数据传输的影响可以忽略时
• 您的请求从服务器返回少量数据时

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

会话数据单元 (SDU) 大小是通过网络发送的数据包的大小。将 SDU 大小设置为较大的值


可以提高网络性能。该值的范围为 512 字节到 2 MB 字节。客户机和专用服务器的默认
SDU 为 8192 字节。共享服务器的默认 SDU 为 65535 字节。使用的实际 SDU 大小是连
接时在客户机与服务器之间协商确定的,为两个值中的较小者。
在通过 trcasst –s 实用程序收集跟踪文件统计信息后,当主流消息大小不等于 8192
时,请考虑更改 SDU 大小。较大的消息会强制网络层将消息拆分为多个数据包,这称为
分段。SDU 大小应当比主流消息大小大 70 字节。如果主流消息大小加上 70 字节超过了
最大 SDU,则应当对 SDU 进行设置,以便确保将消息拆分为最少数目的等大部分,其中
每个部分比 SDU 大小少 70 字节。要更改 SDU 大小,请在 sqlnet.ora 文件中更改
DEFAULT_SDU_SIZE 参数。
例如,如果应用程序发送和接收的消息绝大部分小于 8 KB,考虑 70 字节的开销,将
SDU 设置为 8 KB 可能会产生良好的结果。如果有足够的内存可用,则为 SDU 使用较大
的值可降低系统调用次数以及 Oracle Net Services 的开销。
在更改 SDU 大小之前,请优化应用程序以使用较少的网络带宽。如果您使用的是高速网
络并且网络传输延迟非常小,或者仅通过网络传输少量的数据,则不要更改 SDU 大小。

Oracle Database 12c:新功能 - 面向管理员 16-12


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

设置 SDU 大小

sqlnet.ora 文件中的 DEFAULT_SDU_SIZE:

Oracle University and Error : You are not a Valid Partner use only
• 默认大小为 8 KB
• 在 Oracle Database 12c 中最大大小为 2 MB,而在
以前的 Oracle 版本中为 64 KB
• 示例:DEFAULT_SDU_SIZE=4096

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

sqlnet.ora 文件中的 DEFAULT_SDU_SIZE 参数指定服务器或客户机的总体 SDU 大小。


对于某个会话,当客户机和数据库服务器的配置值不匹配时,将使用两个值中的较小者,
因此该设置在客户机和服务器上应当是相同的。您可以通过在客户机的连接描述符中指定
SDU 参数来覆盖 SDU 的默认设置。
最佳 SDU 大小取决于网络特性、数据生成速率以及消息大小。当发送方数据生成速率远低
于网络传输速率时,较大的 SDU 可能会有所帮助。
参数 DEFAULT_SDU_SIZE 用来设置该值。在 Oracle Database 11g 中,默认值为 8 KB。
注:在接近容量限制的网络上,较大的数据包会产生更多的冲突,因此会降低性能。

Oracle Database 12c:新功能 - 面向管理员 16-13


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

测验

DDL 命令可以记录在预警日志和一个新的 DDL log.xml

Oracle University and Error : You are not a Valid Partner use only
文件中。
a. 对
b. 错

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

答案:b
DDL 命令可能会被记录,也可能不会被记录。如果 ENABLE_DDL_LOGGING 设置为
TRUE,则 DDL 命令将记录在 ADR 资料档案库中 log/ddl 目录中的 log.xml 文件中。
如果 ENABLE_DDL_LOGGING 设置为 FALSE,则根本不会记录 DDL 命令。

Oracle Database 12c:新功能 - 面向管理员 16-14


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED




描述网络数据压缩的优点
在本课中,您应该已经学会:
小结

说明 DEFAULT_SDU_SIZE 的更改
描述新的 ADR DDL 和调试日志文件

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 16-15


使用 ADRCI 实用程序命令列出并查看日志文件

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

16-1:显示 ADR DDL 日志文件和内容


练习 16:概览

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 16-16


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

性能
课程单元

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

内存中列存储

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

更新

Oracle Database 12c 新增功能和增强功能


Enterprise Manager Enterprise Manager Enterprise Manager
和其他工具 Cloud Control Database Express 其他工具

CDB 和 PDB 基础功能 CDB 和 PDB 创建 CDB 和 PDB 管理

Oracle University and Error : You are not a Valid Partner use only
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录

安全性 统一审计 权限分析 数据编写

HA RMAN

易管理性 DB 操作 实时 ADDM 比较时段 ADDM ADR


12.1.0.2 12.1.0.2

内存中列存储 整个数据库内存中高速缓存
性能
自动大表高速 12.1.0.2

缓存
SQL 优化 资源管理器 索引、表

数据泵、SQL*Loader 和外部表 分区
其他
12.1.0.2
JSON SQL

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

内存列存储功能提供了使数据库驱动的业务决策制定可以实时完成的解决方案。通过内存
列存储功能,可使用一种称为列格式的新格式在内存中存储对象。这种格式使得执行扫
描、联接和聚集时比传统磁盘上的格式快很多,从而为 OLTP 和 DW 环境提供快速的报
告性能。这对于针对少量列运行但返回许多行的分析应用程序特别有用,而对于针对少量
行运行但返回许多列的 OLTP 不太有用。DBA 必须定义哪些段填充到内存中列存储,例
如热表、分区,更准确地说,还有频繁访问的列。
Oracle Database 12c R1 PS1 中提供了一些其他新的内存中功能。
内存中列存储包含在 Oracle DB 内存中选件中。

Oracle Database 12c:新功能 - 面向管理员 17-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED






学完本课后,应能完成以下工作:

描述与其他产品和功能的交互
在数据库中部署内存中列存储
课程目标

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


说明内存中列存储的目标、好处和体系结构

Oracle Database 12c:新功能 - 面向管理员 17-4


说明查询和 DML 执行如何受益于内存中列存储
使用新增视图和统计信息显示内存中列存储的使用情况

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

内存中列存储的目标
• 即时查询响应:
– 对非常大的表中任何列进行查询均较快(100 倍)

Oracle University and Error : You are not a Valid Partner use only
– 使用扫描、联接和聚集
– 不使用索引
– 最适合分析:列少/行多
• DML 更快:删除大多数分析索引(3 到 4 倍)

• 对应用程序完全透明

• 易于设置: IM 列存储
缓冲区
高速缓存
– 内存中列存储配置

– 段属性

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

使用内存中列存储,能以称为“列格式”的新格式将对象(表、分区及其他类型)存储在
内存中。这种格式使得扫描、联接和聚集执行起来比传统磁盘上的格式快很多,从而为
OLTP 和 DW 环境提供快速的报告和 DML 性能。这对于针对少量列运行但返回许多行的
分析应用程序特别有用,而对于针对少量行运行但返回许多列的 OLTP 不太有用。DBA
必须定义将哪些段填充到内存中列存储(IM 列存储),例如热表、分区以及更精确、更
频繁访问的列。
内存中的列格式不会替换磁盘上或缓冲区的高速缓存格式。它是表或表中某些列的一致副
本,转换为独立于磁盘格式且仅存在于内存中的新的列格式。由于这种独立性,应用程序
能够透明地使用该选项而不进行任何更改。要使数据转换为新的列格式,需要在 SGA 中
配置一个新池。该池即为 IM 列存储。
如果为 IM 列存储分配足够的空间,访问要填充到 IM 列存储中的候选对象的查询的执行
速度将明显加快。由于性能的提升,将直接对实时事务处理数据执行即席分析查询,而不
会影响现有工作量。

Oracle Database 12c:新功能 - 面向管理员 17-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

有三个主要优点:
• 查询运行速度明显加快:所有数据都能以压缩的列格式填充到内存中。不需要也不
使用任何索引。由于采用压缩的列格式,与从缓冲区高速缓存提取数据相比,查询
运行速度至少快 100 倍。
• DML 较快:可以消除分析索引,将其替换为表的 IM 列存储表示形式的扫描。
• 随机即席查询运行性能良好,因为表的行为就像所有列都已编制索引一样。

Oracle University and Error : You are not a Valid Partner use only

Oracle Database 12c:新功能 - 面向管理员 17-6


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

优点
• 内存中列存储中的活动数据
• 在 DRAM 中高速缓存
• 填充到 IM 列存储中 热

Oracle University and Error : You are not a Valid Partner use only
• IM 列存储的专门压缩算法: • PCI 闪存
非常热 2 至 10 倍: 活动
FOR QUERY LOW / HIGH
FOR CAPACITY / HIGH • 低成本磁盘存储

• 在 RAC 上全面支持
• 在多租户体系结构上全面支持
• 不再需要 SQL 优化
• 对 SQL 无限制
• 执行备份和恢复操作时无需更改
• 无需移植数据

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

除提高查询性能这一主要优点外,内存中列存储功能还带来许多其他优点。
• 可存入内存中的数据量大大增加。数据在填充到 IM 列存储中时将使用专门的压缩算
法自动压缩,根据数据类型和数据分布,实现 2 倍到 10 倍的压缩率。有三种不同类
型的压缩,而查询直接针对压缩的数据执行。
数据可存储在多层环境中,其中最热的数据在内存中,活动数据在闪存上,较旧或
较冷的数据在磁盘上。
• 所有 OLTP 操作在 RAC 上均受支持。
• 多租户体系结构可使用内存中列存储功能。
• 某些查询的响应速度非常快,以致在这些情况下不再需要 SQL 优化。然而,如果只
有某些列在列存储中,而查询要访问非内存中列,则可能需要优化。
• 对 SQL 语句不存在任何限制。
• 备份和恢复过程的运行方式仍与没有 IM 列存储时一样。
• 无需移植数据。

Oracle Database 12c:新功能 - 面向管理员 17-7


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

概览

• SGA 中的新池:内存中列存储
– 填充到 IM 列存储中的段将转换为列格式

Oracle University and Error : You are not a Valid Partner use only
– 内存中段与缓冲区高速缓存的事务处理一致
• 只有一个段在磁盘上并采用行格式

在 SGA 中 缓冲区高速缓存
EMP 表 ORDERS 表

ORDER
DML

行格式的段
ORDERS 表
双格式的表
内存中列存储
SELECT
列格式的段

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

内存中的列格式不会替换磁盘上或缓冲区的高速缓存格式。这意味着当段(例如表或分
区)填充到 IM 列存储中时,磁盘上格式的段将自动转换为列格式并选择性地进行压缩。
列格式是纯内存中格式。磁盘上没有列格式的存储。绝不会导致额外写入磁盘,因此无
需任何日志记录或撤消空间。
所有数据均以传统的行格式存储在磁盘上。
此外,列格式的段是磁盘上或缓冲区高速缓存中段的事务处理一致副本。将保持两个池
之间的事务处理一致性。
如果为 SGA 中的 IM 列存储分配足够的空间,访问填充到 IM 列存储中的对象的查询的
执行速度将明显加快。由于性能的提升,可以直接对实时事务处理数据执行更多即席分
析查询,而不会影响现有工作量。缺少 IM 列存储空间不会阻止针对本来应该填充到 IM
列存储中的表执行语句。

Oracle Database 12c:新功能 - 面向管理员 17-8


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

DBA 必须根据针对段执行的查询和 DML 类型确定应将哪些段定义为非内存中段,将哪些


段定义为内存中段。DBA 也可以更准确地定义哪些列是 IM 列存储的合适候选项:
• 只采用行格式:被 OLTP 样式的查询频繁访问、对少数行进行操作且返回多列的段
是缓冲区高速缓存的合适候选项。这些段不应定义为内存中段,将只发送到缓冲区
高速缓存。
• 同时采用双格式:被分析样式的查询频繁访问、对多行进行操作且返回少数列的段
是 IM 列存储的合适候选项。如果将某个段定义为内存中段,但是将其中某些列定义

Oracle University and Error : You are not a Valid Partner use only
为非内存中列,则会将选择任何非内存中列的查询发送到缓冲区高速缓存,而将仅
选择内存中列的查询发送到 IM 列存储。所有对段的按行 ID 提取都通过缓冲区高速
缓存执行。
对这些对象执行的任何 DML 都通过缓冲区高速缓存执行。

Oracle Database 12c:新功能 - 面向管理员 17-9


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

行存储与列存储:2 维视角

SALES 表
order1 order2 order3 order4

Oracle University and Error : You are not a Valid Partner use only
col1: PRODID 123 357 50 243

col2: CUSTID ABC CDE GHI PQR

PRODID CUSTID TIMEID CHANID QTT AMOUNT 04/02 12/05 06/17 05/24
col3: TIMEID
row1 123 ABC 04/02 C1 12 3500
col4: CHANID C1 C4 C1 C2
row2 357 CDE 12/05 C4 1 2000
col5: QTT 12 1 5 9
row3 50 GHI 06/17 C1 5 4765
243 PQR 05/24 C2 9 1350 col6: AMOUNT 3500 2000 4765 1350
row4

行存储格式 列存储格式

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在数据文件中存储表的传统 RDBMS 样式遵循以上幻灯片左侧的示例。SALES 表包含一


些行,每行表示一个订单,该订单通过以下列进行描述:产品 ID、客户 ID、日期、渠道
ID、该产品的销售数量和相应的金额。
这种表示形式非常适合处理单个订单。但是,如果列上不存在索引,针对所有订单仅搜索
一个属性其实不太方便。例如,您要根据包含数百万个订单的表计算六月份通过渠道 C1
完成的所有订单的收益。查询必须读取每一行,并查找正确的日期和渠道。请注意,查询
每读取一行,都会读取其所有列,尽管只请求了两列。
有没有比这种行表示形式更好的方法呢?
设想一下:同一列的所有值存储在一起,前面行存储表示形式的每一列都这样做。最终表
示形式类似于以上幻灯片的右侧。
如果采用这种列式表示形式,相同的查询只需扫描两列。这意味着 IO 比行存储的情况少
得多。仅读取所需列而忽略其余列称为“列式映射”。

Oracle Database 12c:新功能 - 面向管理员 17-10


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

内存中列单元
列格式
SALES 表 123:1,357:2,50:3,243:4\ABC:1,CDE:2,GHI:3,PQR:4\

Oracle University and Error : You are not a Valid Partner use only
04/02:1,12/05:2,06/17:3,05/24:4\C1:1;3,C4:2,C2:4\
12:1,1:2,5:3,9:4\3500:1,2000:2,4765:3,1350:4\

内存中列单元

C1 C2 C3 C4 C5 C6 C1 C2 C3 C4 C5 C6

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

内存中列单元
从概念上讲,将表填充到 IM 列存储中时,会将段行分成大块(内存中列单元,即 IMCU),
在这些块中,每一列都单独存储在内存中的连续区域。这些块非常大,足可实现可能的最
大扫描速度。
内存数据结构以 IMCU 为基础。
与通常 8k 字节大小的常规数据库块不同,IMCU 要大几个数量级。每个 IMCU 的准确行数
会在运行时根据表大小和结构以及内存约束条件确定。
内存中压缩算法
在 IM 列存储中转换为列格式的数据使用新的专门压缩算法。有三种压缩级别。

Oracle Database 12c:新功能 - 面向管理员 17-11


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

内存中列存储高速缓存与缓冲区高速缓存

IM 列存储 缓冲区高速缓存
表空间

Oracle University and Error : You are not a Valid Partner use only
数据文件

区 IMCU

8KB 块
段 IM 段

SGA

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

内存中列存储
IM 列存储可以存储非分区表、表分区或表子分区转换的数据,位于一个实例中的单个内
存中区域内。
内存中数据段
内存中的段与磁盘上的段存在一对一的对应关系。永久堆表的每种现有磁盘上数据格式和
所有对象类型(分区、实体化视图、实体化联接视图、实体化视图日志和内嵌 LOB)都
受 IM 列存储支持。
内存中列存储段是已使用 IMCU 的集合。

Oracle Database 12c:新功能 - 面向管理员 17-12


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

内存中的双格式
UPDATE
SELECT

Oracle University and Error : You are not a Valid Partner use only
缓冲区高速缓存 IM 列存储 TX 日志

INMEMORY_SIZE
阈值 /内存不足

DBWn 用户 IMCO SMCO 第一次数据访问或


Wnnn
实例启动
SGA

CREATE TABLE … INMEMORY


行格式 ALTER TABLE … INMEMORY

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 SGA 中为 IM 列存储分配空间后,DBA 要在创建或更改对象时启用 INMEMORY 属性,


以将现有对象转换为内存中候选项。在第一次访问内存中表的数据或者在数据库启动时,
会在 IM 列存储中为表分配 IMCU。通过从磁盘上格式转换为新的内存中列格式来创建表的
内存中副本。每当实例作为仅位于内存中的 IM 列存储副本重新启动时,都会执行这种转
换。当这种转换完成时,表的内存中版本逐渐变得可供查询使用。如果表已部分转换,则
查询能够使用部分内存中版本,然后转至磁盘使用其余部分,而不是等待转换完整个表。
有一个新的后台进程 IMCO,该进程可创建和刷新 IMCU 以填充和重新填充 IM 列存储。
IMCO 是一个后台协调程序进程,用于调度要填充/重新填充到 IM 列存储中的对象。SMCO
和 Wnnn 是实际在内存中填充对象的后台进程。
当表中的行更新时,IMCU 中的相应条目将被标记为“过时”。日志中记录的行版本从缓
冲区高速缓存构造,不受哪部分列在 IMCU 中的影响。IMCU 同步由 IMCO/SMCO/Wnnn
后台进程执行,更新的行基于以下事件填充到事务处理日志中:
• 一个内部阈值,包括每个 IMCU 的行失效次数
• 事务处理日志运行内存不足
• RAC 失效

Oracle Database 12c:新功能 - 面向管理员 17-13


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

不再出现索引问题

• 为哪些列编制索引? 不使用 IM 列存储


不使用 IM 列存储

对于 OLTP:1 到 3 个

Oracle University and Error : You are not a Valid Partner use only
对于分析:10 或 20 个

• 由于缺少索引导致性能较低
• DML 期间维护任务繁重
IM
使用 IM
使用
• 需要存储空间 列存储
列存储

• 不再有内存中表的分析索引
• 预定义的分析查询和即席分析查询均可快速运行
• OLTP 和批处理运行速度最多提高 300%

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

直到 Oracle Database 12c 发行版 12.1.0.1,要在 OLTP 环境中以可接受的响应速度运行


分析查询,唯一的方式是在常访问的列上为这些查询创建特定索引。这些索引在内存中效
果很好,在磁盘上极其高效,因为它们可以最大程度地减少查找请求的数据所需的磁盘
IO。但是,随着数据的更改,所有这些额外的索引都需要维护,这样会增加每次更改所用
的时间。此外,这些索引需要额外的存储空间。
现在,有了 Oracle Database 12c 发行版 12.1.0.2 的内存中列存储功能,当表存入 IM 列
存储中时,除引用完整性所需索引(例如主键索引)以外的所有索引都能替换为表的 IM
列存储表示形式的扫描。可以删除内存中表上 75% 的索引,这样可加快 DML 语句的执
行。之前因缺少相应的索引而无法高效运行的即席查询将以内存中速度运行。
删除分析索引可大大简化优化,并且不再需要持续管理。

Oracle Database 12c:新功能 - 面向管理员 17-14


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

流程
IM 列存储初始化。

1. 查询内存中表:

Oracle University and Error : You are not a Valid Partner use only
SMCO
在 IM 列存储中
IM 列
存储中 Wnnn 将行格式
内存中的 填充表或
是否有 延迟? 转换为 压缩列
候选表? 部分列
足够的 列格式
IMCO
空间?

2. 结果的显示速度比采用行格式时快得多:

解压缩 将返回的
执行查询 显示结果
请求的列 列合并成行

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

对内存中表执行查询时有哪些不同步骤?
第一个先决条件是 DBA 在 SGA 中为 IM 列存储预分配了空间。
1. 如果将正在查询的表定义为要填充到 IM 列存储中的候选项,后台进程会将表行的磁盘
中行格式转换为列格式,并将其填充到 IM 列存储中。默认情况下,将内存中表填充到
IMCU 中的操作可能会延迟到有用时进行。
- 如果 IM 列存储中没有足够的空间来填充整个对象,则对象将部分填充。当查询
开始访问整个对象时,将从列存储中检索尽可能多的数据,从缓冲区高速缓存、
闪存高速缓存或磁盘中检索其余数据。DBA 可以为内存中对象设置优先级,以便
使用不同的延迟将表填充到 IM 列存储中。
- 如果为表或表中的部分列定义了内存压缩,可能会进行压缩。根据为表或列定义
的属性,可能只有部分列需要执行填充和压缩步骤。
2. 当 IM 列存储处于正确格式后,优化程序将发挥作用并生成计划。将对内存中列格式的
数据执行查询。执行完成后,列数据将进行解压缩,合并成行以将结果显示给用户。
这种类型的查询称为内存中查询。

Oracle Database 12c:新功能 - 面向管理员 17-15


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

部署 IM 列存储

1. 验证数据库兼容性值。
COMPATIBLE = 12.1.0.0.0

Oracle University and Error : You are not a Valid Partner use only
2. 配置 IM 列存储大小。
INMEMORY_SIZE = 100G

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

无需特殊安装即可设置该功能。它随附在 Oracle Database 12c 发行版 1 PS1 中。


1. 数据库兼容性必须设置为 12.1.0.0 或更高。
2. 通过设置 INMEMORY_SIZE 实例参数来配置 IM 列存储大小。使用字母 K、M 或 G
定义存储量单位。
该池(例如日志缓冲区、保留、回收和其他块大小的池)是静态池,不受 ASMM 的
影响。分配给该池的内存是固定的,启用 ASMM 后从 SGA_TARGET 的总可用内存
中扣除。没有 LRU 算法来管理内存中对象。如果没有足够的空间容纳整个对象,内
存中对象可能会部分填充到 IM 列存储中。当查询该对象时,将从列存储中检索尽可
能多的数据,从缓冲区高速缓存、闪存高速缓存或磁盘中检索其余数据。DBA 可以
为对象设置优先级,以定义应将哪些内存中对象优先填充到 IM 列存储中。
为 INMEMORY_SIZE 参数设置的值应该至少是所有内存中表的估计大小的总和。可
以使用 DBMS_COMPRESSION 程序包确定表在内存中压缩的可能效果。
3. 如果实例已启动,必须重新启动数据库才能在 SGA 中以新值初始化 IM 列存储。
也可以按 PDB 设置该参数,以限制每个 PDB 使用的最大大小。请注意,每 PDB 值的总
和不一定等于 CDB 值,它甚至可能更大。

Oracle Database 12c:新功能 - 面向管理员 17-16


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

部署 IM 列存储:对象设置

3. 启用/禁用要填充到 IM 列存储中的对象。
– 启用/禁用整个段:

Oracle University and Error : You are not a Valid Partner use only
— IMCU 仅在查询访问时进行初始化和填充。
SQL> CREATE TABLE large_tab (c1 …) INMEMORY; 双格式

SQL> ALTER TABLE t1 INMEMORY ; 双格式

SQL> ALTER TABLE sales NO INMEMORY; 仅行格式

SQL> CREATE TABLE countries_part ... PARTITION BY LIST ..


( PARTITION p1 .. INMEMORY, PARTITION p2 .. NO INMEMORY);

— IMCU 可以在打开数据库时进行初始化。
SQL> CREATE TABLE test (…) INMEMORY PRIORITY CRITICAL;

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

4. 在创建或更改对象时启用 INMEMORY 属性,以将对象转换为 IM 列存储中的列式表


示形式。内存中表的所有列都将填充到内存中,除非使用 NO INMEMORY 子句禁用
某些列。建议一次指定所有列,而不是为每一列设置 ALTER TABLE,因为前者更
高效。
两个 INMEMORY 子属性定义以下行为:
- IM 列存储中对象数据的加载优先级:INMEMORY 子句可以用 PRIORITY 子子
句修饰。默认情况下,内存中表在第一次访问数据时填充到内存中。这种默认
行为是“按需”行为。使用不同的优先级,表数据可以在数据库启动后立即填
充到 IM 列存储中。本课后面将介绍不同的 PRIORITY 值。
- IM 列存储中对象的列的压缩程度。
• 与 INMEMORY 属性兼容的段包括表、分区、子分区、内嵌 LOB、实体化视图、实
体化联接视图和实体化视图日志。本幻灯片中的第四个示例显示了 INMEMORY 分区
设置。
• INMEMORY 子句不支持聚簇表和 IOT。

Oracle Database 12c:新功能 - 面向管理员 17-17


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

部署 IM 列存储:列设置

– 启用/禁用部分列:
SQL> CREATE TABLE myimtab (c1 NUMBER, c2 CHAR(2), c3 DATE)

Oracle University and Error : You are not a Valid Partner use only
INMEMORY NO INMEMORY (c1);

SQL> ALTER TABLE myimtab NO INMEMORY (c2);

IM 列存储 缓冲区高速缓存

SELECT C2 C3 MYIMTAB 表 C1-C2-C3:


Î ABC
123 ABC 10/05
CDE
IMCU
456 CDE 04/02
已填充

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

如果将表定义为 INMEMORY,可以只将部分列填充到 IM 列存储中,方法是对非内存中列


使用 NO INMEMORY,如本幻灯片中的第一个和第二个示例所示。可以在 NO INMEMORY
子句中将非内存中列分组,如以下示例中所示:
SQL> ALTER TABLE tab INMEMORY MEMCOMPRESS FOR CAPACITY LOW (c2, c3)
NO INMEMORY (c1, c4);
如果将表定义为 NO INMEMORY,则无法将部分列填充到 IM 列存储中,如本幻灯片中第
三个示例所示。
未与压缩子句(INMEMORY 或 NO INMEMORY)关联的列和指定了 INMEMORY 子句但未
指定压缩级别 (HIGH | MEDIUM | LOW) 的列将继承父表或分区的压缩子句。列的压缩
级别(如果已指定)将覆盖父表或分区的压缩级别。
使用 ALTER TABLE 语句更改列的压缩子句会导致更新字典,但是不会强制将任何现有
数据重新填充到 IM 列存储中。新的压缩级别仅反映在新重新填充的数据上。
创建或更改对象时,可以定义在对象和列两个级别设置其中一个属性。

Oracle Database 12c:新功能 - 面向管理员 17-18


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

IM 列存储的候选对象

DBA_TABLES 视图显示 IM 列存储的候选表:

Oracle University and Error : You are not a Valid Partner use only
SQL> SELECT table_name tab, inmemory_compression Comp,
inmemory_priority Priority,
inmemory_distribute RAC, inmemory_duplicate DUP
FROM dba_tables;

TABLE COMP PRIORITY RAC DUP


------ ----------------- ---------- ------------ --------------
TEST1 FOR QUERY HIGH NONE AUTO DUPLICATE ALL
TEST2 NO MEMCOMPRESS CRITICAL AUTO DUPLICATE
EMP FOR DML LOW BY PARTITION NO DUPLICATE

• NO MEMCOMPRESS:
未压缩 • AUTO:Oracle 在 RAC 节点 • DUPLICATE ALL
• NONE:按需填充
• FOR QUERY / FOR 的 IM 列存储间分布对象 • DUPLICATE
• 其他值:根据优先级 • BY PARTITION:分区在 • NO DUPLICATE
CAPACITY:
填充 RAC 节点间分布对象
已压缩

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

为指明表、分区或子分区不是 IM 列存储的候选项,DBA_TABLES、
DBA_TAB_PARTITIONS、DBA_TAB_SUBPARTITIONS 中的 INMEMORY_COMPRESSION
和 INMEMORY_PRIORITY 新列已设置为 null。为指明表、分区或子分区当前的 IM 列存储
属性,已将三列添加到 DBA_TABLES、DBA_TAB_PARTITIONS、
DBA_TAB_SUBPARTITIONS 视图中:
• INMEMORY_COMPRESSION:填充到 IM 列存储中的每个对象都将经过压缩。Oracle
提供了多种压缩技术,这些技术提供了不同级别的压缩和性能。默认情况下,使用
FOR QUERY 选项压缩数据。这样可使压缩和性能达到最佳平衡。使用的压缩选项显
示在 DBA_TABLES 视图的 INMEMORY_COMPRESSION 列中。后面将介绍压缩属性。
• INMEMORY_PRIORITY:将内存中表填充到 IM 列存储中时依赖于使用 PRIORITY
子子句设置的优先级。默认值为 PRIORITY NONE。后面将介绍优先级属性。

Oracle Database 12c:新功能 - 面向管理员 17-19


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

• INMEMORY_DISTRIBUTE:在 RAC 环境中,每个数据库节点都有自己的 IM 列存


储。如果对象太大而无法填充到单个节点上的 IM 列存储中,则可以在各个 RAC 节
点间分布对象的某些部分。默认值为“AUTO”,意味着由 Oracle 确定在 RAC 实
例间分布表的最佳方式。可以指定 BY ROWID RANGE,以按 rowid 范围分布,也
可以指定 BY PARTITION 或 BY SUBPARTITION,以将分区或子分区分配给不同
节点。
• INMEMORY_DUPLICATE:要在所有 RAC 实例间复制表,以使整个表、行和列在

Oracle University and Error : You are not a Valid Partner use only
每个实例上可用,请在 DUPLICATE 子句中指定 DUPLICATE ALL 选项。当表实际
在节点间分布时,DUPLICATE 子句有两个选项。
- 如果想要一个副本,请使用 NO DUPLICATE。
- 如果要在集群中拥有两个副本,请使用 DUPLICATE。

Oracle Database 12c:新功能 - 面向管理员 17-20


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

IM 列存储的候选列

V$IM_COLUMN_LEVEL 视图还显示内存中表中并非 IM 列存
储候选项的列:

Oracle University and Error : You are not a Valid Partner use only
SQL> SELECT obj_num, segment_column_id, inmemory_compression
FROM v$im_column_level;

内存中列
覆盖父表的压缩子句

obj_num segment_column_id inmemory_compression


---------- ----------------- --------------------------
98202 1 DEFAULT
98202 2 NO MEMCOMPRESS 内存中表的内存中列
继承父表的压缩子句
98202 3 DEFAULT
98202 4 NO INMEMORY

内存中表中的非内存中列

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

当即使将表定义为内存中段查询也不通过 IM 列存储执行时,可以使用
V$IM_COLUMN_LEVEL 视图查找这些内存中表中是否存在非内存中列。查询该视图将显
示内存中表中存在的非内存中列和内存中列的列表。
请注意,只能为部分列指定压缩或 NO INMEMORY。列不能具有不同的优先级或分布,因
为它们将全部一起填充。

Oracle Database 12c:新功能 - 面向管理员 17-21


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

定义 IM 列存储优先级

使用 PRIORITY 可以定义填充优先级。
SQL> CREATE TABLE t_low (code NUMBER) INMEMORY PRIORITY LOW;

Oracle University and Error : You are not a Valid Partner use only
select from T_LOW IM 列存储 FULL 缓冲区
高速缓存
select from T_MEDIUM T_CRITICAL
IMCO
T_HIGH
SMCO
Wnnn
select from T_HIGH T_LOW
T_MEDIUM

select from T_CRITICAL

SQL> CREATE TABLE countries_part ... PARTITION BY LIST ..


( PARTITION p1 .. INMEMORY PRIORITY HIGH,
PARTITION p2 .. INMEMORY MEMCOMPRESS FOR CAPACITY LOW,
PARTITION p3 .. , .. );

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

默认情况下,内存中表、分区或子分区甚至列的填充取决于为表、分区、子分区或列定义
的 PRIORITY 值。
• NONE 值表示仅在查询数据时“按需”填充。未定义 PRIORITY 时,默认值为
PRIORITY NONE。
• 有四个优先级:LOW、MEDIUM、HIGH 和 CRITICAL。如果指定了这些级别中的
一个,内存中对象将在下个 IMCO 循环(默认为 2 分钟的循环)期间实例启动时按
优先级顺序填充。
1. IMCO 启动已启用内存中功能的对象的后台填充和重新填充,将填充任务排入
队列。
2. 填充任务排入 SMCO 后台进程的执行队列,因此可能必须等待可用的 worker 进
程 (Wnnn)。SMCO 动态衍生从属进程 (Wnnn) 以实施这些任务。
IMCO 后台进程只将优先级并非 NONE 的对象的填充任务排入队列。队列按从 CRITICAL
到 LOW 的优先级顺序清空。
如果填充时 IM 列存储空间不足,所有优先级较高的表均优先于优先级较低的表。将提交
未将数据填充到 IM 列存储中的语句,以便不会打断任何应用程序语义,并使用缓冲区高
速缓存。

Oracle Database 12c:新功能 - 面向管理员 17-22


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

填充到 IM 列存储中的段
• 查看填充到 IM 列存储中的段:
SQL> SELECT owner, segment_name name FROM v$im_segments
WHERE segment_name = 'SALES'; 优先级为 NONE Î

Oracle University and Error : You are not a Valid Partner use only
尚未填充任何行
SQL> SELECT /*+ full(s) noparallel (s)*/ count(*) FROM sales s;

• 检查段是否已完全填充到 IM 列存储中:
• 计算磁盘上的块与 IM 列存储中的块:
SQL> SELECT segment_name, bytes, inmemory_size,
bytes_not_populated
FROM v$im_segments;

SEGMENT_NAME BYTES INMEMORY_SIZE BYTES_NOT_POPULATED


------------ ------------ --------------- -------------------
SALES 228231 36299 0
T1 11475615744 4664262656 5004262678

字节数 IM 列存储中的字节数

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

如果创建的内存中对象的优先级为 NONE,则仅当查询访问它时才会将其填充到 MC 中。
直到查询访问至少一列,才会创建 IMCU 并将其填充到 IM 列存储中。
如果创建的内存中对象的优先级并非 NONE,则将在下一个 IMCO 循环期间实例启动后按
优先级顺序创建 IMCU 并将其填充到 IM 列存储中。在后台填充表对在表上并发运行的任
何 DML 操作都没有影响。在后台填充时,一切都无需等待。
可以比较以列格式存储的字节数(使用 V$IM_SEGMENTS 视图的 INMEMORY_SIZE 列)
与以行格式存储在磁盘上的段的实际字节数(使用 V$IM_SEGMENTS 的 BYTES 列)。
大型段不一定一次填充到 IM 列存储中。SMCO 和 Wnnn 后台进程逐渐填充段。要检查段
是否完全填充到 IM 列存储中,请查看 V$IM_SEGMENTS 视图的
BYTES_NOT_POPULATED 列。如果值不等于 0,表示段未完全填充。
仅当使用 ALTER TABLE 命令对表禁用 IM 列存储时,才会发生表被逐出的情况。由于
ALTER 是 DDL 语句,因此将自动使从属游标失效。IM 列存储没有自动内存管理,因而
可能会导致逐出不常使用的表。

Oracle Database 12c:新功能 - 面向管理员 17-23


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

定义 IM 列存储压缩

• 使用 MEMCOMPRESS 可以定义压缩级别。
SQL> CREATE MATERIALIZED VIEW mv1 INMEMORY NO MEMCOMPRESS;

Oracle University and Error : You are not a Valid Partner use only
SQL> CREATE TABLE large_tab (c1 …) INMEMORY
MEMCOMPRESS FOR QUERY;

• 将磁盘上存储的字节数与列格式压缩的字节数进行比较:

字节数 压缩 INMEMORY_SIZE

• 将 MEMCOMPRESS 更改为较高的压缩级别:
SQL> ALTER TABLE t1 INMEMORY MEMCOMPRESS FOR CAPACITY HIGH;

SEGMENT_NAME BYTES INMEMORY_SIZE


------------ ----------- -------------- 无自动
T1 11475615744 4664262656 重新填充

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

MEMCOMPRESS 属性将内存中压缩与磁盘上压缩区分开来。IM 列存储中有不同的压缩级


别,使用不同的压缩算法:
• NO MEMCOMPRESS 不执行任何压缩。
• MEMCOMPRESS FOR QUERY [LOW|HIGH] 使用的压缩算法适合实现较高的查询性
能,而不是在内存中列存储中使用较少的空间。仅定义 MEMCOMPRESS 时,FOR
QUERY LOW 是默认值。
• MEMCOMPRESS FOR CAPACITY LOW 对应的压缩算法适合在内存中列存储中使用
较少空间。FOR CAPACITY LOW 级别用于在较高的压缩与较高的查询性能之间达
到平衡。如果指定了 FOR CAPACITY 而未指定 LOW 或 HIGH,则默认值为 FOR
CAPACITY LOW。
• MEMCOMPRESS FOR CAPACITY HIGH 对应的压缩算法数据压缩率高于 LOW,因
此在内存中列存储中节省的存储比 LOW 要多。
• MEMCOMPRESS FOR DML

Oracle Database 12c:新功能 - 面向管理员 17-24


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用 V$IM_SEGMENTS 可以了解磁盘上段的实际大小(BYTES 列)与相同段的 IM 列存


储大小(INMEMORY_SIZE 列)相比如何。更新压缩级别后,数据字典中的信息将更新
为新的段压缩级别。仅当移动或手动重新填充段时,才会以新的压缩级别重新填充 IMCU
数据。如果未执行以上任何操作,则新的压缩级别仅反映在新填充的数据中。

Oracle University and Error : You are not a Valid Partner use only

Oracle Database 12c:新功能 - 面向管理员 17-25


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

IM 列存储压缩指导

压缩指导可以分析要使用不同级别为表启用 INMEMORY
MEMCOMPRESS,IM 列存储中需要多少空间。

Oracle University and Error : You are not a Valid Partner use only
BEGIN
DBMS_COMPRESSION.GET_COMPRESSION_RATIO (
'TS_DATA', 'SSB', 'LINEORDER', NULL,
DBMS_COMPRESSION.COMP_INMEMORY_QUERY_LOW,
blkcnt_cmp, blkcnt_uncmp, row_cmp, row_uncmp, cmp_ratio,
comptype_str,10000,1);
DBMS_OUTPUT.PUT_LINE('Block count uncompressed = ' || blkcnt_uncmp);
DBMS_OUTPUT.PUT_LINE('Row count per block uncompressed=' || row_uncmp);
DBMS_OUTPUT.PUT_LINE('Compression type = ' || comptype_str);
DBMS_OUTPUT.PUT_LINE('Comp ratio= '|| cmp_ratio );
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('The IM column store space needed is about 1 byte
in IM column store for '|| cmp_ratio ||' bytes on disk.');
END;
/

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

使用 DBMS_COMPRESSION.GET_COMPRESSION_RATIO 过程可以分析要为表、分区、
子分区、LOB 或其他兼容类型的对象启用 INMEMORY MEMCOMPRESS,IM 列存储中需要
多少空间。用预期的磁盘上大小除以报告的比率,可以恰当地估计段需要的 IM 列存储空
间。根据指定的是 DISTRIBUTE 还是 DUPLICATE,大小为总大小或者每个 RAC 节点的
大小。
对 COMPTYPE 参数使用新常量:
• COMP_INMEMORY_NOCOMPRESS:测试 IM 列存储基本压缩。
• COMP_INMEMORY_QUERY_LOW / HIGH:测试查询的 IM 列存储压缩。
• COMP_INMEMORY_CAPACITY_LOW / COMP_INMEMORY_CAPACITY_HIGH:测试
容量低/高压缩的列格式。
• COMP_INMEMORY_DML

Oracle Database 12c:新功能 - 面向管理员 17-26


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

该过程执行的结果可以是以下各项:
Block count uncompressed = 146
Row count per block uncompressed = 68
Compression type = "In-memory Memcompress Query Low"
Comp ratio= 18
The IM column store space needed is about 1 byte in IM column
store for 18 bytes on disk.

Oracle University and Error : You are not a Valid Partner use only

Oracle Database 12c:新功能 - 面向管理员 17-27


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

计算压缩率

使用 V$IM_SEGMENTS 视图可以显示压缩率:
SQL> SELECT segment_name, bytes Disk, inmemory_size,

Oracle University and Error : You are not a Valid Partner use only
inmemory_compression COMPRESSION,
bytes / inmemory_size comp_ratio
FROM v$im_segments;

OBJECT_NAME DISK INMEMORY_SIZE COMPRESSION COMP_RATIO


----------- --------- ------------- ------------------ ----------
SALES 212284915 200104115 FOR QUERY LOW 1.06
EMPLOYEES 3456956 17984 FOR CAPACITY HIGH 192.22

越高越好:20 越低越差:1.06

对应于
1 字节 20 字节

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

IM 列存储中的列格式在填充期间可能会压缩段,也可能不压缩。具体取决于分配给对象
的压缩级别。
本幻灯片中的查询显示了以行格式存储在磁盘上的对象的实际字节数(使用
V$IM_SEGMENTS 视图的 BYTES 列),并将这些值与以列格式存储在 IM 列存储中的字
节数(使用 V$IM_SEGMENTS 视图的 INMEMORY_SIZE 列)进行比较。查询说明了如何
获得填充到 IM 列存储中的每个对象的压缩率。
在本幻灯片中的查询结果中,SALES 表使用 FOR QUERY 压缩级别获得较低的压缩率,
而 EMPLOYEES 表使用 FOR CAPACITY HIGH 压缩级别获得非常高的压缩率。
但是,访问 EMPLOYEES 表所需的 CPU 比访问 SALES 表要多得多,因为必须先将以
FOR CAPACITY HIGH 压缩级别压缩的数据解压缩到一定程度,然后才能将 WHERE 子
句谓词应用于这些数据。对于 SALES 表和 MEMCOMPRESS FOR QUERY 则并非如此,
WHERE 子句谓词可以直接应用于压缩的数据。

Oracle Database 12c:新功能 - 面向管理员 17-28


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

默认内存中设置

分配新的表默认内存中属性:

Oracle University and Error : You are not a Valid Partner use only
INMEMORY_CLAUSE_DEFAULT = "INMEMORY MEMCOMPRESS FOR QUERY LOW"

SQL> CREATE TABLE a (…); 内存中列存储

SQL> CREATE TABLE a (…) INMEMORY;


INMEMORY_CLAUSE_DEFAULT =
"NO MEMCOMPRESS"
SQL> CREATE TABLE b (…);

缓冲区
高速缓存

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

通过设置新的 INMEMORY_CLAUSE_DEFAULT 参数,DBA 可以在实例级别指定内存中表


的默认模式,而无需用户每次创建对象时都设置 INMEMORY 属性。默认情况下,将该参
数设置为空字符串。这意味着只有显式指定的表将位于内存中。如果为该参数设置了值,
则所有新表都将在内存中,或者如果未在语法中显式指定,默认情况下将强制应用特定的
内存中选项。该参数在实例和会话级别是动态的。可能的值包括:
• INMEMORY [NO MEMCOMPRESS|MEMCOMPRESS [FOR [QUERY
[LOW|HIGH]|[CAPACITY[LOW|HIGH]]]]] [PRIORITY
[LOW|MEDIUM|HIGH|CRITICAL|NONE]] [DISTRIBUTE [AUTO|BY
ROWID|BY PARTITION|BY SUBPARTITION]] [DUPLICATE
ALL|DUPLICATE|NO DUPLICATE]:所有表都在内存中,并使用定义的压缩、优
先级、分布和副本,除非专门指定为 NO INMEMORY。
• NO MEMCOMPRESS|MEMCOMPRESS [FOR [QUERY
[LOW|HIGH]|[CAPACITY[LOW|HIGH]]]]] [PRIORITY […][DISTRIBUTE
[…]] [DUPLICATE ALL|DUPLICATE|NO DUPLICATE]:如果专门指定为
INMEMORY,则所有表都在内存中,并使用定义的压缩、优先级、分布和副本。如果
参数值设置为 MEMCOMPRESS FOR CAPACITY 并且表创建为 INMEMORY
MEMCOMPRESS DUPLICATE,与表声明为 INMEMORY MEMCOMPRESS FOR
CAPACITY DUPLICATE 是一样的。
Oracle Database 12c:新功能 - 面向管理员 17-29
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

更改内存中属性的影响

1. 创建了一个内存中表:
SQL> CREATE TABLE imtab (c1 number, c2 VARCHAR2(30), c3 DATE)

Oracle University and Error : You are not a Valid Partner use only
INMEMORY NO INMEMORY(c3);

SQL> INSERT INTO imtab VALUES (…)


SQL> SELECT c1, c2 FROM imtab;

IMTAB 表 IM 列存储

1 2
C1 C1 IMCO
IMCU IMCU SMCO
已创建 已刷新 Wnnn

延迟

2. 更改或设置列的 INMEMORY 属性:


SQL> ALTER TABLE imtab INMEMORY(c3);

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

每次使用 INMEMORY 属性和定义的优先级创建表,在查询时或实例启动后,都将针对定


义为在内存中的全部或部分列创建 IMCU。根据分配的优先级,内存中表的填充可能会延
迟。如果希望填充某个内存中表的优先级比另一个内存中表高,请使用 PRIORITY 子子
句。也可以更改段或列的压缩级别。
更改列的 INMEMORY 属性不会强制刷新现有 IMCU。即使在列查询后也不一定重新填充
现有 IMCU。新的压缩级别仅反映在新(重新)填充的数据上。

Oracle Database 12c:新功能 - 面向管理员 17-30


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

移动或拆分内存中段
1. 创建了一个内存中段:
SQL> CREATE TABLE imt (c1 number, c2 VARCHAR2(30),c3 DATE) INMEMORY;
SQL> INSERT INTO imt … SQL> SELECT * FROM imt;

Oracle University and Error : You are not a Valid Partner use only
C1 IMCO
IMCU SMCO
已创建 Wnnn

2. 移动内存中表或拆分内存中分区:
SQL> ALTER TABLE imt MOVE;
SQL> SELECT * FROM imt;

C1 IMCO
SMCO
IMCU Wnnn
已重新创建

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

• ALTER TABLE MOVE 或 SPLIT / MERGE PARTITION 等 DDL 操作要求为表或


分区重新创建 IM 列存储表示形式,意味着重新创建 IMCU。这要求表被查询访问或
者被 IMCO 后台进程检测到(这取决于为对象设置的优先级)。在重新创建 IM 列
存储表示形式期间,其他操作不受影响。
• 对内存中表的 DDL 操作(例如添加/删除内存中列)会强制 IMCU 重新填充。

Oracle Database 12c:新功能 - 面向管理员 17-31


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

INMEMORY 继承
表空间:DEFAULT INMEMORY / COMPRESS / PRIORITY 属性
DBA_TABLESPACES

所有表:INMEMORY / 其他 COMPRESS / 其他 PRIORITY

Oracle University and Error : You are not a Valid Partner use only
NO INMEMORY 表除外
DBA_TABLES

所有分区:INMEMORY / 其他 COMPRESS / 其他 PRIORITY

NO INMEMORY 分区除外 DBA_PART_TABLES

所有列:INMEMORY / 其他 COMPRESS / 其他 PRIORITY

NO INMEMORY 列除外

SQL> CREATE TABLESPACE IMCS … DEFAULT INMEMORY


MEMCOMPRESS FOR CAPACITY HIGH PRIORITY LOW;

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在表空间级别作为默认行为设置的 INMEMORY 属性将由表空间中的所有 INMEMORY 兼容


段(表、分区、内嵌 LOB、MV、MV 日志)继承。在表空间中创建的任何将来的表都将
自动成为内存中表。默认值记录在 DBA_TABLESPACES 视图中的以下四列中:
• DEF_INMEMORY_COMPRESSION
• DEF_INMEMORY_PRIORITY
• DEF_INMEMORY_DISTRIBUTE
• DEF_INMEMORY_DUPLICATE
表空间级别的 PRIORITY 更改(不同于 NONE)仅适用于新创建的表,而不适用于现有
表。所有新表将立即排入队列以便进行填充。
作为默认属性为分区表设置的 INMEMORY 属性将由所有分区继承,可以在
DBA_PART_TABLES 视图中的以下四列中查看:
• DEF_INMEMORY_COMPRESSION
• DEF_INMEMORY_PRIORITY
• DEF_INMEMORY_DISTRIBUTE
• DEF_INMEMORY_DUPLICATE

Oracle Database 12c:新功能 - 面向管理员 17-32


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

对象设置之后

删除分析索引。

Oracle University and Error : You are not a Valid Partner use only
SQL> DROP INDEX i_sales_timeid PURGE;

SQL> DROP INDEX i_sales_chanid PURGE;

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

内存中表不再需要分析索引,前提是所有相应的列都设置为内存中列。它们将替换为表的
内存中列式表示形式的扫描。可以将索引标记为不可见,前提是索引不用于保证唯一性或
引用完整性,例如主键、唯一索引和外键。
可以使用如下指导:
• 将分析样式的索引标记为不可见
• 确认工作量对索引不再有益
• 删除索引

Oracle Database 12c:新功能 - 面向管理员 17-33


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

检索内存中对象的 CREATE DDL 语句

SQL> SELECT DBMS_METADATA.GET_DDL ('TABLE','CUSTOMER','SSB')


FROM dual;

Oracle University and Error : You are not a Valid Partner use only
DBMS_METADATA.GET_DDL('TABLE','CUSTOMER','SSB')
---------------------------------------------------------------
CREATE TABLE "SSB"."CUSTOMER"
( "C_CUSTKEY" NUMBER, "C_NAME" VARCHAR2(25),
"C_ADDRESS" VARCHAR2(25), "C_CITY" CHAR(10),
"C_NATION" CHAR(15), "C_REGION" CHAR(12),
"C_PHONE" CHAR(15), "C_MKTSEGMENT" CHAR(10)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING …
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE
DEFAULT) TABLESPACE "TS_DATA"
INMEMORY PRIORITY MEDIUM MEMCOMPRESS FOR QUERY LOW
AUTO DISTRIBUTE
CACHE

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

现有的 DBMS_METADATA.GET_DDL 过程将进行更新,以便能够生成新子句。

Oracle Database 12c:新功能 - 面向管理员 17-34


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:b
a. 存储任何类型的数据
内存中列存储的用途是什么?
测验

d. 像在磁盘上一样在内存中压缩数据

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 17-35


c. 当缓冲区高速缓存在块中老化时在内存中保留数据副本
b. 以不同于缓冲区高速缓存中的格式在内存中保留数据副本

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

测验

当内存中列存储空闲空间不足时会发生什么?

Oracle University and Error : You are not a Valid Partner use only
a. 对内存中对象的查询将产生错误。
b. ADDM 将发出警告或预警。
c. 对无法填充的内存中对象的查询将针对缓冲区高速缓存
而非内存中列存储执行。
d. 可以将内存中对象的某些部分填充到内存中列存储中的
剩余空间。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

答案:c、d
b 不正确。ADDM 无法识别内存中列存储。

Oracle Database 12c:新功能 - 面向管理员 17-36


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

查询获益

适用于:

Oracle University and Error : You are not a Valid Partner use only
• 扫描大量行并应用过滤器
• 查询表中的部分列
• 将小型表(维)与大型表(事实)联接
– 在事实表中利用重复的维值
• 聚集数据

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

内存中列存储功能非常适合用于执行如下操作的查询:
• 扫描大量行并应用过滤器,例如:=、<、>、in 列表
• 查询表中的部分列,例如,选择一个表 100 列中的 5 列
• 将小型表(维)与大型表(事实)联接
- 在事实表中利用重复的维值
• 聚集数据

Oracle Database 12c:新功能 - 面向管理员 17-37


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

测试和比较查询性能

• 测试在 IM 列存储中对内存中表执行的查询:
SQL> SET timing ON

Oracle University and Error : You are not a Valid Partner use only
SQL> SELECT max(lo_ordtotalprice) most_expensive_order
FROM lineorder;

用时:00:00:01.80 对应用程序透明

• 针对缓冲区高速缓存重新执行相同的查询:
SQL> ALTER SESSION SET INMEMORY_QUERY="DISABLE";
SQL> SELECT max(lo_ordtotalprice) most_expensive_order
FROM lineorder;

使用 INMEMORY_QUERY 会话参数针对缓冲区
用时:00:12:21.90 高速缓存执行查询

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

优化程序必须知道表何时采用列格式并适当地估计查询成本。针对内存中对象的计划查询
可能与缓冲区高速缓存查询截然不同。
本幻灯片中的查询在两种情况下(第一个和第二个示例)执行都非常快,因为这是纯内存
中扫描。但是,针对内存中列存储的查询性能远远快于针对传统缓冲区高速缓存的性能,
因为 IM 列存储只必须扫描单个 LO_ORDTOTALPRICE 列,而缓冲区高速缓存的行存储格
式必须扫描每一行中的所有列,直至到达 LO_ORDTOTALPRICE 列为止。由于极高的压
缩率加上列格式无需额外的联接操作处理,也使查询受益。
在使用和不使用内存中功能的工作量的测试阶段,用户可以使用 INMEMORY_QUERY 参数
在会话级别甚至在系统级别启用或禁用内存中查询。默认值为“ENABLE”。当用户要测
试相同查询针对缓冲区高速缓存的性能时,可以将 INMEMORY_QUERY 设置为
“DISABLE”。

Oracle Database 12c:新功能 - 面向管理员 17-38


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

对内存中表的查询:简单谓词
LO_ORDERKEY col1 LO_CUSTKEY col2 LO_REVENUE col4
450,500,…, 357 … / 10,20,… 40,50 … / … / 900,…,2500,… , 9900 …

Oracle University and Error : You are not a Valid Partner use only
SQL> SELECT lo_orderkey, lo_custkey, lo_revenue
FROM lineorder
WHERE lo_orderkey = 357; IMCU 修剪:使用每个 IMCU 中
存储的最小值和最大值

IMCU1 IMCU2

Col1: Col2: Col3: Col4: Col1: Col2: Col3: Col4:


450-600 10-30 A-J 900-1999 301-500 40-100 E-J 1000-10000

450 10 A 900 301 40 F 1000


500 20 J 1000 357 50 J 9900
501 C 990 500 E 2500
… … … 3000

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

使用简单谓词针对 IM 列存储进行查询的性能明显高于针对缓冲区高速缓存的相同查询,
因为 IM 列存储可以访问每列中每个 IMCU 的 MINIMUM 和 MAXIMUM 值。
WHERE 谓词中的列将与该列的每个 IMCU 中存储的 MINIMUM 和 MAXIMUM 范围值进行比
较,如果该值不在指定范围内,将完全跳过 IMCU。IMCU 修剪适用于对单个列使用谓词
过滤器的查询,例如等于、不等于 (<>)、比较运算符(<、<=、>、>=、NULL、NOT
NULL、LIKE、SUBSTRING)。
在本幻灯片的示例中,LO_ORDERKEY 列的 IMCU1 根据 MINIMUM 和 MAXIMUM 值被修
剪掉,仅扫描同一列的 IMCU2。
SELECT COLUMN_NUMBER, MINIMUM_VALUE, MAXIMUM_VALUE
FROM V$IM_COL_CU i, dba_objects o
WHERE i.objd = o.data_object_id
AND o.object_name = 'LINEORDER'
GROUP BY COLUMN_NUMBER, MINIMUM_VALUE, MAXIMUM_VALUE
ORDER BY column_number;
注:正如 Exadata 具有存储索引一样,内存中列存储会记录每个 IMCU 或区的 MINIMUM
和 MAXIMUM 值。

Oracle Database 12c:新功能 - 面向管理员 17-39


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

MINMAX 修剪统计信息
是否会发生 MINMAX 修剪?

MINMAX 修剪针对包含等式和不等式的 WHERE 子句进行。

Oracle University and Error : You are not a Valid Partner use only
SQL> SELECT display_name, value
FROM v$mystat m, v$statname n
WHERE m.statistic# = n.statistic#
AND display_name IN (
'IM scan segments minmax eligible',
'IM scan CUs pruned',
'IM scan CUs optimized read',
'IM scan CUs predicates optimized');

DISPLAY_NAME VALUE
----------------------------------- ---------------------
IM scan segments minmax eligible 250
IM scan CUs pruned 249
IM scan CUs optimized read 0
IM scan CUs predicates optimized 249

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

通过查看四个 IM 列存储会话统计信息,验证是否发生了 minmax 修剪。


• IM scan segments minmax eligible:符合 minmax 修剪条件的 CU 计数。
• IM scan CUs optimized read:所有行均已通过 minmax 比较的 CU 计数。这
表示 IMCU 的所有行均与 WHERE 子句的值匹配。
• IM scan CUs predicates optimized:所有行均已通过 minmax 比较或没有
行通过 minmax 比较的谓词计数。
• IM scan CUs pruned:没有行通过 minmax 比较的 CU 计数。这表示 IMCU 永
远不会被扫描到。
在本幻灯片的示例中,“IM scan CUs pruned”和“IM scan CUs predicates
optimized”统计信息显示为 249。这表示 249 个 IMCU 不包含与 LO_ORDERKEY 的值
357 匹配的任何行。因此,只需读取一个 CU 即可满足查询谓词。

Oracle Database 12c:新功能 - 面向管理员 17-40


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

IM 列存储统计信息
• 使用 V$MYSTAT 和 V$STATNAME: %IM% 统计信息。
SQL> SELECT display_name, value
FROM v$mystat m, v$statname n
WHERE m.statistic# = n.statistic#

Oracle University and Error : You are not a Valid Partner use only
AND display_name IN (
'session logical reads - IM',
'IM scan rows', 'IM scan rows valid',
'IM scan blocks cache',
'IM scan CUs columns accessed' );

DISPLAY_NAME VALUE
--------------------------------------------- -----------
session logical reads - IM 3063604
IM scan rows 211307905
IM scan rows valid 879059
IM scan blocks cache 0
IM scan CUs columns accessed 3

注:如果未在 IM 列存储中执行查询,则所有统计信息均
显示为 0。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

有两种方式可以查明是否针对 IM 列存储执行了查询而未针对缓冲区高速缓存执行查询。
查看内存中会话统计信息或执行计划。
会话级别的统计信息将报告 SQL 的执行情况。查询 V$MYSTAT 和 V$STATNAME 性能视
图。如果所有 IM 统计信息均显示值为 0,表示查询针对缓冲区高速缓存执行。与 IM 列存
储相关的大多数统计信息以 IM 开头:
• session logical reads -IM:在 IMCU 中扫描的块数计数
• IM scan blocks cache:因为块在 IMCU 提取列表中而从磁盘提取的块计数
• IM scan rows:在应用有效的 bloom 过滤之前从 IMCU 中扫描的行计数
• IM scan rows valid:在应用有效的 bloom 过滤之后从 IMCU 中扫描的行计数
• IM scan CUs columns accessed:扫描访问的列计数
在本幻灯片的示例中,IM column store scan blocks cache 统计信息显示
LINEORDER 表填充到了 IM 列存储中,并且未在查询期间从缓冲区高速缓存进行访问。在
本示例中,使用 IM scan CUs columns accessed 状态仅查询到 LO_ORDERKEY、
LO_CUSTKEY、LO_REVENUE 列。
V$SEGMENT_STATISTICS 视图也与每个段的 IM 统计信息有关。

Oracle Database 12c:新功能 - 面向管理员 17-41


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

执行计划:TABLE ACCESS IN MEMORY FULL

在 IM 列存储中还是在缓冲区高速缓存中执行?
SQL> SELECT * FROM table(dbms_xplan.display_cursor());

Oracle University and Error : You are not a Valid Partner use only
-----------------------------------------------------
| Id | Operation | Name |
在 IM 列存储中执行
-----------------------------------------------------

|* 4 | TABLE ACCESS INMEMORY FULL | LINEORDER |
-----------------------------------------------------
在 IM 列存储中执行
Predicate Information (identified by operation id):
---------------------------------------------------
4 – inmemory("LO_ORDERKEY"=357) filter("LO_ORDERKEY"=357)


|* 4 | TABLE ACCESS FULL | LINEORDER |
针对缓冲区高速缓存执行
-----------------------------------------------------
4 – access (:Z>=:Z AND :Z<=:Z) filter("LO_ORDERKEY"=357)

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

对于单列上的简单谓词,优化程序将选择表扫描, 除非有单列索引可用。优化程序可能会
选择索引。如果没有索引或者只有多列索引可用,则优化程序将只选择使用 IM 列存储。
幻灯片 39 中所执行查询的执行计划显示操作执行了 TABLE ACCESS INMEMORY FULL。
将关键字“INMEMORY”添加到 TABLE ACCESS FULL 操作中与在 Exadata 系统上添加
“STORAGE”一词完全一样。
关键字“INMEMORY”表明该操作可以获取计划中该步骤从 IM 列存储返回的部分或全部
数据。
如果某个表因持续的填充操作已部分转换为列格式,或者如果 IM 列存储中缺少空间,则
查询能够使用部分内存中版本,然后转至磁盘使用其余部分,而不是等待转换完整个表。

Oracle Database 12c:新功能 - 面向管理员 17-42


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

对内存中表的查询:联接
查询多个内存中表:

SQL> SELECT SUM(lo_extendedprice * lo_discount) revenue

Oracle University and Error : You are not a Valid Partner use only
FROM lineorder l, date_dim d
WHERE l.lo_orderdate = d.d_datekey
AND l.lo_discount BETWEEN 2 AND 3
AND l.lo_quantity < 24
AND d.d_date='December 24, 1996';
用时:00:00:00.28

• 比较针对缓冲区高速缓存的相同查询的性能:
SQL> SELECT SUM(lo_extendedprice * lo_discount) revenue
FROM lineorder l, date_dim d
WHERE l.lo_orderdate = d.d_datekey
AND l.lo_discount BETWEEN 2 AND 3
AND l.lo_quantity < 24
AND d.d_date='December 24, 1996'; 用时:00:02:28.85

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

IM 列存储可以使用联接对多个表执行查询,因为它能够利用 bloom 过滤器联接。第一个


示例中的性能高于第二个示例中的性能,因为前者受益于列的列存储表示形式。第一个示
例在启用了内存中功能的会话中执行查询,而第二个示例在禁用了内存中功能的会话中执
行查询。
bloom 过滤器联接可以将联接转换为过滤器,该过滤器可以在事实表扫描期间应用。使用
bloom 过滤器可以实现联接转换。Bloom 过滤器最初在 Oracle Database 10g 中引入,
通过减少在生产者从属进程(设置为扫描表)与使用者从属进程(设置为执行散列联接探
测)之间通过表队列发送的行数来提高散列联接性能。Bloom 过滤器并不特定于 Oracle
DB 内存中功能。但是,它们非常高效地应用于列式数据。基本想法是避免发送因不符合
联接条件而在联接后被丢弃的行。
Bloom 过滤器由两个步骤组成。在第一步中,在扫描散列联接的构建端期间创建 bloom
过滤器。在第二步中,在扫描同一散列联接的探测端期间使用 bloom 过滤器。

Oracle Database 12c:新功能 - 面向管理员 17-43


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

当两个表通过散列联接进行联接时,将扫描第一个表(通常是较小的表),符合 WHERE
子句谓词的行(针对该表)用于创建散列表。在散列表创建期间,也会根据联接列创建
bloom 过滤器。Bloom 过滤器随后作为附加谓词被发送到第二个表扫描。将 WHERE 子句
谓词应用于第二个表扫描后,所生成行的联接列将经过散列处理,并与 bloom 过滤器中
的值进行比较。如果在 bloom 过滤器中找到匹配项,会将该行发送到散列联接。如果未
找到匹配项,则会忽视该行。

Oracle University and Error : You are not a Valid Partner use only

Oracle Database 12c:新功能 - 面向管理员 17-44


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

执行计划:JOIN FILTER CREATE / USE


-------------------------------------------------------------
如果针对缓冲区高速缓存
| Id | Operation 查询表: | Name |
TABLE ACCESS FULL
-------------------------------------------------------------
| 0 | SELECT STATEMENT | |

Oracle University and Error : You are not a Valid Partner use only
| 1 | SORT AGGREGATE | |
|* 2 | HASH JOIN | |
| 3 | JOIN FILTER CREATE | :BF0000 |
|* 4 | TABLE ACCESS INMEMORY FULL | DATE_DIM |
| 5 | JOIN FILTER USE | :BF0000 |
|* 6 | TABLE ACCESS INMEMORY FULL | LINEORDER |
-------------------------------------------------------------
2 - access("L"."LO_ORDERDATE"="D"."D_DATEKEY")
4 - inmemory ("D"."D_DATE"='December 24, 1996')
filter ("D"."D_DATE"='December 24, 1996')
6 – inmemory (("L"."LO_DISCOUNT"<=3 AND L"."LO_QUANTITY"<24
AND "L"."LO_DISCOUNT">=2
AND SYS_OP_BLOOM_FILTER(:BF0000,"L"."LO_ORDERDATE")))

如果针对缓冲区高速缓存
查询表:access

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

生成在启用了内存中功能的会话中所执行查询的执行计划以识别 bloom 过滤器。Bloom 过


滤器出现在两个位置,在创建时以及在使用它时。
在本幻灯片的示例中,以下是执行步骤:
1. 当 LINEORDER 和 DATE_DIM 表通过散列联接进行联接时,首先扫描 DATE_DIM 表
(第 4 步)。符合该表的 WHERE 子句谓词 (D_DATE='December 24, 1996') 的
行用于创建散列表(第 2 步)。
2. 在散列表创建期间,也会根据 D_DATEKEY 联接列创建 bloom 过滤器 (:BF0000)
(第 3 步)。
3. Bloom 过滤器随后作为附加谓词发送到 LINEORDER 表扫描
(SYS_OP_BLOOM_FILTER(:BF0000,"L"."LO_ORDERDATE")。
i. 扫描该表以查找符合该表的两个 WHERE 子句谓词 (LO_DISCOUNT<=3 AND
LO_QUANTITY<24 AND LO_DISCOUNT>=2) 的行(第 6 步)。
ii. 所生成行的联接列 LO_ORDERDATE 经过散列处理,将与 bloom 过滤器
(:BF0000) 中的 D_DATEKEY 值进行比较(第 5 步)。
4. 如果在 bloom 过滤器中找到匹配项,会将该行发送到散列联接。如果未找到匹配项,
则会忽视该行。

Oracle Database 12c:新功能 - 面向管理员 17-45


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

对内存中表和非内存中表进行查询
SQL> SELECT (lo_extendedprice * lo_discount) revenue
FROM inmem_lineorder l, noinmem_date_dim d
WHERE l.lo_orderdate=d.d_datekey AND d.d_date='December 24, 1996';

Oracle University and Error : You are not a Valid Partner use only
INMEM_LINEORDER
NOINMEM_DATE_DIM

IM 列存储 缓冲区高速缓存

--------------------------------------------------------------------
|Id | Operation | Name |
--------------------------------------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | HASH JOIN | |
| 2 | JOIN FILTER CREATE | :BF0000 |
|* 3 | TABLE ACCESS FULL | NOINMEM_DATE_DIM |
| 4 | JOIN FILTER USE | :BF0000 |
|* 5 | TABLE ACCESS INMEMORY FULL | INMEM_LINEORDER |
--------------------------------------------------------------------

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在某些情况下,一个查询中只有部分段启用了 IM 列存储。在这种情况下,优化程序仍将
选择对查询中可以转至内存和必须转至磁盘的部分都有意义的最佳计划。当并非整个表都
能填充到内存中时,也会发生类似的情况。
在本幻灯片的示例中,优化程序选择在计划的不同部分同时从缓冲区高速缓存和 IM 列存
储进行处理。
执行步骤如下所示:
• 当 INMEM_LINEORDER 和 NOINMEM_DATE_DIM 表通过散列联接进行联接时,首
先从缓冲区高速缓存中扫描 NOINMEM_DATE_DIM 表(第 3 步)。
• 符合该表的 WHERE 子句谓词 (D_DATE='December 24, 1996') 的行将被用于创
建散列表(第 1 步)。
• 在散列表创建期间,也会根据 D_DATEKEY 联接列创建 bloom 过滤器 (:BF0000)
(第 2 步)。
• Bloom 过滤器随后作为附加谓词发送到 INMEM_LINEORDER 表扫描
(SYS_OP_BLOOM_FILTER(:BF0000,"L"."LO_ORDERDATE")。表将在 IM 列存
储中进行扫描(第 5 步)。

Oracle Database 12c:新功能 - 面向管理员 17-46


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

将该行发送到散列联接。如果未找到匹配项,则会忽视该行。

Oracle Database 12c:新功能 - 面向管理员 17-47


所生成行的联接列 LO_ORDERDATE 经过散列处理,将与 bloom 过滤器 (:BF0000)
中的 D_DATEKEY 值进行比较(第 4 步)。如果在 bloom 过滤器中找到匹配项,会

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

对内存中列和非内存中列进行查询

• 对内存中表的非内存中列进行查询:
SQL> SELECT noinmem_lo_revenue 缓冲区

Oracle University and Error : You are not a Valid Partner use only
FROM inmem_lineorder; 高速缓存 IM 统计信息 = 0

• 对内存中表的非内存中列和内存中列进行查询:
SQL> SELECT noinmem_custkey,
inmemlo_revenue 缓冲区
高速缓存 IM 统计信息 = 0
FROM inmem_lineorder;

DISPLAY_NAME VALUE
----------------------------------- ---------------------
IM scan rows 0
IM scan rows valid 0
IM scan blocks cache 0
IM scan CUs columns accessed 0

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在某些情况下,只为查询中的某些列禁用 IM 列存储,而为表启用 IM 列存储。


如果某个段定义为 INMEMORY,但是其中某些列定义为 NO INMEMORY,则选择任何非内
存中列的查询均将被发送到缓冲区高速缓存,本幻灯片中的第一个和第二个示例就是这种
情况,而仅选择内存中列的查询将被发送到 IM 列存储。
在这两个示例中,IM 列存储统计信息全部设置为 0。

Oracle Database 12c:新功能 - 面向管理员 17-48


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

DML 和内存中列存储
• 内存中列存储可以管理 DML 事务处理。
SQL> SELECT display_name, value FROM v$mystat m, v$statname n
WHERE m.statistic# = n.statistic#

Oracle University and Error : You are not a Valid Partner use only
AND display_name like 'IM transactions%';

DISPLAY_NAME VALUE
------------------------------------ --------------------
IM transactions 1
IM transactions rows journaled 10224

• 内存中列存储可以管理批量加载。
– 表的列式表示形式
– 同一表的行格式表示形式
如果删除了分析索引
如果保留了分析索引
• 与 OLTP 完全兼容。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

IM 列存储可以管理任何 DML 操作。IM 列存储中的数据与磁盘格式的数据在事务处理上


保持一致。DML 事务处理操作在内存中以及磁盘上执行,以实现读取一致性。IM 统计信
息提供了有关针对 IM 列存储中的数据和记录到内存中列存储日志中的行所执行的事务处
理次数的信息。
IM 列存储真正集成到数据库环境中,因为它能够处理批量数据加载和联机事务处理。直
接路径加载可以在填充 IM 列存储版本的同时加载磁盘上版本。在这种情况下,将在幕后
执行后台填充。在后台填充完成之前,批量加载操作不会返回甚至不会提交。如果因内存
大小不足导致填充失败,将提交批量加载以避免打断应用程序语义。磁盘上版本完全填充
到缓冲区高速缓存,而填充表的 IM 列存储表示形式为部分填充。对于针对 IM 列存储中
的数据的批量加载操作,没有 IM 事务处理统计信息。
扫描速度足够快,因此 OLTP 表仅需要较少的索引。仍然需要维护主键索引,但是可以
消除不太重要的索引。这样会使 DML 操作更快,因为需要更新的索引更少。

Oracle Database 12c:新功能 - 面向管理员 17-49


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

建议

查询的性能提升如下:
• IM 列存储和并行化

Oracle University and Error : You are not a Valid Partner use only
可能无需优化
• 仅 IM 列存储
• 无 IM 列存储但有并行化
• 无 IM 列存储也无并行化
启用 IM 列存储意味着:
• 查找有多少内存可供 IM 列存储使用
• 计算要在 IM 列存储中加载的 ∑(对象的估计大小)
• 不在表空间级别设置 DEFAULT INMEMORY
PRIORITY xxx

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

启用 IM 列存储后,当 IM 列存储与并行化相结合时,查询性能会有所提升。如果启用了
自动 DOP,根据 CPU 数量,优化程序能够查找最佳并行查询执行计划。如果出于任何
原因禁用了自动 DOP,IM 列存储仍会提供非常高的性能。DBA 再也不必优化查询。禁
用 IM 列存储后,要查询的数据量会影响执行性能。并行化仍有助于提高查询性能。如果
IM 列存储和并行化都已禁用,则需要 SQL 优化。
当 DBA 必须决定是否启用 IM 列存储时,必须回答以下问题:
• 有多少可用内存可提供给 IM 列存储?
• 哪些对象将受益于列格式?
• 这些对象在压缩后将在 IM 列存储中占用多少空间?
• 为对象启用 IM 列存储后可以删除哪些索引?
注:如果指定了除 NONE 以外的 PRIORITY,强烈建议不要在表空间级别设置 DEFAULT
INMEMORY PRIORITY。这项 IM 列存储设置将应用于表空间中所有将来的表。所有此类
表将立即排入队列以便进行填充。

Oracle Database 12c:新功能 - 面向管理员 17-50


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

视图

• V$IM_SEGMENTS / V$IM_USER_SEGMENTS /
V$IM_SEGMENTS_DETAIL:所有用户段的内存中状态

Oracle University and Error : You are not a Valid Partner use only
• V$IM_COLUMN_LEVEL:内存中段的所有列的内存中
状态
• V$IM_TBS_EXT_MAP:提供 TSN 和数据对象 ID 的磁
盘上 DBA 范围的内存中区
• V$IM_SEG_EXT_MAP:通过 TSN、磁盘上 DBA 和数
据对象编号映射,该视图将列出所有内存中区
• V$IM_COL_CU:每一行都包含有关特定列的内存中列
单元的信息(包括最小值和最大值)

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

通过之前的示例,您发现了一个新的 V$IM_SEGMENTS 视图。添加了其他新的 IM 列存储


视图以监视 IM 段。存在的其他视图是为了提供有关 IM 列存储段的详细信息(例如区和
IMCU)以及有关全局 IM 列存储区域的详细信息的附加信息。
• V$IM_SEGMENTS:启用 IM 列存储的所有段的内存中状态
• V$IM_USER_SEGMENTS:启用 IM 列存储的用户段的内存中状态
• V$IM_TBS_EXT_MAP:指向提供 TSN 和数据对象 ID 的磁盘上 DBA 范围的内存中区
• V$IM_SEG_EXT_MAP:通过 TSN、磁盘上 DBA 和数据对象编号映射,该视图将列
出所有内存中区
• V$IM_COL_CU:每一行都包含有关特定列的内存中列单元的信息(包括最小值和最
大值)
• V$IM_SMU_HEAD:每一行都包含有关特定内存中事务处理快照元数据单元 (SMU) 的
信息
• V$IM_SMU_CHUNK:每一行都包含有关特定内存中事务处理快照元数据单元 (SMU)
块的信息

Oracle Database 12c:新功能 - 面向管理员 17-51


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

PX 和数据泵。
数据泵
优化程序

RAC 环境

内存中并行执行
与其他产品的交互

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 17-52


内存中列存储功能可与其他产品或功能交互,例如 Real Application Clusters、In-Memory

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

优化程序

Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

自适应计划
自适应计划是 12.1.0.1 中的新增功能,允许优化程序为计划中的某些操作选择替代方案。
设想一下这样的情况:查询的某个表部分填充到 IM 列存储中、填充表的某些内存中行在
事务处理日志中采用行格式,或者某个表被从 IM 列存储中逐出。这些只是内存中份额不
断变化的几个示例。要提升此类查询的性能,一个可能的解决方案是使用自适应计划而非
自适应游标共享。自适应计划针对每个 IM 列存储表有两个访问路径:全表扫描和另一个
访问路径(通常是索引)。执行时,将检索当前的内存中份额,将其与自适应计划模式中
存储的阈值内存中份额进行比较,以选择适当的访问路径。计划不断自适应。

Oracle Database 12c:新功能 - 面向管理员 17-53


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SQL 计划管理
SQL 计划基线与 IM 列存储查询兼容。可以对表禁用 IM 列存储,将表还原为仅磁盘上访
问。当前接受的计划(可能使用 FULL TABLE IN MEMORY ACCESS 扫描)在磁盘上访
问时可能性能低下。这类似于方案更改使得现有计划欠佳的情况。也会发生相反的情况。
如果表在磁盘上而稍后为其启用了 IM 列存储,则可能会创建 SQL 计划基线。这类似于
为表创建新访问结构的情况。在这两种情况下,在硬性语法分析期间,优化程序很有可能
会查找反映表的当前内存中份额的新计划。自动 SPM 演变任务随后将验证这些计划,如

Oracle University and Error : You are not a Valid Partner use only
果它们优于当前接受的计划,也会接受这些计划。
自适应游标共享
ACS 与 IM 列存储完全兼容。考虑一下配置为按需加载的内存中表。第一个对表使用全表
扫描的查询将触发一个后台进程,开始将表加载到 IM 列存储中。在第一个查询的硬性语
法分析期间,磁盘上表的常规成本函数将相应地生成一个计划。在后台加载继续进行的同
时共享游标。如果在初始加载仍在进行时同一查询执行了多次,则将共享同一计划,但后
面的执行会比较快,因为更多的行位于 IM 列存储中。
初始加载过程完成后,依赖于该表的所有都将无效。

Oracle Database 12c:新功能 - 面向管理员 17-54


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

IM 列存储和 RAC

内存中列存储
内存中列存储
查询对象 P1
P1

Oracle University and Error : You are not a Valid Partner use only
P2
P2

节点 1
节点 2

内存中列存储

P3
P3 内存中列存储

P4
P4
SQL> CREATE TABLE tabrac … 节点 3
PARTITION BY LIST …
(PARTITION p1 …, 节点 4
PARTITION p2 … INMEMORY
4 节点 RAC 集群
MEMCOMPRESS FOR QUERY HIGH,
PARTITION p3 …,
PARTITION p4 …)
INMEMORY DISTRIBUTE AUTO;

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在启用 IM 列存储的 RAC 数据库中,每个实例都有自己的 IM 列存储区域。默认行为是


Oracle DB 自动决定如何在 IM 列存储中的实例间拆分表。在 RAC 配置中,可以指定给定
对象(表、分区或子分区)是应该完全填充到每个实例的内存中列存储中,还是应该在每
个实例的内存中列存储间分布。当表太大而无法填充到单个实例的内存中列存储中但能够
填充到所有实例的可用聚集空间中时,后一种方法有效。在 RAC 实例间分布大型表后,
内存中并行查询在利用集群中的所有 CPU 和内存资源对巨大的数据集执行超快查询时效
果非常好。
• DISTRIBUTE AUTO 属性可以在 RAC 实例间分布大型表的某些部分。也可按 BY
ROWID RANGE、BY PARTITION 或 BY SUBPARTITION 方式分布,将分区或子分
区分布到不同节点。当表实际在节点间分布时,DUPLICATE 子句有两个选项。
- 如果想要一个副本,请使用 NO DUPLICATE。
- 如果要在集群中拥有两个副本,请使用 DUPLICATE。
• 如果必须在所有 RAC 实例间复制小型表或部分分区,才能使整个表、全部行和列或
部分分区、行和列在每个实例上可用,则将使用默认的 DUPLICATE ALL 属性。

Oracle Database 12c:新功能 - 面向管理员 17-55


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

冲区高速缓存和 IM 列存储之间的事务处理一致性。

Oracle Database 12c:新功能 - 面向管理员 17-56


期间 RAC 行失效,则行失效将同时发生在缓冲区高速缓存中和 IM 列存储中,以确保缓
高速缓存合并已进行扩展,以确保在节点间保持事务处理的一致性。如果 DML 事务处理

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

IM 列存储和数据泵

• 导出时将传输 INMEMORY 属性:

Oracle University and Error : You are not a Valid Partner use only
DBA_TABLESPACES 转储文件
源数据库
DEFAULT_INMEMORY_COMPRESSION
SALES 表
DEFAULT_INMEMORY_PRIORITY
SALES: INMEMORY
DEFAULT_INMEMORY_DISTRIBUTE MEMCOMPRESS
DEFAULT_INMEMORY_DUPLICATE FOR QUERY LOW
C1: NO INMEMORY
C2; INMEMORY
DBA_TABLES C3: INMEMORY
DBA_TAB_PARTITIONS PRIORITY MEDIUM
DBA_TAB_SUBPARTITIONS C4: INMEMORY
DUPLICATE
INMEMORY_COMPRESSION
INMEMORY_PRIORITY
INMEMORY_DISTRIBUTE 目标数据库
INMEMORY_DUPLICATE
11.2

• 导入时重新生成 INMEMORY 属性:

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

数据泵导出操作为支持 INMEMORY 子句的所有对象和部分列保留该子句。当这些对象在


导入时重新创建时,数据泵导入操作将生成与这些对象在导出时的设置匹配的
INMEMORY 子句。
注:导入早于 12.1 的数据库时,不会生成 INMEMORY 子句。

Oracle Database 12c:新功能 - 面向管理员 17-57


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

数据泵 TRANSFORM 名称

• 默认情况下,数据泵导入时将传输 INMEMORY 属性。

Oracle University and Error : You are not a Valid Partner use only
• 导入 INMEMORY 对象时可保留/不保留 INMEMORY 属性:
$ impdp … TRANSFORM=INMEMORY:Y|N

• 导入 INMEMORY 对象时将传输 INMEMORY 属性:


$ impdp … TRANSFORM=INMEMORY_CLAUSE:\
"INMEMORY MEMCOMPRESS FOR CAPACITY HIGH
PRIORITY MEDIUM\"

$ impdp … TRANSFORM=INMEMORY_CLAUSE:\"NO INMEMORY\"

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle 数据泵向 TRANSFORM 参数中添加了两个新的传输名称。TRANSFORM 参数可以告


知数据泵修改导入期间所生成的 DDL。
• 第一个 TRANSFORM 名称是 INMEMORY,其值为 N 或 Y。值 N 告知 Oracle 数据泵从
分配有该属性的所有对象中删除 INMEMORY 子句。值 Y 告知 Oracle 数据泵保留
INMEMORY 子句,这是默认行为。如果表空间中存储的某个对象没有 INMEMORY 子
句,则该对象将继承表空间的 INMEMORY 子句。如果用户正在移植数据库并希望新数
据库使用 INMEMORY 功能,用户可以使用适当的 INMEMORY 子句预先创建表空间,
然后在 IMPDP 命令中使用 TRANSFORM=INMEMORY:N。如果没有该参数,用户将必
须更改每个对象以添加适当的 INMEMORY 子句。
• 第二个 TRANSFORM 名称为 INMEMORY_CLAUSE。值为带有有效内存中子句的字符
串。当用户使用该 TRANSFORM 时,Oracle 数据泵将使用该字符串的内容作为所有在
DDL 中有内存中子句的要导入对象的 INMEMORY_CLAUSE。当您要覆盖转储文件中
对象的内存中子句时,该 TRANSFORM 很有用,如本幻灯片中的第二个示例所示。如
果 DBA 要禁用 INMEMORY 压缩并确保表不会继承父表空间的压缩,则 DBA 应使用
本幻灯片中的第三个示例。
注:将选项放在参数文件中可避免 OS 命令行处理。

Oracle Database 12c:新功能 - 面向管理员 17-58


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED






在本课中,您应该已经学会:
小结

描述与其他产品和功能的交互
在数据库中部署内存中列存储

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


说明内存中列存储的目标、好处和体系结构

Oracle Database 12c:新功能 - 面向管理员 17-59


说明查询和 DML 执行如何受益于内存中列存储
使用新增视图和统计信息显示内存中列存储的使用情况

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED






17-2:配置内存中对象
17-1:配置内存中列存储

17-3:对内存中对象进行查询

17-5:使用内存中列存储(演示)
练习 17:概览

17-4:导出和导入内存中对象(可选)

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 17-60


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

内存中高速缓存

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle Database 12c 新增功能和增强功能


Enterprise Manager Enterprise Manager Enterprise Manager
Cloud Control Database Express
其他工具
和其他工具

基础功能 CDB 和 PDB 创建 CDB 和 PDB 管理


CDB 和 PDB
热图和自动数据优化 联机数据文件移动

Oracle University and Error : You are not a Valid Partner use only
ADO 和存储
数据库中归档和期间有效性 期间历史记录

安全性 统一审计 权限分析 数据编写

HA RMAN

易管理性 DB 操作 实时 ADDM 比较时段 ADDM ADR


12.1.0.2 12.1.0.2

内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速
12.1.0.2

缓存
SQL 优化 资源管理器 索引、表

数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c R1 PS1 中还有其他新的内存中高速缓存功能,例如,整个数据库


内存中高速缓存和自动大表高速缓存。

Oracle Database 12c:新功能 - 面向管理员 18-2


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED





使用自动大表高速缓存
说明两种缓冲区替换算法
学完本课后,应能完成以下工作:

描述自动大表高速缓存的用途
课程目标

使用整个数据库内存中高速缓存
描述整个数据库内存中高速缓存的用途

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 18-3


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12.1.0.2

整个数据库内存中高速缓存

传统缓冲区高速缓存使用情况 整个数据库内存中高速缓存

DB_CACHE_SIZE = 10g
将整个数据库加载到缓冲区高速缓存中:

Oracle University and Error : You are not a Valid Partner use only
扫描 + OLTP • 巨大的性能优势
LRU • 两种模式
算法 ‒ 整个数据库高速缓存
‒ 强制整个数据库高速缓存

无 LRU
加载到缓冲区高速缓存中 -
如果表大小 < 缓冲区
高速缓存大小的很小百分比

表 HR.EMPLOYEES SYSTEM EXAMPLE USERS

表 SH.SALES

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

仅当表大小小于缓冲区高速缓存大小的很小百分比时,用于表扫描的当前算法才会将表加
载到缓冲区高速缓存中。对于非常大的表,数据库使用直接路径读取,这种方法直接将块
加载到 PGA 中而绕过 SGA,以避免涌进缓冲区高速缓存。DBA 必须将频繁访问的较小
查找表显式声明为 CACHE,以将数据加载到内存中,并避免绕过 SGA。该子句表明执行
全表扫描时,为这些表检索的块将放在缓冲区高速缓存中最近最少使用 (least recently
used, LRU) 列表的最近最常使用一端。
使用整个数据库内存中高速缓存功能,当数据库大小(所有数据文件、SYSTEM 表空间、
LOB CACHE 文件的总和减去 SYSAUX、TEMP)小于缓冲区高速缓存大小时,会将整个数
据库高速缓存到内存中。在内存中高速缓存和运行数据库可实现巨大的性能优势。可以使
用两种模式:
• 整个数据库高速缓存:隐式默认和自动模式,在这种模式下,内部计算确定数据库是
否可以针对实例完全高速缓存。NOCACHE LOB 在整个数据库高速缓存模式下不进行
高速缓存,但是在强制整个数据库高速缓存模式下,即使 NOCACHE LOB 也会进行高
速缓存。

Oracle Database 12c:新功能 - 面向管理员 18-4


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

• 强制整个数据库高速缓存:整个数据库高速缓存和强制整个数据库高速缓存都不会
将数据强制存入/预取到内存中。工作量必须先访问数据,然后才能高速缓存数据。
它认为整个数据库符合整个高速缓存到缓冲区高速缓存的条件。这种模式要求 DBA
执行 ALTER DATABASE FORCE FULL DATABASE CACHING 命令。这种模式优
先于整个数据库高速缓存模式。要还原为传统高速缓存,请使用 ALTER DATABASE
NO FORCE FULL DATABASE CACHING 命令。

Oracle University and Error : You are not a Valid Partner use only

Oracle Database 12c:新功能 - 面向管理员 18-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

设置强制整个数据库高速缓存
实例 1 实例 2

缓冲区高速缓存 = 4.4G 缓冲区高速缓存 = 4.6G

Oracle University and Error : You are not a Valid Partner use only
SYSTEM EXAMPLE USERS

所用数据库空间 = 10g

• 所用数据库空间的逻辑大小 < 每个实例的缓冲区高速缓存


• 逻辑数据库大小 < 80%(∑ 所有实例的缓冲区高速缓存
大小)
SQL> STARTUP MOUNT
SQL> ALTER DATABASE FORCE FULL DATABASE CACHING; 备份控制文件
SQL> SELECT force_full_db_caching FROM v$database;

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

不同的配置
• 在 RAC 环境中,如果符合以下任何条件,则 DBA 可以使用强制整个数据库高速
缓存:
- 逻辑数据库大小(实际使用的空间)小于每个实例的专用缓冲区高速缓存。
- 对于适当分区的工作量(通过实例访问),逻辑数据库大小小于所有实例的缓
冲区高速缓存总大小的 80%。
强制整个数据库高速缓存模式影响 RAC 数据库的所有实例或不影响任何实例。
• 主数据库和备用数据库在强制整个数据库高速缓存模式下相互独立。ALTER
DATABASE FORCE FULL DATABASE CACHING 命令不会生成重做,并且主数据
库不会触发备用数据库进入或退出这种模式。
• 在多租户配置中,强制整个数据库高速缓存模式适用于整个多租户容器数据库
(container database, CDB),包括它的所有可插入数据库 (pluggable database,
PDB)。

Oracle Database 12c:新功能 - 面向管理员 18-6


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

建议
在 ALTER DATABASE FORCE FULL DATABASE CACHING 命令完成后,不会自动备份
控制文件。因此,强烈建议备份控制文件,以防必须恢复控制文件的旧版本。
要在任何控制文件恢复后确定强制整个数据库高速缓存模式的状态,请查看
V$DATABASE 视图的 FORCE_FULL_DB_CACHING 列。

Oracle University and Error : You are not a Valid Partner use only

Oracle Database 12c:新功能 - 面向管理员 18-7


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

监视整个数据库内存中高速缓存

1. 针对 FORCE_FULL_DB_CACHING 选择了数据库。
2. 数据库是否整个加载到缓冲区高速缓存中?

Oracle University and Error : You are not a Valid Partner use only
a. 当前缓冲区高速缓存大小是多少?
SQL> SELECT sum(cnum_set * blk_size) BC FROM X$KCBWDS; 12G

b. 存储的数据大小是多少?
SYSAUX SYSTEM EXAMPLE USERS TEMP
使用的空间 = 10g

∑(所有数据文件 - SYSAUX 数据文件 - TEMP 临时文件)


c. 设置 SGA_SIZE 或 DB_CACHE_SIZE,以使存储的数据
大小 < 80% 的缓冲区高速缓存:
SQL> ALTER SYSTEM SET SGA_TARGET = 13G SCOPE=SPFILE;

d. 重新启动实例。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

监视整个数据库高速缓存意味着定期检查数据文件中的段中存储的数据是否可以全部加载
到缓冲区高速缓存中。
计算加载数据库数据所需的缓冲区高速缓存大小,包括数据文件中的所有数据,但
SYSAUX 表空间和临时文件中存储的临时数据除外。
1. 使用诸如幻灯片中第一个示例中的 X$KCBWDS 视图显示当前的高速缓存大小。
2. 显示所有数据文件(SYSAUX 数据文件除外)中的所有段使用的总字节数。不包括
临时文件中存储的临时段。
SQL> SELECT sum(bytes) Tot_size FROM dba_segments
WHERE tablespace_name <> 'SYSAUX';
3. 验证缓冲区高速缓存大小的 80% 是否可以加载所有应用程序数据。
4. 如果不能加载,请将 SGA_TARGET 或 DB_CACHE_SIZE 设置为适当的值,并重新
启动实例。

Oracle Database 12c:新功能 - 面向管理员 18-8


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

自动大表高速缓存之前的内存中并行查询
确定正在查看 表非常适合内存中 将表的碎片读取到每个
SQL 语句
的表的大小。 并行执行。 节点的缓冲区高速缓存。

Oracle University and Error : You are not a Valid Partner use only
表非常小。 表非常大。

读取到任意节点上的
缓冲区高速缓存。 只有同一 RAC 节点上的
并行服务器将访问每个
片段。
始终使用从磁盘直接读取。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Oracle 11g 发行版 2 中,将 PARALLEL_DEGREE_POLICY 设置为 AUTO 时,查询可受


益于自动 DOP。Oracle 自动确定语句:
• 是否应该并行执行以及应该使用什么并行度 (degree of parallelism, DOP)
• 是否可以立即执行或者是否应该排入队列直到更多系统资源可用
• 是否可以利用聚集的集群内存(内存中并行查询或内存中 PX)
Oracle 首先确定查询所需的工作集(数据库块组)是否适合系统的聚集缓冲区高速缓存。
• 如果工作集不适合,则像以前一样通过直接路径 IO 访问对象。对象大小不得超过缓
冲区高速缓存的 80%。
• 如果工作集适合聚集的缓冲区高速缓存,则在节点间分布块并且块与该节点关联。
内存中 PX 使用缓冲区高速缓存中高速缓存的数据库段(例如表和索引)的数据。它可提
供高速 SQL 执行环境,从而消除存储性能的问题。

Oracle Database 12c:新功能 - 面向管理员 18-9


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

如果尚未高速缓存目标数据,响应速度可能比直接路径读取要慢,因为将数据从磁盘加载
到缓冲区高速缓存而产生的开销会导致性能有些下降。分布并高速缓存目标数据之后,内
存中 PX 可以在不访问存储系统的情况下扫描所有数据,因而产生非常高的性能。
如果 PX 处理的数据量多于缓冲区大小的容量,它将在生成 SQL 执行计划期间自动检测到
该问题,并改为使用直接路径读取。
使用分区表时,数据更倾向于高速缓存到缓冲区高速缓存,因为分区修剪会减少要使用的
实际数据大小。无需扫描不相关的分区,从而提高数据在缓冲区高速缓存 80% 内的几率。

Oracle University and Error : You are not a Valid Partner use only
只有同一 RAC 节点上的 PX 服务器将访问对象的每个分片,所有分片分散在所有缓冲区高
速缓存中。不会在实例间复制缺少的分区。

Oracle Database 12c:新功能 - 面向管理员 18-10


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12.1.0.2

自动大表高速缓存

• 提高大小无法完全存入缓冲区高速缓存的大对象的内存
中 PX 性能

Oracle University and Error : You are not a Valid Partner use only
– 消除大对象的磁盘读取
– 促进大对象在数据仓库环境中的高效高速缓存
– 将扫描的对象存储在大表高速缓存中而非缓冲区高速
缓存中
— 非分区表
— 分区表的分区和子分区
• 使用不同的高速缓存替换算法
替换基础 替换级别
9i、10g、11g、12.1.0.1 基于访问 块级别
12.1.0.2 基于温度 对象级别

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

自动大表高速缓存可以增强 Oracle DB 在单实例和 Oracle RAC 环境中的内存中并行查


询功能。缓冲区高速缓存的一个可选部分(称为“大表高速缓存”)用于存储并行表扫
描的数据。
如果一个大表的大小近似于所有实例的大表高速缓存的总大小,则该表将进行分区并高
速缓存或大部分高速缓存在所有实例上。借助内存中 PX,这样可以消除对表进行查询的
大多数磁盘读取,或者数据库可以智能地仅针对表中不适合大表高速缓存的那些部分从
磁盘读取。
使用自动 DOP 的并行查询扫描可以使用不同的高速缓存替换算法。当一个表不适合在内
存中时,数据库将根据访问模式确定要高速缓存的缓冲区。这样可以为大表提供高效的
高速缓存,即使它们无法整个存入缓冲区高速缓存也是如此。如果大表高速缓存无法高
速缓存要扫描的所有表,则仅高速缓存访问最频繁的表,并自动通过直接读取来读取其
余的表。
大表高速缓存与缓冲区高速缓存相集成,使用基于温度的对象级替换算法管理大表高速
缓存内容,不同于缓冲区高速缓存使用的基于访问的块级 LRU 算法。

Oracle Database 12c:新功能 - 面向管理员 18-11


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

配置自动大表高速缓存

配置数据库缓冲区高速缓存的一部分:
• PARALLEL_DEGREE_POLICY=AUTO 或 ADAPTIVE

Oracle University and Error : You are not a Valid Partner use only
• DB_BIG_TABLE_CACHE_PERCENT_TARGET=40
缓冲区高速缓存 = 10g
大表高速缓存 = 4G • 选择“热”对象:
表 HR.EMPLOYEES:热对象 30°
扫描

温度
表 SH.SALES:热对象 80°
表 SH.BIG:热对象 40°

当大表高速缓存中需要空间时,
OLTP

LRU
HR.EMPLOYEES 表将替换为
温度更高的新对象。

• 避免发生崩溃:高速缓存部分对象

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

通过以下途径改进了对大表进行查询的性能:
• 选择性地高速缓存“热”对象:每次访问一个对象,Oracle DB 都会提高该对象的
温度。大表高速缓存中的对象只能替换为温度高于自身的另一个对象。在幻灯片中
提供的示例中,当缓冲区高速缓存中或大表高速缓存中某个对象的温度高于
HR.EMPLOYEES 表且再也没有空间来加载这两个对象时,HR.EMPLOYEES 表将替
换为更热的对象。
• 避免发生崩溃:当对象无法整个高速缓存时,将高速缓存部分对象。例如,如果某
个常用表只有 95% 能够存入内存,则数据库可能选择将 5% 的块留在磁盘上,而不
是将块循环读入内存而逐出最近使用的块。
要使用自动大表高速缓存,必须启用大表高速缓存:
• 将 DB_BIG_TABLE_CACHE_PERCENT_TARGET 初始化参数设置为非零值。该值表
示缓冲区高速缓存的一定百分比。默认值为 0(禁用),上限为 90(%),为除表扫描
以外的用途保留至少 10% 的缓冲区高速缓存。
• 将 PARALLEL_DEGREE_POLICY 设置为 AUTO 或 ADAPTIVE。

Oracle Database 12c:新功能 - 面向管理员 18-12


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle Database 12c:新功能 - 面向管理员 18-13


每个实例的内存,并且无需分区,而是让每个实例都有所有数据库块的一个副本。
关联性,从而禁用自动大表高速缓存。这会告知数据库,数据库足够小,可以存入
确保已禁用强制整个数据库高速缓存。强制整个数据库高速缓存可以禁用内存中 PX

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用自动大表高速缓存

DB_CACHE_SIZE=100G
DB_BIG_TABLE_CACHE_PERCENT_TARGET=60 60G

Oracle University and Error : You are not a Valid Partner use only
→ 大表扫描使用 60G。
40G
→ OLTP 使用 40G。

工作量更改… Î 增加大表高速缓存
SQL> ALTER SYSTEM SET db_big_table_cache_percent_target=80;

DB_BIG_TABLE_CACHE_PERCENT_TARGET=80
80G
→ 大表扫描使用 80G。
→ OLTP 使用 20G。 20G

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

设置 DB_BIG_TABLE_CACHE_PERCENT_TARGET 参数时,应该考虑工作量混合:多少
工作量针对 OLTP;插入、更新和随机访问;多少工作量涉及表扫描。由于数据仓库工作
量通常执行大表扫描,因此可能考虑对于数据仓库给予大表高速缓存部分较大百分比的缓
冲区高速缓存空间。
如果工作量更改,该参数会动态地更改。根据到达目标的当前工作量,更改会花费一些时
间,因为那时可能正在使用缓冲区高速缓存内存。

Oracle Database 12c:新功能 - 面向管理员 18-14


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

监视自动大表高速缓存

下面两个视图提供了有关自动大表高速缓存的详细信息:

Oracle University and Error : You are not a Valid Partner use only
• V$BT_SCAN_CACHE
• V$BT_SCAN_OBJ_TEMPS

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

添加了数据仓库加载和扫描缓冲区的对象级附加统计信息,表示特定实例上的对象上的并
行查询 (parallel query, PQ) 扫描数量。
V$BT_SCAN_CACHE 视图提供有关自动大表高速缓存的信息:
• BT_CACHE_ALLOC:大表高速缓存部分与缓冲区高速缓存的当前比率
• BT_CACHE_TARGET:大表高速缓存部分与缓冲区高速缓存的目标比率
• OBJECT_COUNT:大表高速缓存部分跟踪的对象数量
• MEMORY_BUF_ALLOC:大表高速缓存部分分配给对象的内存缓冲区数量
• MIN_CACHED_TEMP:大表高速缓存部分当前高速缓存的对象的最低温度
• CON_ID:数据库为多租户容器数据库时容器 ID 的标识符。如果数据库是非容器数
据库,则 CON_ID 始终为 0

Oracle Database 12c:新功能 - 面向管理员 18-15


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

V$BT_SCAN_OBJ_TEMPS 视图提供了详细信息:
• TS#:对象所在的表空间
• DATAOBJ#:数据对象编号 (objd)
• SIZE_IN_BLKS:在该实例上扫描的对象大小(块数)
• TEMPERATURE:该对象的温度
• POLICY:该对象的高速缓存策略

Oracle University and Error : You are not a Valid Partner use only
- MEM_ONLY:该对象将整个高速缓存在内存中。
- MEM_PART:该对象将部分高速缓存在内存中,某一部分仍在磁盘上而不进行
高速缓存。
- DISK:该对象完全不会为了扫描而高速缓存在内存中或闪存中。
• CACHED_IN_MEM:在内存中为该对象高速缓存/分配的块数
• CON_ID:数据库为多租户容器数据库时容器 ID 的标识符。如果数据库是非容器数
据库,则 CON_ID 始终为 0

Oracle Database 12c:新功能 - 面向管理员 18-16


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED





使用自动大表高速缓存
说明两种缓冲区替换算法
在本课中,您应该已经学会:

描述自动大表高速缓存功能
小结

使用整个数据库内存中高速缓存
描述整个数据库内存中高速缓存功能

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 18-17


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

练习 18:概览

• 18-1:使用自动大表高速缓存功能

Oracle University and Error : You are not a Valid Partner use only
• 18-2:设置和监视强制整个数据库高速缓存

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

这些练习未遵循所介绍的两项功能的顺序,原因是允许跳过大表的重新创建。之前有关内
存中列存储的练习创建了一个非常大的表,自动大表高速缓存可以重用该表。

Oracle Database 12c:新功能 - 面向管理员 18-18


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SQL 优化增强功能

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle Database 12c 新增功能和增强功能


Enterprise Manager Enterprise Manager Enterprise Manager
Cloud Control Database Express
其他工具
和其他工具

基础功能 CDB 和 PDB 创建 CDB 和 PDB 管理


CDB 和 PDB

Oracle University and Error : You are not a Valid Partner use only
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录

安全性 统一审计 权限分析 数据编写

HA RMAN

易管理性 DB 操作 实时 ADDM 比较时段 ADDM ADR


12.1.0.2 12.1.0.2

内存中列存储 整个数据库内存中高速缓存
性能 12.1.0.2
自动大表高速 SQL 优化 资源管理器 索引、表
缓存

数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

有多项优化程序和统计信息增强功能以及一项新的 SQL 计划指令功能。

Oracle Database 12c:新功能 - 面向管理员 19-2


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

课程目标

学完本课后,应能完成以下工作:
• 描述自适应 SQL 计划管理

Oracle University and Error : You are not a Valid Partner use only
• 描述 SQL 管理库的增强功能
• 使用动态计划改进查询性能
• 描述自适应执行计划的重新优化
• 使用 SQL 计划指令生成更好的计划
• 描述统计信息搜集性能的改进
• 使用新的直方图
• 描述扩展统计信息的增强功能并检测特定工作量的
有用列组
• 描述动态采样的增强功能

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

请参阅其他信息资源:
• Oracle 学习库中的“Oracle Database 12c New Features Demo Series”演示:

Oracle Database 12c:新功能 - 面向管理员 19-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED






自适应执行计划
自适应 SQL 计划管理
本课由三个主要部分组成:

优化程序统计信息管理
自适应执行计划
自适应 SQL 计划管理

优化程序统计信息管理
主题安排

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 19-4


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

SQL 计划基线:体系结构
SYSAUX
SQL 管理库

语句日志

Oracle University and Error : You are not a Valid Partner use only
计划历史记录
计划历史记录
计划基线
计划基线
GB
GB GB GB
GB SQL
HJ HJ … HJ

HJ HJ
GB
HJ … HJ 概要文件
重复的 HJ HJ HJ
HJ HJ
SQL 语句

计划历史记录

计划基线
GB
GB GB
HJ HJ … HJ

HJ
HJ HJ
自动 SQL
优化任务

在集成到基线前验证计划

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

SQL 计划管理 (SPM) 功能引入了必要的基础结构和服务,以支持对新计划进行计划维护


和性能验证。
对于多次执行的 SQL 语句,优化程序会为单个 SQL 语句维护一个计划历史记录。优化
程序通过维护语句日志来标识重复的 SQL 语句。如果对某个已记录的 SQL 语句再次进
行语法分析或再次执行该语句,则将该 SQL 语句标识为重复语句。将某个 SQL 语句标
识为重复 SQL 之后,由优化程序生成的各种计划将作为包含相关信息(如 SQL 文本、
大纲、绑定变量和编译环境等)的计划历史记录得以维护;优化程序将使用这些信息来
复制执行计划。
作为自动识别重复 SQL 语句(通过将参数
optimizer_capture_sql_plan_baselines 设置为 TRUE)的一种替代或补充方
式,系统也支持手动植入一系列 SQL 语句的计划。
计划历史记录包含优化程序在某段时间内为 SQL 语句生成的不同计划。但是,只有计划
历史记录中的部分计划可以被接受并得以使用。例如,正常情况下不会使用优化程序生成
的新计划,除非该计划通过验证得知不会导致性能退化。自动 SQL 优化在维护窗口中作
为自动化任务运行时,就会自动完成计划验证。

Oracle Database 12c:新功能 - 面向管理员 19-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

自动 SQL 优化任务仅针对高负载的 SQL 语句。为此,该任务会自动实施一些操作,例


如,使成功的已验证计划成为已接受的计划。一系列可接受的计划组成了一个 SQL 计划
基线。为一个 SQL 语句生成的第一个计划很显然是可接受的计划,因此,该计划形成了
原始的计划基线。优化程序后来发现的任何新计划都包含在计划历史记录中,但最初都不
包含在计划基线中。
语句日志、计划历史记录和计划基线都存储在 SQL 管理库 (SMB) 中;该库还包含 SQL
概要文件。SMB 是数据库字典的一部分,存储在 SYSAUX 表空间中。SMB 使用自动空间

Oracle University and Error : You are not a Valid Partner use only
管理(例如,定期清除未使用的计划)。可以对 SMB 进行配置,以更改计划保留策略和
设置空间大小限制。
注:如果数据库实例正常运行,但 SYSAUX 表空间为 OFFLINE,则优化程序将无法访问
SQL 管理对象。这可能会影响某些 SQL 工作量的性能。

Oracle Database 12c:新功能 - 面向管理员 19-6


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

SQL 计划管理:概览

SQL 计划管理可以确保运行时性能不因执行计划的更改而
下降。

Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

SQL 计划管理 (SQL Plan Management, SPM) 可以确保运行时性能不因执行计划的更改


而下降。它有两个主要目标:
• 通过提供捕获、选择和演化 SQL 计划信息的组件,防止 SQL 语句的执行计划突然
更改导致性能下降。
• 通过适应数据库系统更改实现性能改进。
使用 SPM 时,优化程序将自动管理执行计划并确保仅使用已知或已验证的计划。如果为
SQL 语句找到了一个新计划,则在数据库验证了该计划的性能与当前计划相当或更好时,
才会使用它。验证是通过 Oracle Enterprise Manager (EM) 或通过在 Oracle Database
11g 中运行 DBMS_SPM.EVOLVE_SQL_PLAN_BASELINES 执行的手动过程。验证是通过
在 Oracle Database 11g 中运行 DBMS_SPM.EVOLVE_SQL_PLAN_BASELINES 的自动
SQL 优化 (Automatic SQL Tuning, AST) 作业执行的自动过程。
SPM 的组成部分包括 SQL 计划基线捕获、SQL 计划基线选择和 SQL 计划基线演化。可
以采用两种方式以执行计划植入或填充 SQL 管理库 (SQL management base, SMB):
• 自动捕获执行计划(从 Oracle Database 11g 开始提供)
• 批量加载执行计划或先前存在的 SQL 计划基线

Oracle Database 12c:新功能 - 面向管理员 19-7


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

自适应 SQL 计划管理

• 新的演化自动任务在夜间维护窗口运行。

Oracle University and Error : You are not a Valid Partner use only
• 它会对所有未接受的计划进行排名,并为其运行演化过
程。新发现的计划排名最高。
• 执行较差的计划在 30 天内不重试。此后,仅当语句处
于活动状态时,才会重试这些计划。
• 新任务为 SYS_AUTO_SPM_EVOLVE_TASK。
• 有关任务的信息在 DBA_ADVISOR_TASKS 中。
• 使用 DBMS_SPM.REPORT_AUTO_EVOLVE_TASK 可查
看自动作业的结果。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

从 Oracle Database 12c 开始,数据库可使用自适应 SPM。有了自适应 SQL 计划管理,


DBA 再也不必为未接受的计划手动运行验证或演化过程。他们可以在数天或数周后返回
查看在每个夜间维护窗口中演化了哪些计划。启用 SPM 演化指导后,将在夜间维护窗口
中为有未接受计划的所有 SQL 语句运行验证或演化过程。将对未接受的所有计划进行排
名,并为其运行演化过程。新发现的计划排名最高。
如果未接受的计划比 SQL 计划基线中接受的现有计划执行得好,则自动接受该计划,该
计划变为可由优化程序使用。
验证完成后,将生成一个永久性报告,详细说明与接受的计划性能相比,未接受的计划性
能如何。
由于演化过程现在是 AUTOTASK,因此 DBA 也可以在最后调度自己的演化作业,并使用
DBMS_SPM.REPORT_AUTO_EVOLVE_TASK 查看自动作业的结果。

Oracle Database 12c:新功能 - 面向管理员 19-8


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

自动演化 SQL 计划基线

Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

SPM 演化指导是用于演化最近添加到 SQL 计划基线中的计划的 SQL 指导。该指导通过


消除手动演化任务来简化计划演化。
DBMS_SPM 程序包中引入的新函数对指导任务基础结构起作用。使用新函数(例如
DBMS_SPM.CREATE_EVOLVE_TASK、DBMS_SPM.EXECUTE_EVOLVE_TASK 等等),
数据库管理员 (database administrators, DBA) 可以创建任务、演化任务中的一个或多个
计划、提取任务报告并实施任务结果。任务可执行多次,给定任务的报告可提取多次。
SPM 可调度演化任务并重新运行演化任务。还有一个实施任务结果的函数,在这种情况
下,将接受当前未接受的计划。
使用该任务基础结构可使演化的报告永久存储在指导框架资料档案库中。还允许
Enterprise Manager 调度 SQL 计划基线演化任务并按需提取报告。除 TEXT 之外,新函
数还支持 HTML 和 XML 报告。在 Oracle Database 12c 中,DBMS_SPM 中基于任务的新
函数保留 time_limit 的指定值作为任务参数。其默认值与 Oracle Database 11g 中的
相同。当 ACCEPT_PLANS 为 true(默认值)时,SQL 计划管理将自动接受任务建议的
所有计划。当设置为 false 时,任务将验证计划并生成发现结果的报告,但是不会演化计
划。用户可使用相应的函数查看报告,然后执行新的实施函数以接受成功的计划。

Oracle Database 12c:新功能 - 面向管理员 19-9


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SQL 管理库增强功能

12c 之前版本
• 在 Oracle Database 12c 之前,

Oracle University and Error : You are not a Valid Partner use only
DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE 通过
以基线编译语句显示执行计划。
• 在 Oracle Database 12c 中,将新计划添加到 SQL 语 12c

句的计划历史记录中时,计划行也会存储在 SQL 管理
库 (SQL management base, SMB) 中。执行
DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE 后,
可从 SMB 提取计划数据。
• 无法复制计划时更易诊断。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Oracle Database 11g 中,DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE 通过以基


线编译语句(主要通过使用大纲)显示执行计划。在接受添加到日志历史记录中的新计划
之前,SQL 计划管理 (SQL Plan Management, SPM) 不会存储它们。当客户升级到
Oracle Database 12c 时,将在计划执行期间填充所有计划行。
从 Oracle Database 12c 发行版 1 开始,SMB 可以存储添加到 SQL 语句的计划历史记录
中的新计划的计划行。DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE 函数可以从
SMB 提取并显示计划。对于在 Oracle Database 12c 发行版 1 (12.1) 之前创建的计划,
该函数必须编译 SQL 语句并生成计划,因为 SMB 不存储这些行。

Oracle Database 12c:新功能 - 面向管理员 19-10


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:a
结果。

b. 错
a. 对
测验

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 19-11


调用 report_evolve_task 函数可以显示演化任务的

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED




自适应执行计划
自适应 SQL 计划管理

优化程序统计信息管理
课程主题安排

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 19-12


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

自适应执行计划

• 由于运行时条件指示优化程序估计值不准确,因此在执
行过程中查询计划会发生更改。

Oracle University and Error : You are not a Valid Partner use only
• 所有自适应执行计划都依赖于在查询执行期间收集的统
计信息。
• 自适应计划技术有两个:
– 动态计划
– 重新优化
• 将 OPTIMIZER_FEATURES_ENABLE 设置为 12.1.0.1
或更高版本,并且将
OPTIMIZER_ADAPTIVE_REPORTING_ONLY 初始化参
数设置为默认值 FALSE 时,数据库会使用自适应执行
计划。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

通过自适应执行计划功能,优化程序可以在运行时自动适应性能较差的执行计划,并防止
后续执行操作选择性能差的计划。优化程序会测量其所选计划,这样,如果在运行时优化
程序的估计值不是最佳值,则可以检测到该计划。然后,该计划可以自动适应实际条件。
自适应计划是指在证实优化程序估计值不准确时执行优化操作后进行更改的计划。
优化程序可根据语句执行过程中收集的统计信息来适应计划。所有自适应机制都可以执行
与最初在硬性语法分析过程中确定的计划不同的计划。该机制可以改进查询处理引擎(编
译和执行)的功能,以生成更好的执行计划。
自适应计划技术有两个:
• 动态计划:动态计划会在语句执行过程中从子计划中进行选择。对于动态计划,优
化程序必须确定要包含在动态计划中的子计划、选择某个子计划要收集的统计信息
以及此选项的阈值。
• 重新优化:与之相反,重新优化会在当前执行过程之后更改执行计划。对于重新优
化,优化程序必须确定在计划的某个点要收集的统计信息,以及可行的重新优化
时间。
注:OPTIMIZER_ADAPTIVE_REPORTING_ONLY 用于控制自适应优化的仅报告模式。
如果将其设置为 TRUE,则自适应优化会在仅报告模式下运行,该模式会搜集自适应优化
所需的信息,但不会执行任何操作来更改计划。

Oracle Database 12c:新功能 - 面向管理员 19-13


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

动态计划

• 最终决策基于在执行期间收集的统计信息。

Oracle University and Error : You are not a Valid Partner use only
• 替代子计划已预先计算并存储在游标中。
• 会在计划的关键点插入统计信息收集器。
• 如果统计信息证实超出范围,则可以交换子计划。
• 这要求在临近交换点时进行缓冲以避免将行返回给用户。
• 仅联接方法和分布方法可以更改。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

动态计划是具有不同内置计划选项的执行计划。在第一次执行期间,优化程序会在特定
子计划生效前最终决策要使用的具体选项。优化程序根据执行过程中到目前为止所观察
到的结果做出选择。动态计划使得语句的最终计划不同于默认计划,因而可能提高查询
的性能。
子计划是计划的一部分,优化程序可在运行时切换到子计划作为替代。
在语句执行期间,统计信息收集器会缓冲部分行。统计信息收集器之前的计划部分可以
具有替代子计划,每一个子计划均对收集器所返回可能值的某个子集有效。
通常,子计划的值集是一个范围。如果统计信息是非默认计划的某个子计划中的有效值,
则优化程序会选择该替代子计划。优化程序选择子计划后,将禁用缓冲。统计信息收集
器会停止收集行,而改为传递这些行。当后续执行子游标时,优化程序将禁用缓冲并选
择相同的最终计划。
使用动态计划,执行计划将适应优化程序糟糕的计划选择,可以在第一次执行期间做出
正确的决策。
注:V$SQL IS_RESOLVED_ADAPTIVE_PLAN 中新增的列指示最终计划是否为默认计
划。通过动态计划发现的信息将作为 SQL 计划指令保存。

Oracle Database 12c:新功能 - 面向管理员 19-14


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

动态计划:自适应过程

SQL> SELECT s.cust_id, c.cust_last_name


FROM sh.sales s, sh.customers c
WHERE s.cust_id = c.cust_id;

Oracle University and Error : You are not a Valid Partner use only
行计数 统计信息
918843
扫描 sales 获取行计数缓冲行 收集器

动态部分
禁用缓冲
最终计划 默认计划
散列联接 子计划
行计数 > 10 行计数 < 10
散列联接 嵌套循环联接

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

本代码示例显示了 sales 和 customers 表的联接。该语句的动态计划显示了两个可能的计


划,一个使用嵌套循环,另一个使用散列联接。
下图显示了自适应过程。对于本幻灯片中给定的查询,默认计划的动态部分包含两个子计
划,每个子计划使用不同的联接方法。收集器检索行计数统计信息,并最多缓冲 10 行。
如果行计数低于 10,则优化程序会选择嵌套循环;否则,优化程序会选择散列联接。由于
sales 表中的行计数超过了 10,优化程序会选择散列联接、停止缓冲并确定最终计划。

Oracle Database 12c:新功能 - 面向管理员 19-15


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

执行后使用散列联接。此信息显示在计划输出表中。
动态计划:示例

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

执行计划的“注释”部分表明计划是否为动态计划:这是一个动态计划。

Oracle Database 12c:新功能 - 面向管理员 19-16


具有动态计划的语句显示了两个可能的计划:一个计划在执行前使用嵌套循环,另一个在

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

重新优化:统计信息反馈

• 统计信息反馈(以前称为“基数反馈”)是在 Oracle

Oracle University and Error : You are not a Valid Partner use only
Database 11g 发行版 2 中引入的。
• 统计信息反馈对于要处理的数据卷在一段时间内处于稳
定状态的查询十分有用。
• 在查询执行期间,会将优化程序估计值与执行统计信息
进行比较:如果二者差异很大,将选择新的计划用于后
续执行。

注:CURSOR_SHARING 参数为 EXACT 或 FORCE。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

统计信息反馈(以前称为“基数反馈”)是在 Oracle Database 11g 发行版 2 中引入的。


第一次执行完成后,此功能将执行非常有限的重新优化。此功能自动针对优化程序在计划
中估计的基数不正确的查询来改进计划。优化程序可能会由于各种原因错误估计基数,例
如统计信息缺失或不准确,或者谓词过于复杂。统计信息反馈不用于易失表。但对于要处
理的数据卷在一段时间内处于稳定状态的查询十分有用。
在下列情况下,优化程序可能会为游标启用基数监视反馈:表没有统计信息、表上存在
多个连接或分离过滤谓词以及谓词包含优化程序无法准确计算其选择性估计值的复杂运
算符。
该功能的运行方式如下:在查询执行期间,比较优化程序估计值和执行统计信息。如果二
者差异很大,将选择新的计划用于后续执行。在执行期间,会针对看到的实际数据卷和数
据类型搜集统计信息。如果与原始优化程序估计值显著不同,则在下次执行期间将使用执
行统计信息对语句进行硬性语法分析。仅监视语句一次。如果一开始语句并未显示显著差
异,则将来也不会变化。只会检查各个表的基数。信息仅存储在游标中,如果游标过期则
会丢失。

Oracle Database 12c:新功能 - 面向管理员 19-17


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

统计信息反馈:监视查询执行

SQL> SELECT /*+ gather_plan_statistics */ product_name

Oracle University and Error : You are not a Valid Partner use only
FROM order_items o, product_information p
WHERE o.unit_price = 15
AND quantity > 1
AND p.product_id = o.product_id;

初始基数估计值缩减了
十分之一还多。

谓词信息

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

监视代码框中给定查询的执行。该查询包含等式过滤谓词和非等式过滤谓词的组合,会导
致在应用这些过滤后错误估计 order_items 表的基数。优化程序选择了给定计划,您
可以从执行统计信息(计划的估计值列 E-Rows 和实际值列 A-Rows)中看出,低估了
order_items 的基数。

Oracle Database 12c:新功能 - 面向管理员 19-18


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

统计信息反馈:重新分析语句

SQL> SELECT /*+ gather_plan_statistics */ product_name

Oracle University and Error : You are not a Valid Partner use only
FROM order_items o, product_information p
WHERE o.unit_price = 15
AND quantity > 1
AND p.product_id = o.product_id;

基数估计值现在正确,并将触发联接
方法更改。

统计信息反馈显示在计划的注释部分中。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

执行统计信息用于在第二次执行代码框中的查询时重新分析语句。第二次执行期间,实际
基数将反馈给优化程序。
这次优化程序将获取正确的基数估计值,然后优化程序将显示一个不同的计划。

Oracle Database 12c:新功能 - 面向管理员 19-19


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

自动重新优化

• 在后续执行 SQL 语句时,优化程序会自动更改计划。

Oracle University and Error : You are not a Valid Partner use only
• 联接统计信息也包括在内。
• 将持续监视语句以查看每次执行时统计信息是否有波动。
• 对于包含绑定变量的语句,将使用自适应游标共享。
• 在 V$SQL 中添加了 IS_REOPTIMIZABLE 列。
• 在执行时发现的信息将作为 SQL 计划指令保存。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在重新优化时,优化程序仅在执行后续语句时调整计划。延迟优化可以修复任何不太理想
的计划,这些计划是根据不正确的优化程序估计值选择的,例如不太理想的分布方法或错
误的并行度选项。在第一次执行结束时,优化程序获得一组更完整的统计信息,此信息可
以改善将来的计划选择。可能会多次重新优化某个查询,每次都会创建更大且更精确的
一组优化程序调整值。
重新优化可修复动态计划无法解决的计划问题。然而,动态计划有助于对计划进行相对局
部的更改,但不适合进行某些全局计划更改。例如,联接顺序低效的查询可能会导致性能
不太理想,但无法在执行期间调整联接顺序。在这种情况下,优化程序会自动考虑重新优
化。对于重新优化,优化程序必须决定要收集的具体统计信息以及收集时间。
自 Oracle Database 12c 起,也包括联接统计信息。不断监视语句,以验证统计信息在不
同的执行期间是否波动。对于包含绑定变量的语句,将使用自适应游标共享。该功能可以
改进查询处理引擎(编译和执行)的功能,以生成更好的执行计划。

Oracle Database 12c:新功能 - 面向管理员 19-20


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

优化程序将按以下方式使用统计信息:
• 统计信息收集器及其关联的优化程序估计值可确定能否选择自动重新优化。如果统
计信息与估计值之间的差异超过阈值,则优化程序将查找替换计划。
• 优化程序将某个查询标识为重新优化候选项后,数据库会将收集的所有统计信息提
交至优化程序。
注:IS_REOPTIMIZABLE 列显示与该子游标相匹配的下一次执行是否将触发重新优化,
或者子游标是否包含重新优化信息,但是不会触发重新优化,因为该游标是在报告模式下

Oracle University and Error : You are not a Valid Partner use only
编译的。

Oracle Database 12c:新功能 - 面向管理员 19-21


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:a
b. 错
a. 对
程中查询计划会发生更改。
测验

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 19-22


由于运行时条件指示优化程序估计值不准确,因此在执行过

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED




自适应执行计划
自适应 SQL 计划管理

优化程序统计信息管理
课程主题安排

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 19-23


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SQL 计划指令

• SQL 计划指令是指优化程序可用于生成更好的计划的
其他信息和指令:

Oracle University and Error : You are not a Valid Partner use only
– 收集缺少的统计信息。
– 创建列组统计信息。
– 执行动态采样。
• 指令可用于多条语句:
– 指令在查询表达式中进行收集。
• 这些指令会永久保留在 SYSAUX 表空间的磁盘中。
• 指令是自动维护的:
– 在编译或执行过程中根据需要创建:
— 缺少统计信息,基数估计错误
– 如果在一年后未使用,则会清除。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在以前的发行版中,数据库将编译和执行统计信息存储在并非永久保留的共享 SQL 区域
内。从 Oracle Database 12c 开始,数据库可以使用 SQL 计划指令,该指令是附加信息
和说明,优化程序可以使用它们生成更优的计划。例如,SQL 计划指令可能会指示优化
程序收集缺失的统计信息、创建列组统计信息或指定动态采样。在 SQL 编译或执行过程
中,数据库会分析缺少统计信息而导致优化程序错误估计基数的查询表达式以创建 SQL
计划指令。优化程序生成执行计划后,该指令会向优化程序提供有关在计划中引用的对象
的其他信息。
SQL 计划指令并不与特定的 SQL 语句或 SQL ID 关联。优化程序可对大体相同的 SQL
语句使用 SQL 计划指令,因为 SQL 计划指令已在查询表达式中定义。例如,指令可以
帮助优化程序处理采用相似模式的查询,例如,除选择列表项之外都相同的基于 Web 的
查询。数据库会将 SQL 计划指令永久存储在 SYSAUX 表空间中。生成执行计划时,优化
程序可使用 SQL 计划指令获取有关在计划中访问的对象的详细信息。
指令会自动进行维护,可根据需要进行创建,如果一年之后未使用,则会清除。
可在 DBA_SQL_PLAN_DIR_OBJECTS 中监视指令。SQL 计划指令可通过将编译和执行
统计信息永久保留在 SYSAUX 表空间中以供多个 SQL 语句使用来提高计划准确性。

Oracle Database 12c:新功能 - 面向管理员 19-24


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

创建 SQL 计划指令

数据字典
高速缓存

Oracle University and Error : You are not a Valid Partner use only
库高速缓存
专用
共享 SQL 区域 SQL 区
游标:SELECT * FROM customers…
2 优化程序
指令:将 DS 用于城市和国家/地区列的
基数估计值
确定计划。

SELECT *
3 执行后,发现基数估计值 指令会定期永久
错误,建议使用 DS 提供 保留在 SYSAUX 表
FROM customers 帮助。 空间的磁盘中
WHERE city='LA' (每 15 分钟)。
AND country='USA';
SYSAUX 表空间
1 提交了 SQL 语句。

扩展 绑定 统计信息 Sql_id

SQL 指令

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

幻灯片显示了如何创建 SQL 指令。首先提交 SQL 语句,然后优化程序确定计划。执行


后,发现基数估计值错误时,建议使用动态采样 (dynamic sampling, DS) 提供帮助。这
些指令会永久保留在 SYSAUX 表空间的磁盘中。

Oracle Database 12c:新功能 - 面向管理员 19-25


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用 SQL 计划指令

优化程序将城市和国家/地区
列的列组创建添加到接下来在 共享池
CUSTOMERS 表中搜集的统计

Oracle University and Error : You are not a Valid Partner use only
信息。 数据字典 结果高速缓存 保留池
高速缓存
7
SELECT email
FROM customers 库高速缓存
专用
WHERE city='Boston' 共享 SQL 区域 SQL 区
AND country='USA'; 游标:SELECT email FROM
6 customers …

4 提交了新的 SQL 语句。 优化程序在


指令帮助下
确定计划。

SYSAUX 表空间
5 优化程序检查指令,
找到一条针对城市
和国家/地区列的 扩展 绑定 统计信息 Sqlid
指令。
SQL 指令

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

提交新的 SQL 语句后,优化程序将检查指令,找到一条针对城市和国家/地区列的指令。


优化程序获得指令后,将在指令帮助下确定计划。优化程序将城市和国家/地区列的列组
创建添加到接下来在 CUSTOMERS 表中搜集的统计信息。

Oracle Database 12c:新功能 - 面向管理员 19-26


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SQL 计划指令:示例

Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

本幻灯片显示了 SQL 指令示例。


可以使用 DBA_SQL_PLAN_DIR_OBJECTS 视图监视 SQL 计划指令。
计划显示功能的“注释”部分也为您显示了有关 SQL 计划指令的信息,例如,用于该语
句的一个 SQL 计划指令。

Oracle Database 12c:新功能 - 面向管理员 19-27


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

批量加载的联机统计信息搜集

• 在 Oracle Database 12c 中,数据库将在下面几种批量

Oracle University and Error : You are not a Valid Partner use only
加载期间自动搜集表统计信息:
– CREATE TABLE AS SELECT
– INSERT INTO ... SELECT 空表中 - 使用直接路径
插入。
• 加载后立即获得统计信息。
• 无需额外的表扫描即可搜集统计信息。
• 使用 CTAS(MV 刷新)的所有内部维护操作都将受益。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

使用联机统计信息搜集功能,将在批量加载操作(例如,CREATE TABLE AS SELECT


操作或对空表的 INSERT INTO ... SELECT 操作)过程中自动创建统计信息。
有了联机统计信息搜集功能,在发生批量数据加载后无需手动搜集统计信息。它的行为
方式类似于使用 CREATE INDEX 或 REBUILD INDEX 命令时搜集统计信息。使用
CREATE TABLE AS SELECT (CTAS)((MV) 实体化视图刷新)的所有内部维护操作都
将受益。在数据仓库中,常常需要将大量数据加载到数据库中。例如,销售记录数据仓库
可能在夜间加载销售数据,在这种情况下,联机统计信息搜集很有用。
Oracle Database 12c 现在自动搜集统计信息,主要优点是改进了批量加载操作的性能和
易管理性,方法是消除了加载后搜集统计信息的用户干预,还删除了独立统计信息搜集操
作所需的额外全表扫描。
搜集联机统计信息时,数据库不会搜集索引统计信息或直方图。如果需要索引统计信息或
直方图,Oracle 建议在批量加载后运行 DBMS_STATS.GATHER_TABLE_STATS,并将选
项参数设置为 GATHER AUTO。在这种情况下,GATHER_TABLE_STATS 仅搜集缺少的统
计信息,因此将搜集索引统计信息或直方图,而不包括在批量加载期间收集的表和列统计
信息。

Oracle Database 12c:新功能 - 面向管理员 19-28


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle Database 12c 中的并发统计信息增强功能

• 自动统计信息搜集作业使用并发操作。

Oracle University and Error : You are not a Valid Partner use only
• 通过仔细规划资源使用率上限可防止因并发搜集统计
信息而导致系统使用过度。
• 允许并发搜集索引统计信息。
• 允许并发搜集多个分区表的统计信息。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Oracle Database 12c 之前,自动统计信息搜集作业一次搜集一个段的统计信息。现在,


可以使用并发操作。
在 Oracle Database 12c 中,可以并发运行多个统计信息搜集任务,这样可以通过提高资
源利用率(尤其是在多 CPU 系统中)来显著缩短统计信息搜集时间。
利用智能调度机制可以在资源可用的限度内最大程度地提高并发度,例如,允许并发搜集
多个分区表的统计信息。

Oracle Database 12c:新功能 - 面向管理员 19-29


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

全局临时表的统计信息

• 在 Oracle Database 12c 中,对于每个会话,全局临时表

Oracle University and Error : You are not a Valid Partner use only
可以有一组不同的优化程序统计信息。
• GLOBAL_TEMP_TABLE_STATSv 程序包的 DBMS_STATS
首选项控制是否为全局临时表搜集会话或共享统计信息。
• DBMS_STATS 将更改提交到特定于会话的全局临时表,
而不是特定于事务处理的全局临时表。
• 使用特定于会话的统计信息的游标不会由其他会话共享。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

全局临时表是一个特殊的表,在特定持续时间内存储中间会话专用数据。在 Oracle
Database 12c 之前,与永久表一样,对于出现的所有全局临时表,只有一组统计信息
可用。
从 Oracle Database 12c 开始,可以为全局临时表维护会话专用统计信息。可以选择在
一个会话中搜集全局临时表的统计信息,并只将统计信息用于该会话。同时,可以继续
维护统计信息的共享版本,该版本可由尚未搜集会话专用统计信息的其他所有会话使用。
也为全局临时表提供了会话级 DML 监视。借助全局临时表的特定于会话的统计信息,
可以根据全局临时表中的数据更准确地优化查询。
特定于会话的统计信息具有以下特征:
• 跟踪统计信息的字典视图(例如 DBA_TAB_STATISTICS、
DBA_IND_STATISTICS、DBA_TAB_HISTOGRAMS 等)包含 SCOPE 列,该列指
明了统计信息是 SHARED 还是特定于 SESSION。
• 特定于会话的统计信息只在内存中,从不永久保留在磁盘上。退出会话时,数据库
将自动删除这些统计信息。

Oracle Database 12c:新功能 - 面向管理员 19-30


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

• 可以设置 DBMS_STATS 程序包的 GLOBAL_TEMP_TABLE_STATS 首选项,以控制


是否为全局临时表搜集会话或共享统计信息。SESSION 是默认值。
• DBMS_STATS 将更改提交到特定于会话的全局临时表,而不是特定于事务处理的全
局临时表,以使特定于事务处理的全局临时表中的数据不会丢失。

Oracle University and Error : You are not a Valid Partner use only

Oracle Database 12c:新功能 - 面向管理员 19-31


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

直方图增强功能

• 直方图是一个表示表中每列数据分布的结构。

Oracle University and Error : You are not a Valid Partner use only
• 优化程序使用直方图计算过滤器和联接谓词的选择性。
• 在 Oracle Database 12c 中,引入了两种新的直方图:
– 最高频率直方图
– 混合直方图
• 在将采样设置为 AUTO 的情况下,仅创建频率和混合
直方图。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

直方图表示表列中的数据分布。Oracle DB 为有数据偏差的列创建直方图,以改进基数估
计值。
在 Oracle Database 12c 中,为包含超过 254 个相异值的列引入了两种新的直方图,以
改进通过直方图生成的基数估计值:
• 最高频率直方图
• 混合直方图
这些新直方图中端点值的频率更准确,可使优化程序选择更好的计划。
如果 Oracle Database 12c 创建新直方图,并且采样百分比为 AUTO,则它们是频率或混
合直方图,但不是高度平衡直方图。
注:如果将数据库从 Oracle Database11g 升级到 12c,在升级之前创建的任何基于高度
的直方图都仍在使用。

Oracle Database 12c:新功能 - 面向管理员 19-32


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

最高频率直方图

• 过去,仅当 NDV 小于指定的直方图存储桶数量时,


才会创建频率直方图。

Oracle University and Error : You are not a Valid Partner use only
• 创建最高频率直方图的条件如下:
– 采样百分比设置为 AUTO
– 列包含超过 nb 个相异值
– 前 nb 个频繁值的百分比大于行的 p%
• 最高频率直方图可以提供更准确的基数估计值。
• 最高频率直方图由
DBA_TAB_COL_STATISTICS.HISTOGRAM 列中的
TOP-FREQUENCY 值指明。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Oracle Database 12c 之前,仅当列中相异值 (number of distinct values, NDV) 数量小


于指定的直方图存储桶数量(最多 254 个)时,才会创建频率直方图。在 Oracle
Database 12c 中,如果某列包含超过 254 个相异值,并且少量的相异值占用超过 99%
的行,则数据库会使用这些极为常见的少量相异值创建最高频率直方图。最高频率直方图
可以通过忽略统计上无关紧要的不常见值,为极为常见的值生成更好的直方图。
最高频率直方图由 DBA_TAB_COL_STATISTICS.HISTOGRAM 列中的 TOP-FREQUENCY
值指明。
从 Oracle Database 12c 开始,数据库将在符合以下条件时创建最高频率直方图:
• 采样百分比为 AUTO。在这种情况下,数据库将通过全表扫描构造频率直方图。对于
其他所有采样百分比指定值,数据库将从样本派生频率直方图。
• 列中的相异值数量大于创建的存储桶数量 (nb) 或默认数量。
• 前 nb 个频繁值所占用行的百分比等于或大于阈值 p,其中 p 为 (1-(1/nb))*100。
注:从 Oracle Database 12c 开始,当采样大小为 AUTO(这是默认值)时,数据库将从
全表扫描构造频率直方图。

Oracle Database 12c:新功能 - 面向管理员 19-33


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

混合直方图

• 混合直方图将基于高度的直方图和频率直方图的特征集

Oracle University and Error : You are not a Valid Partner use only
于一体。
• 在直方图中存储每个端点的端点重复计数值,该值是端
点值重复的次数。
• 在 Oracle Database 12c 中,数据库将在符合以下条件
时创建混合直方图:
– 采样百分比为 AUTO。
– 最高频率直方图的条件不适用。
– NDV 大于 nb,其中 nb 是用户指定的存储桶数量。如果
未指定任何数量,则 nb 默认为 254。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

混合直方图将基于高度的直方图和频率直方图的特征集于一体。
基于高度的直方图有时会生成不准确的估计值。例如,如果一个值仅作为一个存储桶的端
点值出现,但是几乎占用两个存储桶,则不将其视为常见值。
为了解决该问题,混合直方图存储端点重复计数值以及小于直方图中每个存储桶的相应端
点值的值的累积频率。通过使用这两种信息,优化程序可以获得最常见值的准确估计值。
在 Oracle Database 12c 中,数据库将在符合以下条件时创建混合直方图:
• 采样百分比为 AUTO。
• 最高频率直方图的条件不适用。
• NDV 大于 nb,其中 nb 是用户指定的存储桶数量或默认数量 254。

Oracle Database 12c:新功能 - 面向管理员 19-34


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

混合直方图:示例

可以使用 USER_TAB_COL_HISTOGRAMS 表查看混合直方图。

Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在幻灯片中的示例中,oe.inventories.quantity_on_hand 列有 237 个相异值和


1112 行。直方图将数据分布到 10 个存储桶中,每个存储桶中的行数大体相同。在查询
输出中,一行对应于直方图中的一个存储桶。Oracle DB 向该直方图中添加了一个特殊
的 0 存储桶,因为第一个存储桶中的值 (29) 不是 quantity_on_hand 列的最小值。
0 存储桶存储 quantity_on_hand 的最小值 0。
该图表示 inventories.quantity_on_hand 的混合直方图。x 轴显示端点(存储桶)
数量,表示关联值的累积频率。图示中显示 63 是第四个存储桶右边缘的值,该值在存储
桶中重复了 13 次。

Oracle Database 12c:新功能 - 面向管理员 19-35


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

扩展统计信息增强功能

• 使用 DBMS_STATS 可以识别和创建扩展统计信息。

Oracle University and Error : You are not a Valid Partner use only
• 有两种类型的扩展统计信息:
– 列组统计信息
– 表达式统计信息
• 在表上搜集统计信息时,将自动维护扩展统计信息。
• Oracle Database 12c 可以根据工作量为您检测和创建
必要的列组。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

扩展统计信息允许在表中的一组列上搜集统计信息。使用 DBMS_STATS 可以识别和创建


扩展统计信息,当表中的不同列上存在多个谓词时,这些统计信息可以改进基数估计值。
有两种类型的扩展统计信息:
• 当同一表中的多个列用在 WHERE 子句谓词中时,列组统计信息很有用。
• 当某一列用作 WHERE 子句谓词中复杂表达式的一部分时,表达式统计信息很有用。
从本发行版开始,Oracle DB 可以确定给定工作量或 SQL 优化集 (SQL tuning set, STS)
中需要哪些列组,然后可以创建关联的列组。因此,对于任何给定的工作量,无需再知道
每个表中的哪些列将在一起使用。通过监视工作量,Oracle Database 12c 可以记录必要
的列组信息。
后面几张幻灯片为您显示了如何检测特定工作量的有用列组。

Oracle Database 12c:新功能 - 面向管理员 19-36


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

捕获列组使用情况

启用工作量监视

Oracle University and Error : You are not a Valid Partner use only
SQL> CONNECT / AS SYSDBA
Connected.
SQL> -- Switch on seed column usage for 300 seconds
SQL> EXEC dbms_stats.seed_col_usage(null, null, 300)
PL/SQL procedure successfully completed.

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Oracle SQL*Plus 会话中,以 SYS 用户身份连接并运行幻灯片中显示的 PL/SQL 程


序,以启用时长 300 秒的监视(第一个参数是指 SQLSET_NAME,第二个参数是指
OWNER_NAME)。
新的 SEED_COL_USAGE 过程将迭代访问指定 SQL 优化集中的 SQL 语句(此处是指在
接下来 300 秒内在系统中执行的所有语句),编译它们,然后为这些语句中出现的列将
列使用信息植入数据字典。

Oracle Database 12c:新功能 - 面向管理员 19-37


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

捕获列组使用情况:运行工作量

Oracle University and Error : You are not a Valid Partner use only
第一个查询返回的实际行数
为 932。优化程序低估了该值,
因为它假设每个谓词都将减少
行数。

第二个查询返回的实际行数
为 145。优化程序高估了该
值,因为它假设国家/地区和
省/市/自治区之间没有关系。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

接着前面的示例,数据库必须观察有代表性的工作量以确定适当的列组。在监视期间无需
运行查询本身,而是可以为工作量中运行时间较长的某些查询运行 EXPLAIN PLAN,以
确保数据库记录这些查询的列组信息。
幻灯片中的示例显示了对客户表的两个查询的解释计划。

Oracle Database 12c:新功能 - 面向管理员 19-38


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

复查列组使用情况

SQL> SELECT dbms_stats.report_col_usage ('SH', 'CUSTOMERS')


FROM dual;

Oracle University and Error : You are not a Valid Partner use only
COLUMN USAGE REPORT FOR SH.CUSTOMERS
1. COUNTRY_ID : EQ EQ 表示该列在查询 1
2. CUST_CITY : EQ 中用在等式谓词中。
3. CUST_STATE_PROVINCE : EQ
4. (CUST_CITY, CUST_STATE_PROVINCE, COUNTRY_ID) : FILTER
5. (CUST_STATE_PROVINCE, COUNTRY_ID) : GROUP_BY

在查询 2 中,
GROUP_BY 列用在 FILTER 表示列在一起
GROUP BY 表达式中。 用作过滤器谓词而非
用作联接等。它来自
于查询 1。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

新的 REPORT_COL_USAGE 过程可以报告记录的列组使用信息。
幻灯片中的示例复查了为 CUSTOMERS 表记录的列组使用信息。
全部三列出现在同一个 WHERE 子句中,所以报告将其显示为一个组过滤器。
在第二个查询中,两列出现在 GROUP BY 子句中,所以报告将其标记为 GROUP_BY。
FILTER 和 GROUP_BY 报告中的一组列是列组的候选项。

Oracle Database 12c:新功能 - 面向管理员 19-39


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

创建在工作量监视期间检测到的列组

Oracle University and Error : You are not a Valid Partner use only
SQL> SELECT dbms_stats.create_extended_stats
('SH', 'CUSTOMERS')
FROM dual;

####################################################
EXTENSIONS FOR SH.CUSTOMERS
................................<<<<<<<<
1. (CUST_CITY, CUST_STATE_PROVINCE, COUNTRY_ID) :
SYS_STUMZ$C3AIHLPBROI#SKA58H_N created
2. (CUST_STATE_PROVINCE, COUNTRY_ID) :
SYS_STU#S#WF25Z#QAHIHE#MOFFMM_ created
####################################################

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

幻灯片中的示例根据在监视窗口中捕获的使用信息,为 CUSTOMERS 表创建了列组。


数据库为 CUSTOMERS 创建了两个列组:一个列组针对过滤器谓词,一个列组针对分组
方式操作。
注:创建后,应该重新搜集 CUSTOMERS 表的统计信息。

Oracle Database 12c:新功能 - 面向管理员 19-40


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

自动动态采样

• 从 Oracle Database 12c 开始,优化程序自动确定动态


采样是否有用,以及将哪个动态采样级别用于所有

Oracle University and Error : You are not a Valid Partner use only
SQL 语句。
• OPTIMIZER_DYNAMIC_SAMPLING 初始化参数设置为
值 11 时,将启用自动动态采样。
• 将范围扩大到非并行语句。
• 扩展功能以包括联接和分组方式。
• 使动态采样查询的结果永久保留在高速缓存中,以消除
重复采样的开销。
• 附加统计信息来源(例如,区映射)可以弥补易失表上
的过时统计信息。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Oracle Database 12c 之前,动态采样始终在优化期间发生,并且仅当查询中的表没有


统计信息时才会发生。从 Oracle Database 12c 开始,优化程序可以使用自动动态采样。
在这种情况下,优化程序自动确定动态采样是否有用,以及将哪个动态采样级别用于所有
SQL 语句。
这一决策中的主要因素是可用统计信息是否足以生成良好的计划。如果统计信息不足,优
化程序将使用动态采样。通过动态采样搜集的统计信息范围已扩大,包括联接、分组方式
和非并行语句。
通过动态采样搜集的统计信息现在永久保留,其他查询可以使用它们来消除重复采样的
开销。
对弥补易失表上的过时统计信息也有帮助。
OPTIMIZER_DYNAMIC_SAMPLING 初始化参数设置为值 11(默认值为 2)时,将启用
自动动态采样。

Oracle Database 12c:新功能 - 面向管理员 19-41


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:a
b. 错
a. 对
数据库将创建混合直方图。
测验

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 19-42


在 Oracle Database 12c 中,如果采样百分比为 AUTO,

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

小结

在本课中,您应该已经学会:
• 自适应 SQL 计划管理

Oracle University and Error : You are not a Valid Partner use only
• SQL 管理库的增强功能
• 如何使用动态计划改进查询性能
• 自适应执行计划的重新优化
• 如何使用 SQL 计划指令生成更好的计划
• 统计信息搜集性能的改进
• 如何使用新的直方图
• 扩展统计信息的增强功能以及如何检测特定工作量的
有用列组
• 动态采样的增强功能

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 19-43


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED




19-2:使用重新优化
19-1:使用动态计划
练习

19-2:使用并发统计信息搜集

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 19-44


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


资源管理器和其他性能增强功能

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle Database 12c 新增功能和增强功能


Enterprise Manager Enterprise Manager Enterprise Manager
Cloud Control Database Express
其他工具
和其他工具

基础功能 CDB 和 PDB 创建 CDB 和 PDB 管理


CDB 和 PDB

Oracle University and Error : You are not a Valid Partner use only
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录

安全性 统一审计 权限分析 数据编写

HA RMAN

易管理性 DB 操作 实时 ADDM 比较时段 ADDM ADR


12.1.0.2 12.1.0.2

内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速
12.1.0.2
SQL 优化 资源管理器 索引、表
缓存

数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

有几项资源管理器增强功能来处理 CDB 和 PDB 中的资源。还有多进程多线程 Oracle 体


系结构和数据库智能闪存高速缓存与还原段的增强功能。

Oracle Database 12c:新功能 - 面向管理员 20-2


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

课程目标

学完本课后,应能完成以下工作:

Oracle University and Error : You are not a Valid Partner use only
• 在 CDB 环境中使用资源管理器
• 控制由 IM 列存储填充操作消耗的资源
• 描述多进程多线程 Oracle 体系结构
• 描述数据库智能闪存高速缓存增强功能
• 将临时还原用于临时表
• 限制 PGA 的大小

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要全面了解 Oracle 可插入数据库新增功能和使用方法,请参阅 Oracle 文档中的以下


指南:
《Oracle Database Administrator’s Guide 12c Release 1 (12.1)》
• “Using Oracle Resource Manager for Pluggable Databases with SQL*Plus”一章
• “Using Oracle Resource Manager for Pluggable Databases with Cloud Control”
一章
• “Managing Resources with Oracle Database Resource Manager Runaway
Queries”一章
• 请参阅其他信息资源:
• Oracle 学习库中的“Oracle Database 12c New Features Demo Series”演示:
- Multitenant Architecture
- Basics of CDB and PDB Architecture

Oracle Database 12c:新功能 - 面向管理员 20-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

资源管理器和可插入数据库

在 CDB 中,资源管理器可以管理:

Oracle University and Error : You are not a Valid Partner use only
• PDB 之间的资源
• 每个 PDB 中的资源
CDB 系统资源 争用会话

PDB1
PDB2 PDB3
分配的资源

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在非 CDB 中,可以使用资源管理器管理争夺系统和数据库资源的多个工作量。但是,在
CDB 中,多个 PDB 中会有多个工作量争用系统和 CDB 资源。
在 CDB 中,资源管理器可以在两个基本级别管理资源:
• CDB 级别:资源管理器可以管理争用系统和 CDB 资源的多个 PDB 的工作量。可以
指定如何将资源分配给 PDB,也可以限制特定 PDB 的资源利用率。
• PDB 级别:资源管理器可以管理每个 PDB 中的工作量。
资源管理器采用两个步骤分配资源:
1. 将一部分系统资源分配给每个 PDB。
2. 在特定 PDB 中,将在第 1 步中获得的一部分系统资源分配给连接到该 PDB 的每个
会话。

Oracle Database 12c:新功能 - 面向管理员 20-4


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

在 PDB 之间协调资源

• PDB 争用资源:CPU、Exadata I/O、并行服务器

Oracle University and Error : You are not a Valid Partner use only
– 系统份额用于为每个 PDB 分配资源。
– 限制用于限定每个 PDB 的资源利用率。
• 插入新的 PDB 时,CDB DBA 可以指定默认分配或
显式分配。

CDB

PDB1 PDB2 PDB3

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在包含多个 PDB 的 CDB 中,某些 PDB 通常比其他 PDB 更重要。使用资源管理器可以


优先考虑特定 PDB 的资源(CPU 和 I/O 以及在并行语句排队上下文中并行执行从属进程
的分配)使用。实现方法是给予不同的 PDB 不同的系统资源份额,以便将更多资源分配
给更重要的 PDB。
此外,限制可用于约束特定 PDB 的系统资源使用率。
将某个 PDB 插入 CDB 且没有为其定义指令时,该 PDB 会使用 PDB 的默认指令。作为
CDB DBA,您可以控制该默认指令,也可以为每个新的 PDB 创建特定指令。
注:不能为根容器定义使用者组和份额。

Oracle Database 12c:新功能 - 面向管理员 20-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

CDB 资源计划基础:份额
每个 PDB 都有一个份额。
总共 3 份,每个 PDB 保证获得
CPU 的 1/3 或 33%。
CDB

Oracle University and Error : You are not a Valid Partner use only
PDB1 PDB2 PDB3
1份 1份 1份
保证获得的 CPU = 保证获得的 CPU = 保证获得的 CPU =
1/3 (33%) 1/3 (33%) 1/3 (33%)

• 使用“份额”指定资源。
– 添加或删除 PDB 后无需重新计算。
– PDB1 保证获得 CPU 的 33%。
– PDB1 最多获得 CPU 的 100%。
– PDB1 实际使用 CPU 的 20%。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要在 PDB 间分配资源,就要为每个 PDB 分配一个份额值。如果份额值较高,就会为


PDB 分配较多资源。
在本示例中,为每个现有 PDB 分配了一份。总共三份,每个 PDB 保证至少获得系统资
源的 33%。
根据工作量,每个 PDB 最多可以获得系统资源的 100%,但是可能实际仅使用这些资源
的 20%。

Oracle Database 12c:新功能 - 面向管理员 20-6


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

CDB 资源计划基础:份额

新的 PDB 获得默认
默认分配:一份 分配:1 份。
CDB

Oracle University and Error : You are not a Valid Partner use only
PDB1 PDB2 PDB3 PDB4
1份 1份 1份 1份
保证获得的 CPU = 保证获得的 CPU = 保证获得的 CPU = 保证获得的 CPU =
1/4 (25%) 1/4 (25%) 1/4 (25%) 1/4 (25%)

如果该 PDB 比较重要,可以显式为其


分配更多份额。
CDB
PDB1 PDB2 PDB3 PDB4
1份 1份 1份 2份
保证获得的 CPU = 保证获得的 CPU = 保证获得的 CPU = 保证获得的 CPU =
1/5 (20%) 1/5 (20%) 1/5 (20%) 2/5 (40%)

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

如果添加了新的 PDB,它将自动获得默认份额值,即一份。
在幻灯片中的第一个示例中,总共四份,每个 PDB 保证获得系统资源的 25%。
注:CDB 资源计划中添加的每个 PDB 都将使用 PDB 的默认指令。如果默认值不适合计
划,可以更改该默认指令。
但是,如果认为 PDB4 的优先级高于其他 PDB,则可以显式为其分配更多份额。在幻灯
片中的第二个示例中,PDB4 获得两份,而其他 PDB 获得一份。总共五份,PDB1、
PDB2 和 PDB3 保证获得系统资源的五分之一 (20%),因为它们每个分配有一份。由于
PDB4 分配有两份,因此它保证获得系统资源的五分之二 (40%)。

Oracle Database 12c:新功能 - 面向管理员 20-7


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

CDB 资源计划基础:限制

• 可以为每个 PDB 定义两个限制:


– CPU、Exadata I/O 和并行服务器的利用率限制

Oracle University and Error : You are not a Valid Partner use only
– 要覆盖利用率限制的并行服务器限制
• 默认值:100%
• 可以更改默认值。

PDB1

utilization_limit = 30

Parallel_server_limit = 50

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

限制约束特定 PDB 的系统资源使用率。可以指定 CPU、Exadata I/O 和并行执行服务器


限制。
要限制每个 PDB 的 CPU、Exadata I/O 和并行服务器(PARALLEL_SERVER_TARGET 初
始化参数)使用率,可以使用 UTILIZATION_LIMIT 参数(表示为 PDB 可以使用的系统
资源的百分比)创建计划指令。资源管理器可以限制 PDB 会话,以使 PDB 的 CPU、
Exadata I/O 和并行服务器利用率不超过利用率限制。在幻灯片中的示例中,PDB1 最多获
得 CDB 实例的系统 CPU、Exadata I/O 带宽和可用并行服务器的 30%。
对于并行执行服务器,可以覆盖由 UTILIZATION_LIMIT 定义的值,方法创建使用
PARALLEL_SERVER_LIMIT 参数的计划指令。PARALLEL_SERVER_LIMIT 值对应于
PARALLEL_SERVERS_TARGET 的一定百分比。例如,如果将某个 PDB 的
PARALLEL_SERVERS_TARGET 初始化参数设置为 200 并将 PARALLEL_SERVER_LIMIT
设置为 50%,则该 PDB 可以使用的最大并行服务器数量为 100 (200 X 0.50)。

Oracle Database 12c:新功能 - 面向管理员 20-8


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

100%)。这些值对应于自动添加到计划中的默认指令。
注:也可以使用 DBMS_RESOURCE_MANAGER 程序包中的

Oracle Database 12c:新功能 - 面向管理员 20-9


UPDATE_CDB_DEFAULT_DIRECTIVE 过程更改 PDB 的默认指令属性值。
如果没有为某个 PDB 显式定义限制,该 PDB 将使用 PDB 的默认限制(设置为

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

CDB 资源计划:完整示例
指定 CPU、 限制 CPU 和
Exadata I/O 和 Exadata I/O 的 限制并行服务
并行服务器的分配 使用率 器的使用率

Oracle University and Error : You are not a Valid Partner use only
PDB/指令名称 份额 利用率限制 并行服务器限制
(默认分配) (1) (100%) (100%)
(自动任务分配) (-1) (90%) (100%)
PDB1 1 30% 50%
PDB2 1 30% 80%
PDB3 1 30% 30%
PDB4 2 100% 100%

PDB1
• 保证获得 CPU 和 Exadata 磁盘带宽的 1/5 (20%)
• 最多获得 CPU 和 Exadata 磁盘带宽的 30%
• 最多获得并行服务器的 50%

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

本示例为您显示了可能在根容器中创建的 CDB 资源计划。


默认分配指令适用于尚未定义特定指令的 PDB。
默认分配是一份,两个相应的限制均设置为其默认值 100%。这些是默认分配指令的
默认值。
自动任务分配指令适用于在根容器中或在 PDB 中运行的自动维护任务。
自动任务分配是 -1 份,表示自动维护任务获得的分配为系统资源的 20%。始终应该更
改该默认值。默认情况下,自动任务分配获得的利用率限制为 90%,并行服务器限制
为 100%。
PDB1 分配有一份,表示与其他 PDB 相比,有五分之一的时间选择 CPU、Exadata 磁
盘带宽和排队的并行查询的五分之一或 20%。此外,将利用率限制设置为资源的 30%,
并将可用并行服务器限制设置为 50%。

Oracle Database 12c:新功能 - 面向管理员 20-10


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED




创建 CDB 资源计划
1. 创建暂挂区。
2. 创建 CDB 资源计划。

Oracle University and Error : You are not a Valid Partner use only
SQL> EXEC DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN( -
plan => 'daytime_plan', -
comment => 'CDB resource plan for mycdb

3. 创建 PDB 的指令。
SQL> EXEC DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE( -
plan => 'daytime_plan', -
pluggable_database => 'salespdb', -
shares => 3, -
utilization_limit => NULL, -
parallel_server_limit => NULL)

4. (可选)更新默认 PDB 指令。


5. (可选)更新默认自动任务指令。
6. 验证并提交暂挂区。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

CDB 资源计划管理直接从根容器中完成。
幻灯片显示了创建 CDB 资源计划需要执行的步骤。
可以使用 DBMS_RESOURCE_MANAGER 程序包创建 CDB 资源计划并定义计划的指令。如
果尝试在 PDB 中定义 CDB 资源计划,将收到错误。
1. 使用 CREATE_PENDING_AREA 过程连接到根容器以创建暂挂区。
2. 使用 CREATE_CDB_PLAN 过程创建名为 daytime_plan 的 CDB 资源计划。
3. 使用 CREATE_CDB_PLAN_DIRECTIVE 过程为 PDB 创建 CDB 资源计划指令。每个
指令指定如何将资源分配给特定 PDB。在本示例中,salespdb PDB 获得三份,并
使用默认限制。可以为 hrpdb PDB 定义其他指令,使其获得 1 份且两个限制均为
70%。
4. 完成后,只需验证并提交暂挂区即可。
在非 CDB 中,可以通过在根容器中设置 RESOURCE_MANAGER_PLAN 初始化参数为 CDB
启用资源管理器计划。如果禁用 CDB 资源计划,则也会禁用 PDB 资源计划中的某些指令。
也可以将 CDB 计划与调度程序窗口关联。

Oracle Database 12c:新功能 - 面向管理员 20-11


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

设置默认指令

• 设置默认 PDB 指令:

Oracle University and Error : You are not a Valid Partner use only
SQL> EXEC DBMS_RESOURCE_MANAGER.UPDATE_CDB_DEFAULT_DIRECTIVE( -
plan => 'daytime_plan', -
new_shares => 1, -
new_utilization_limit => 50, -
new_parallel_server_limit => 50)

• 设置自动任务 CDB 资源计划指令:

SQL> EXEC DBMS_RESOURCE_MANAGER.UPDATE_CDB_AUTOTASK_DIRECTIVE( -


plan => 'daytime_plan', -
new_shares => 1, -
new_utilization_limit => 75, -
new_parallel_server_limit => 75)

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

该 CDB 中的其他所有 PDB 均使用默认 PDB 指令,您可以使用


UPDATE_CDB_DEFAULT_DIRECTIVE 选择性地更新该指令。在幻灯片中的示例中,只
将限制的默认值更改为 50%。
同样,如果当前的自动任务 CDB 资源计划指令不满足要求,可以使用
UPDATE_CDB_AUTOTASK_DIRECTIVE 过程更新该指令。此处,全部三个参数分别更改
为 1% 、75% 和 75%。
完成后,只需验证并提交暂挂区即可。

Oracle Database 12c:新功能 - 面向管理员 20-12


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

查看 CDB 资源计划指令

SQL> SELECT plan, pluggable_database, shares,


utilization_limit, parallel_server_limit

Oracle University and Error : You are not a Valid Partner use only
FROM dba_cdb_rsrc_plan_directives
ORDER BY plan;
Parallel
Pluggable Utilization Server
Plan Database Shares Limit Limit
------------------------ ------------------------- ------ ----------- ---------
DAYTIME_PLAN ORA$DEFAULT_PDB_DIRECTIVE 1 50 50
DAYTIME_PLAN ORA$AUTOTASK 1 75 75
DAYTIME_PLAN SALESPDB 3
DAYTIME_PLAN HRPDB 1 70 70
DEFAULT_CDB_PLAN ORA$DEFAULT_PDB_DIRECTIVE 1 100 100
DEFAULT_CDB_PLAN ORA$AUTOTASK 90 100
DEFAULT_MAINTENANCE_PLAN ORA$DEFAULT_PDB_DIRECTIVE 1 100 100
DEFAULT_MAINTENANCE_PLAN ORA$AUTOTASK 90 100
ORA$INTERNAL_CDB_PLAN ORA$DEFAULT_PDB_DIRECTIVE
ORA$INTERNAL_CDB_PLAN ORA$AUTOTASK

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

本示例使用 DBA_CDB_RSRC_PLAN_DIRECTIVES 视图显示在根容器中的所有 CDB 资


源计划中定义的所有指令。
ORA$INTERNAL_CDB_PLAN 是默认的 CDB 资源计划。它是一个非常简单的计划,不管
理任何资源。
注:从根容器中,可以使用 DBA_CDB_RSRC_PLANS 视图显示在根容器中定义的所有
CDB 资源计划。

Oracle Database 12c:新功能 - 面向管理员 20-13


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

维护 CDB 资源计划

SQL> CONNECT sys AS SYSDBA

Oracle University and Error : You are not a Valid Partner use only
SQL> EXEC DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();

CREATE_CDB_PLAN_DIRECTIVE

UPDATE_CDB_PLAN DBMS_RESOURCE_MANAGER DELETE_CDB_PLAN

UPDATE_CDB_PLAN_DIRECTIVE DELETE_CDB_PLAN_DIRECTIVE

SQL> EXEC DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();

SQL> EXEC DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

1. 可以使用 UPDATE_CDB_PLAN 过程更新 CDB 资源计划以更改其注释。


2. 在 CDB 中创建 PDB 时,可以使用 CREATE_CDB_PLAN_DIRECTIVE 过程创建 PDB
的 CDB 资源计划指令。指令指定如何将资源分配给新的 PDB。
3. 可以使用 DELETE_CDB_PLAN_DIRECTIVE 过程删除 PDB 的 CDB 资源计划指令。
如果移走或删除某个 PDB,会删除该 PDB 的指令。但是,您可以保留该指令,如果
以后将该 PDB 插入 CDB,现有指令将适用于该 PDB。
4. 可以使用 UPDATE_CDB_PLAN_DIRECTIVE 过程更新 PDB 的 CDB 资源计划指令。
指令指定如何将资源分配给 PDB。
5. 可以使用 DELETE_CDB_PLAN 过程删除 CDB 资源计划。如果不再需要某个 CDB 资
源计划,可以删除该计划。可以启用不同的 CDB 资源计划,也可以为 CDB 禁用资源
管理器。如果删除活动的 CDB 资源计划,则会禁用 PDB 资源计划中的某些指令。

Oracle Database 12c:新功能 - 面向管理员 20-14


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

管理 PDB 中的资源

• 在非 CDB 数据库中,使用资源计划管理数据库中的工
作量。

Oracle University and Error : You are not a Valid Partner use only
• 在 PDB 中,也使用资源计划(又称为 PDB 资源计划)
管理工作量。
• 功能相似,但以下差异除外:

非 CDB 数据库 PDB 数据库


多级资源计划 仅单级资源计划
最多 32 个使用者组 最多 8 个使用者组
子计划 无子计划

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

CDB 资源计划可以确定分配给每个 PDB 的资源量。PDB 资源计划可以确定如何将分配


给特定 PDB 的资源分配给该 PDB 中的使用者组。PDB 资源计划类似于非 CDB 的资源
计划。具体来说,PDB 资源计划在 PDB 中的使用者组间分配资源。
在 CDB 中,以下限制适用于 PDB 资源计划:
• PDB 资源计划不能有多级调度策略。
• PDB 资源计划最多可以有八个使用者组。
• PDB 资源计划不能有子计划。
注:如果尝试在根容器中创建 PDB 计划,将收到错误。

Oracle Database 12c:新功能 - 面向管理员 20-15


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

管理 PDB 资源计划

• 连接到 PDB 以管理 PDB 计划。

Oracle University and Error : You are not a Valid Partner use only
• 使用的过程与在非 CDB 环境中管理资源计划的过程完全
一样。
• 对于 CREATE_PLAN_DIRECTIVE 过程:
– 新的 SHARE 参数
– 将 MAX_UTILIZATION_LIMIT 和
PARALLEL_TARGET_PERCENTAGE 参数替换为
UTILIZATION_LIMIT 和 PARALLEL_SERVER_LIMIT
• 可以使用 V$RSRC_PLAN 查看 CDB 和 PDB 资源计划。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

V$RSRC_PLAN 存在于以前的 Oracle DB 发行版中。con_id=1 的资源计划是活动的


CDB 资源计划。

Oracle Database 12c:新功能 - 面向管理员 20-16


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

结合使用
• CDB 和 PDB 资源计划如何协同工作?
1. 根据 CDB 资源计划将资源分配给 PDB

Oracle University and Error : You are not a Valid Partner use only
2. 根据 PDB 资源计划将资源分配给使用者组

CDB 计划 PDB3 计划
PDB 份额 利用率限制 使用者组 份额 利用率限制
PDB1 1 50% OLTP 3 100%
PDB2 1 50% 报告 1 50%
PDB3 2 100% 其他 1 50%

• 这对 PDB3 报告意味着什么?
– 保证获得 50% (2/4) x 20% (1/5) = 资源的 10%
– 最多获得 100% x 50% = 资源的 50%

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

根据现行的 CDB 资源计划将资源分配给每个 PDB。每个 PDB 都将收到一定百分比的系


统资源,资源管理器根据该 PDB 的现行资源计划为每个使用者组分配该数量的资源。
幻灯片中显示了一个示例。为简单起见,本示例使用了“份额”和“利用率限制”。
如您所见,“报告”使用者组保证获得总可用系统资源的 10%。这是因为 PDB3 在 CDB
资源计划中分配有四份中的两份,表示资源的 50%,在这 50% 中,“报告”使用者组获
得五份中的一份,表示给定 50% 的 20%。同样,PDB3 中的“报告”使用者组最多获得
总系统资源的 50%。

Oracle Database 12c:新功能 - 面向管理员 20-17


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

注意事项

• 设置 PDB 资源计划是可选操作。如果未指定,PDB

Oracle University and Error : You are not a Valid Partner use only
中的所有会话将得到同等对待。
• 将非 CDB 插入带有计划的 CDB:
– 如果满足以下条件,则计划在 PDB 上的运行方式完全
一样:
— 使用者组 <= 8
— 无子计划
— 所有分配都在级别 1
– 计划将进行转换。
— 原始计划以 LEGACY 状态存储在字典中。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

V$RSRC_PLAN 存在于以前的 Oracle DB 发行版中。con_id=1 的资源计划是活动的


CDB 资源计划。
将带有计划的非 CDB 作为新的 PDB 插入 CDB 时,如果该计划未违反以下任何 PDB 限
制,则其运行方式在 PDB 中完全一样:
• 使用者组数量不超过 8 个。
• 没有子计划。
• 所有分配都在级别 1。
但是,如果违反其中任何限制,该计划将转换为等效项。如果已启用该计划,将使用转换
的版本。如果转换的计划不符合预期,仍然可以使用以 LEGACY 状态存储在字典中的原
始计划。

Oracle Database 12c:新功能 - 面向管理员 20-18


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

失控查询和资源管理器

• 用于触发使用者组切换的新参数:
– SWITCH_IO_LOGICAL

Oracle University and Error : You are not a Valid Partner use only
– SWITCH_ELAPSED_TIME
• 名为 LOG_ONLY 的新元使用者组
• 添加到 V$SQL_MONITOR 的新列:
– RM_LAST_ACTION
– RM_LAST_ACTION_REASON
– RM_LAST_ACTION_TIME
– RM_CONSUMER_GROUP
• 始终会填充 V$RSRCMGRMETRIC 和
V$RSRCMGRMETRIC_HISTORY

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

为了更好地跟踪失控查询,资源管理器经过增强,包括以下新功能:
• 除现有切换条件(switch_io_reqs、switch_io_megabytes、
switch_time)以外,还在
dbms_resource_manager.create_plan_directive 中添加了新参数:
- switch_io_logical:触发 switch_group 所指定操作的逻辑 I/O 数量
- switch_elapsed_time:触发 switch_group 所指定操作的已用时间
• 有一个名为 LOG_ONLY 的新元使用者组。这可用作 switch_group 参数的变元。
意味着 DBA 要记录失控查询而不更改其使用者组或采取其他操作。
• 资源管理器可将失控查询信息与 SQL 监视相集成。要为资源管理器保留重要结果,
每个使用者组最多连接五个 SQL 语句。SQL 监视不会清除这些 SQL 执行语句,直
到它们解除连接为止。以下是添加到 V$SQL_MONITOR 的新列:
- RM_LAST_ACTION:资源管理器对此 SQL 操作执行的最新操作。它的值是以
下几项之一:CANCEL_SQL、KILL_SESSION、LOG_ONLY、SWITCH TO
<CG NAME>

Oracle Database 12c:新功能 - 面向管理员 20-19


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

- RM_LAST_ACTION_REASON:资源管理器对此 SQL 操作执行的最新操作的原


因。它的值是以下几项之一:SWITCH_CPU_TIME、SWITCH_IO_REQS、
SWITCH_IO_MBS、SWITCH_ELAPSED_TIME、SWITCH_IO_LOGICAL
- RM_LAST_ACTION_TIME:资源管理器对此 SQL 操作执行的最新操作的时间
- RM_CONSUMER_GROUP:此 SQL 操作的当前使用者组
注:无论是否设置了资源管理器计划,v$rsrcmgrmetric 和
v$rsrcmgrmetric_history 始终都会每分钟生成一行。

Oracle University and Error : You are not a Valid Partner use only

Oracle Database 12c:新功能 - 面向管理员 20-20


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

控制 IM 列存储重新填充资源消耗

• IM 列存储填充会占用大量 CPU。
• 存在不同类型的 IM 列存储填充:

Oracle University and Error : You are not a Valid Partner use only
说明 默认使用者组

内存中段(例如:优先级不是 NONE 的段)的填充 ora$autotask

按需填充(例如:当用户访问优先级为 NONE 的
用户的使用者组
内存中段时)

Î 通过更改优先级管理填充操作的 CPU 占用率:


– 启用现成的资源计划之一 (DEFAULT_PLAN)
– 创建您自己的资源计划
– 将带有“INMEMORY”值的 ORACLE_FUNCTION 属性
映射到其他使用者组

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

通过使用资源管理器,可以管理 IM 列存储填充操作的 CPU 占用率,并通过启用现成的


资源计划之一(例如,DEFAULT_PLAN)或者通过创建您自己的资源计划,根据需要更
改这些操作的优先级。
默认情况下,所有 IM 列存储填充操作都在 ora$autotask 使用者组中运行,但“按需
填充”除外,它在访问数据的用户映射到的使用者组中运行。如果资源计划中不存在
ora$autotask 使用者组,填充将在 OTHER_GROUPS 中运行。ora$autotask 中的其
他操作包括自动维护操作,例如,搜集统计信息和段分析。
要更改 IM 列存储填充操作的使用者组,DBA 应使用
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING 过程将其映射到另一
个组。示例:
SQL> EXEC DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING
( attribute => 'ORACLE_FUNCTION',
value => 'INMEMORY',
consumer_group => 'BATCH_GROUP')

Oracle Database 12c:新功能 - 面向管理员 20-21


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

默认 UNIX/Linux 体系结构

PMON SMON RECO SAnn DBRM


(进程 (系统 (SGA (数据库
(恢复过程)
监视器) 监视器) 分配器) 资源管理器)

Oracle University and Error : You are not a Valid Partner use only
DBW0..j
(数据库 …
写进程)

系统全局区 (SGA)
VKTM 服务器
(虚拟 进程
计时器)

PSP0 LREG CKPT LGWR MMON


(进程 (监听程序 (检查点 (重做日志 (可管理性
衍生程序) 注册进程) 进程) 写进程) 监视器)

OS 进程
Oracle 进程

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle DB 实例的 Oracle 进程执行体系结构取决于操作系统。例如,在 Windows 上,


Oracle 后台进程是操作系统 (Operating System, OS) 进程内的执行线程。在 Linux 和
UNIX 上,Oracle 后台进程作为 OS 进程运行。幻灯片中显示了这种情况,其中每个
Oracle 后台进程和前台进程(统称为 Oracle 进程)都作为特定 OS 进程运行。

Oracle Database 12c:新功能 - 面向管理员 20-22


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

多进程多线程 UNIX/Linux 体系结构

PMON SMON RECO SAnn DBRM


(SGA (数据库

Oracle University and Error : You are not a Valid Partner use only
(进程 (系统 (恢复过程)
监视器) 监视器) 分配器) 资源管理器)

DBW0..j
(数据库 …
写进程)

系统全局区 (SGA)
VKTM 服务器
(虚拟 进程
计时器)

PSP0 LREG CKPT LGWR MMON


(监听程序 (检查点
(进程 (重做日志 (可管理性
注册进程) 进程)
衍生程序) 写进程) 监视器)
线程
OS 进程
Oracle 进程

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

多进程 (Multi-Process, MP) 模型使得每个 Oracle 进程都作为单独的 OS 进程运行。这种


模型要面临资源利用率和共享效率低下的问题。
从 Oracle Database 12c 开始,多线程 (multithreaded, MT) Oracle 模型可使某些 Oracle
进程作为同一地址空间内的操作系统线程执行。在线程模式下,UNIX 和 Linux 上的某些
后台进程作为进程(包含一个线程的进程)运行,而其余 Oracle 进程作为 OS 进程中的
线程运行。OS 进程到 Oracle 进程分配是随机的。这就是所谓的多进程/多线程混合体系
结构。
幻灯片中举例说明了这一点,其中 Oracle 进程 PMON、DBW、VKTM 和 PSP 在各自的
OS 进程中运行,而其他所有 Oracle 进程都作为线程在不同的 OS 进程中运行。
注释
• 自 Oracle Database 12c 发行版 12.1 起,由于 PMON、DBW、VKTM 和 PSP 的重
要性,决定始终让它们作为 OS 进程运行。这可能会在将来的发行版中发生变化。
• 每个 OS 进程也运行一个称为 SCMN 的特殊线程,该线程从根本上讲是内部监听程
序线程。所有线程创建均通过该线程进行路由。幻灯片中未显示该特殊线程。

Oracle Database 12c:新功能 - 面向管理员 20-23


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

多进程多线程体系结构:优点和设置

• CPU 和内存使用量减少
• 系统可靠性更高

Oracle University and Error : You are not a Valid Partner use only
• 并行操作性能更高
SQL> CONNECT sys AS SYSDBA
Enter password:
Connected.
SQL> ALTER SYSTEM SET threaded_execution=true SCOPE=SPFILE;
System altered.
SQL> SHUTDOWN IMMEDIATE
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP

Database opened.
SQL>

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

注释
在某些测试中,使用多进程多线程功能时,内存使用量几乎要减少一半。
要为使用多进程多线程体系结构而设置 Oracle DB 实例,方法是在将初始化参数
THREADED_EXECUTION 设置为 TRUE 的情况下启动 Oracle DB 实例。
要能够在将 THREADED_EXECUTION 设置为 TRUE 的情况下启动 Oracle DB 实例,需要
使用通过口令文件验证的 SYSDBA 连接。

Oracle Database 12c:新功能 - 面向管理员 20-24


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

多进程多线程体系结构:注意事项

• 线程仍然将 PGA 用于专用内存。

Oracle University and Error : You are not a Valid Partner use only
• 线程仍然将 SGA 内存用于进程间通信。
• 监听程序不会衍生线程。
• 需要用于 SYSDBA 验证的口令文件。
• 作为最佳实践,设置以下参数:

DEDICATED_THROUGH_BROKER_LISTENER = on

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

• 作为线程运行的 Oracle 进程仍然将 PGA 用于专用内存。


• 作为线程运行的 Oracle 进程仍然将 SGA 内存用于进程间通信。
• 数据库监听程序不会衍生线程,而是将由分派程序处理的连接请求分派给给定实例
的衍生线程。运行多个 Oracle 进程的每个 OS 进程也运行一个称为 SCMN 的内部
监听程序线程。所有线程创建均通过该线程进行路由。
• 在启动数据库实例时,多进程多线程模式需要用于 SYSDBA 验证的口令文件。如果
不使用 SYS 口令,会在启动时触发 ORA-1031: insufficient privileges
错误。
• 线程的执行连接无法通过静态服务定义运行。因此,DBA 必须确保客户机连接通过
TNS 条目或通过使用 EZConnect 经由动态注册的服务进行路由。
• 还要在 listener.ora 文件中将 DEDICATED_THROUGH_BROKER_LISTENER 参
数设置为 ON。设置该参数后,监听程序知道当收到连接请求时不应该衍生 OS
进程,而是将请求传送到数据库,以便衍生数据库线程并应答连接。

Oracle Database 12c:新功能 - 面向管理员 20-25


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

多进程多线程体系结构:监视
SQL> select spid, stid, pname from v$process order by spid;

SPID STID PNAME


------- -------- -----

Oracle University and Error : You are not a Valid Partner use only
31562 31562 PMON
31566 31566 PSP0
31570 31570 VKTM
31576 31576 SCMN $ ps -ef | grep orcl
31576 31580 GEN0 oracle 598 19126 0 16:30 pts/0 00:00:00 grep orcl
31576 31627 SMON oracle 31562 1 0 14:04 ? 00:00:01 ora_pmon_orcl
31576 31633 LREG oracle 31566 1 0 14:04 ? 00:00:01 ora_psp0_orcl
31576 31624 LG01 oracle 31570 1 1 14:04 ? 00:01:52 ora_vktm_orcl
… oracle 31576 1 0 14:04 ? 00:00:05 ora_u004_orcl
31590 31608 DIA0 oracle 31590 1 0 14:04 ? 00:00:35 ora_u005_orcl
31590 31590 SCMN oracle 31598 1 0 14:04 ? 00:00:00 ora_u006_orcl
31590 31642 D000 oracle 31612 1 0 14:04 ? 00:00:00 ora_dbw0_orcl
… $
31598 31602 OFSD $ ps -eLo "pid tid comm args" | grep ora_
31598 31598 SCMN 31562 31562 ora_pmon_orcl ora_pmon_orcl
31612 31612 DBW0 31566 31566 ora_psp0_orcl ora_psp0_orcl
31570 31570 ora_vktm_orcl ora_vktm_orcl
47 rows selected. 31576 31576 ora_scmn_orcl ora_u004_orcl
SQL> 31576 31579 oracle ora_u004_orcl
31576 31580 ora_gen0_orcl ora_u004_orcl
31576 31583 ora_mman_orcl ora_u004_orcl
$

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

本幻灯片为您显示了如何查看各种线程和 OS 进程,以将其与 Oracle 进程关联。


V$PROCESS 中的 SPID 和 STID 列显示了 OS 进程 ID 与线程 ID 之间的关系。
在操作系统级别,可以检索 OS 进程 ID 与相应线程 ID 之间的关系,以及 Oracle 进程与
OS 进程名称之间的关系。

Oracle Database 12c:新功能 - 面向管理员 20-26


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

数据库智能闪存高速缓存增强功能

• 闪存高速缓存中有多个闪存驱动器

Oracle University and Error : You are not a Valid Partner use only
– 闪存高速缓存设备动态启用/禁用
• 更改为内存中并行查询 (parallel query, PQ) 算法
– 启用了自动 DOP 时
– 缓冲区高速缓存分成 OLTP 和 DW 部分
– 单独的高速缓存替换算法用于 DW 部分

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Oracle Database 11g R2 中,智能闪存高速缓存仅限于一个设备。如果系统中所需的


闪存高速缓存大于单个闪存设备可以提供的闪存高速缓存,ASM 磁盘组或卷管理器需要
将多个设备作为单个设备或文件呈现。
在 Oracle Database 12c 中,最多可以指定 16 个设备作为闪存高速缓存的一部分。可以
动态地启用和禁用这些设备,但是不支持动态地调整闪存高速缓存的大小。
在 Oracle Database 12c 中,已将基于对象的算法添加到标准 LRU 算法,用于管理带有
闪存高速缓存的数据库缓冲区高速缓存,以允许内存中并行查询利用闪存高速缓存。基于
对象的专用策略可以分离缓冲区高速缓存,包括闪存高速缓存,一部分缓冲区替换为基于
对象的专用算法,而另一部分替换为传统的 LRU 算法,也包括原始智能闪存高速缓存算
法。在 RAC 环境中,如果一个大对象小于集群内缓冲区高速缓存和闪存高速缓存组合的
总大小,则该对象将进行分区并完全存入内存和闪存。使用内存中并行查询,可以消除该
查询的磁盘读取,或者智能地从磁盘并行读取,以增加读取带宽。
注:通过将初始化参数 PARALLEL_DEGREE_POLICY 设置为 AUTO 使用自动并行度(自
动 DOP)时,将启用这种新算法。

Oracle Database 12c:新功能 - 面向管理员 20-27


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

启用和禁用闪存设备

• 在实例启动时指定闪存设备。

Oracle University and Error : You are not a Valid Partner use only
db_flash_cache_file = /dev/raw/sda, /dev/raw/sdb
db_flash_cache_size = 32G, 64G

• 禁用闪存设备。

db_flash_cache_size = 0, 64G

• 启用闪存设备。

db_flash_cache_size = 32G, 64G

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Oracle Database 12c 中,可以在实例启动时在 SPFILE 或测试参数文件中指定闪存设


备及其大小。尽管无法动态地更改闪存高速缓存的大小,但是可以按幻灯片中所示启用和
禁用各个设备。
DB_FLASH_CACHE_FILE 参数不是动态参数,只能在实例启动时设置。指定最多 16 个
OS 设备的逗号分隔列表。显示的示例适合 Linux 系统。
在本示例中,闪存设备 /dev/raw/sda 在启动时初始化为 32 GB。使用 ALTER
SYSTEM SET 命令,可以通过将大小设置为 0 来禁用 /dev/raw/sda。也可以使
/dev/raw/sda 回到以前的大小,即 32 GB。不能使用这种方法更改设备的大小,或者
更改指定的设备。
如果设备列表中只有一个设备且其大小设置为 0,表明已禁用闪存高速缓存。

Oracle Database 12c:新功能 - 面向管理员 20-28


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

内存中 PQ 算法:优点

• 允许并行查询利用智能闪存高速缓存

Oracle University and Error : You are not a Valid Partner use only
• 允许并行读取智能闪存高速缓存和磁盘
• 不会使缓冲区高速缓存或闪存高速缓存发生崩溃
• 在 I/O 与 CPU 资源之间寻求最佳平衡

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

内存中 PQ 对象替换算法用于通过在大集群中的计算节点上使用闪存高速缓存来支持数
据仓库可伸缩性。在运行混合工作量或者有时从 OLTP 更改为 DSS 的工作量的较小实
例中,这种算法的优点也显而易见。这种算法不会替换 LRU 算法,而是存在于同一实
例中。
这种算法:
• 允许并行查询利用智能闪存高速缓存
• 并行读取智能闪存高速缓存和磁盘
• 不会为了存储某个对象的更多部分而强制该对象已高速缓存的部分退出高速缓存
• 不会强制主要 LRU 算法使用的缓冲区块退出缓冲区高速缓存或闪存高速缓存
• 在 I/O 与 CPU 资源之间寻求最佳平衡

Oracle Database 12c:新功能 - 面向管理员 20-29


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

智能闪存高速缓存:新统计信息

用于衡量对象替换算法使用情况的几种新统计信息包括:

Oracle University and Error : You are not a Valid Partner use only
• 数据仓库扫描的块数
• 数据仓库扫描的块数 - 磁盘
• 数据仓库扫描的块数 - 闪存
• 数据仓库扫描的块数 - 内存
• 数据仓库扫描的对象数

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

• 数据仓库扫描的块数:已使用 12c 内存中 PQ 数据仓库扫描功能扫描的 1 MB 块数


• 数据仓库扫描的块数 - 磁盘:已使用 12c 内存中 PQ 数据仓库扫描功能扫描的
1 MB 块数,请求通过磁盘上的直接读取满足
• 数据仓库扫描的块数 - 闪存:已使用 12c 内存中 PQ 数据仓库扫描功能扫描的
1 MB 块数,请求通过数据库智能闪存高速缓存中的缓冲区满足
• 数据仓库扫描的块数 - 内存:已使用 12c 内存中 PQ 数据仓库扫描功能扫描的
1 MB 块数,请求通过内存中的缓冲区满足
• 数据仓库扫描的对象数:已使用 12c 内存中 PQ 数据仓库扫描功能扫描的对象数

Oracle Database 12c:新功能 - 面向管理员 20-30


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

临时还原:概览

存储在 存储在
临时表空间 用户表空间

Oracle University and Error : You are not a Valid Partner use only
如果使用 如果未使用
临时还原 临时还原
临时表 永久表

临时 永久
重做
还原 还原

存储在 存储在 存储在


临时表空间 还原表空间 重做日志文件

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

系统会广泛使用临时表作为暂存区来存放中间结果。这是因为更改这些表的速度远远超过
更改非临时表的速度。性能之所以会改进,主要是因为不会为临时表中的更改直接生成重
做条目。但是,对临时表(和索引)的操作的还原数据仍会记录在重做日志中。
临时表的还原数据对于在临时对象生存期中实现读取一致性和事务处理回退非常有用。除
此之外,不需要该还原数据。因此,它无需保存在重做流中。例如,事务处理恢复将放弃
临时对象的还原数据。
从 Oracle Database 12c 开始,可以将由临时表的事务处理生成的还原数据直接存储在临
时表空间的一个单独还原流中,以避免将该还原数据记录在重做流中。这种新模式称为临
时还原。
注:临时还原段是会话专用的。它将存储对属于相应会话的临时表(一般为临时对象)所
做的更改的还原数据。

Oracle Database 12c:新功能 - 面向管理员 20-31


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

临时还原:优点和设置

• 临时还原可减少还原表空间中存储的还原数据量。

Oracle University and Error : You are not a Valid Partner use only
• 临时还原可减小重做日志的大小。
• 临时还原支持在具有 Oracle Active Data Guard 选件的
物理备用数据库中对临时表执行 DML 操作。

SQL> ALTER SESSION SET TEMP_UNDO_ENABLED = TRUE;

SQL> ALTER SYSTEM SET TEMP_UNDO_ENABLED = TRUE;

• 会话首次使用临时对象时会选择临时还原模式。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

启用临时还原具有以下优点:
• 临时还原可减少还原表空间中存储的还原数据量。还原表空间中的还原数据越少,还
原记录所需要的还原保留期越实际。
• 临时还原可减小重做日志的大小。由于写入重做日志的数据较少,因此性能会有所提
高,并且由于要进行语法分析的重做数据较少,因此,用于对重做日志记录进行语法
分析的组件(如 LogMiner)性能也会有所提高。
• 临时还原支持在具有 Oracle Active Data Guard 选件的物理备用数据库中对临时表执
行数据操纵语言 (DML) 操作。但是,必须在主数据库上发出创建临时表的数据操纵语
言 (DDL) 操作。
可以为特定会话或整个系统启用临时还原。为某个会话启用临时还原时,该会话将创建临
时还原,而不影响其他会话。当会话首次使用临时对象时,系统将为该会话的其余部分设
置 TEMP_UNDO_ENABLED 初始化参数的当前值。因此,如果为某个会话启用了临时还原,
并且该会话使用临时对象,则无法为该会话禁用临时还原。同样,如果为某个会话禁用了
临时还原,并且该会话使用临时对象,则无法为该会话启用临时还原。为系统启用临时还
原时,所有现有会话和新会话都将创建临时还原。

Oracle Database 12c:新功能 - 面向管理员 20-32


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

临时还原监视

SQL> SELECT to_char(BEGIN_TIME,'dd/mm/yy hh24:mi'),


TXNCOUNT,MAXCONCURRENCY,UNDOBLKCNT,USCOUNT,

Oracle University and Error : You are not a Valid Partner use only
NOSPACEERRCNT
FROM V$TEMPUNDOSTAT;

TO_CHAR(BEGIN_ TXNCOUNT MAXCONCURRENCY UNDOBLKCNT USCOUNT NOSPACEERRCNT


-------------- -------- -------------- ---------- ------- -------------

19/02/14 22:19 0 0 0 0 0
19/02/14 22:09 0 0 0 0 0

19/02/14 13:09 0 0 0 0 0
19/02/14 12:59 3 1 24 1 0

576 rows selected.

SQL>

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

V$TEMPUNDOSTAT 显示了与此数据库实例的临时还原日志相关的各种统计信息。它将
显示统计数据直方图,以展示系统的运行情况。该视图的每一行会保存从实例中收集的
10 分钟间隔统计信息。各个行按 BEGIN_TIME 列值降序排列。此视图总共包含 576 行,
跨越一个四天周期。此视图与 V$UNDOSTAT 视图类似。
该示例显示了 V$TEMPUNDOSTAT 视图中的一些重要列:
• BEGIN_TIME:确定时间间隔的开始。
• TXNCOUNT:在相应的时间间隔内绑定到临时还原段的事务处理总数。
• MAXCONCURRENCY:并行执行的最多事务处理数,这些事务处理会在相应的时间间
隔内修改临时对象。
• UNDOBLKCNT:在相应的时间间隔内占用的临时还原块总数。
• USCOUNT:在相应的时间间隔内创建的临时还原段。
• NOSPACEERRCNT:在相应的时间间隔内引发错误“no space left for temporary
undo(没有用于临时还原的剩余空间)”的总次数。
注:有关 V$TEMPUNDOSTAT 的详细信息,请参阅《Oracle Database Reference》指南。

Oracle Database 12c:新功能 - 面向管理员 20-33


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

限制程序全局区的大小

• PGA 内存使用量可能会因为以下原因超过

Oracle University and Error : You are not a Valid Partner use only
PGA_AGGREGATE_TARGET 设置的值:
– PGA_AGGREGATE_TARGET 是一个目标,而不是一个限制
– PGA_AGGREGATE_TARGET 仅控制可优化内存的分配
• 使用 PGA_AGGREGATE_LIMIT 初始化参数指定 PGA
内存使用量的硬限制
• 当达到 PGA_AGGREGATE_LIMIT 时
– 使用最多不可优化内存的会话将中止其调用。
– 如果 PGA 总内存使用量仍然超过限制,则使用最多不可
优化内存的会话将被终止。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在自动 PGA 内存管理模式下,Oracle DB 尝试通过动态控制分配给工作区的 PGA 内存


量遵从 PGA_AGGREGATE_TARGET 中指定的值。但是,有时候 PGA 内存使用量可能会
因为以下原因超过 PGA_AGGREGATE_TARGET 指定的值:
• PGA_AGGREGATE_TARGET 是一个目标,而不是一个限制。
• PGA_AGGREGATE_TARGET 仅控制可优化内存的分配。
过多的 PGA 使用量可能会导致高交换率。如果发生这种情况,请考虑使用
PGA_AGGREGATE_LIMIT 初始化参数限制整体的 PGA 使用量。
PGA_AGGREGATE_LIMIT 允许您针对 PGA 内存使用量指定硬限制。如果超过了
PGA_AGGREGATE_LIMIT 值,则 Oracle DB 将中止或终止使用最多不可优化 PGA 内存
的会话或进程。行查询会被视为一个单元。
默认情况下,PGA_AGGREGATE_LIMIT 设置为 2 GB、PGA_AGGREGATE_TARGET 值的
两倍,或者 3 MB 与 PROCESSES 参数值的乘积中较大的一个。但是,它不会超过物理内
存大小减去 SGA 总大小的 120%。默认值写入预警日志。如果无法确定系统物理内存的
量,则警告消息将写入预警日志。
SYS 和后台会话可以不受限制的影响,但是作业队列进程不可以。

Oracle Database 12c:新功能 - 面向管理员 20-34


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED






限制 PGA 的大小
将临时还原用于临时表
在本课中,您应该已经学会:
小结

在 CDB 环境中使用资源管理器

描述多进程多线程 Oracle 体系结构


控制由 IM 列存储填充操作消耗的资源

描述数据库智能闪存高速缓存增强功能

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 20-35


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED



的资源
练习 20:概览

20-2:设置和监视多进程多线程体系结构

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 20-36


20-1:使用资源管理器处理在 CDB 及其 PDB 中共享

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


表、索引和联机操作增强功能

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle Database 12c 新增功能和增强功能


Enterprise Manager Enterprise Manager Enterprise Manager
Cloud Control Database Express
其他工具
和其他工具

基础功能 CDB 和 PDB 创建 CDB 和 PDB 管理


CDB 和 PDB

Oracle University and Error : You are not a Valid Partner use only
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录

安全性 统一审计 权限分析 数据编写

HA RMAN

易管理性 DB 操作 实时 ADDM 比较时段 ADDM ADR


12.1.0.2 12.1.0.2

内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速
12.1.0.2
SQL 优化 资源管理器 索引、表
缓存

数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c 中的表和索引新功能包括不可见列、同一组列多个索引、压缩和联


机操作增强功能。

Oracle Database 12c:新功能 - 面向管理员 21-2


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

课程目标

学完本课后,应能完成以下工作:

Oracle University and Error : You are not a Valid Partner use only
• 说明同一组列多个索引
• 描述对不可见列和隐藏列的支持
• 描述联机重新定义增强功能
• 描述高级行压缩
• 使更多 DDL 语句无阻塞

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要全面了解同一组列多个索引以及表中的不可见列,请参阅 Oracle 文档中的以下指南:


• 《Oracle Database Administration Guide 12c Release 1 (12.1)》
- “Managing Tables”一章
- “Managing Indexes”一章
要全面了解表压缩,请参阅 Oracle 文档中的以下指南:
• 《Oracle Database Concepts 12c Release 1 (12.1)》
- “Tables and Table Clusters” 一章 - Table Compression
• Oracle Database PL/SQL Packages and Types Reference

Oracle Database 12c:新功能 - 面向管理员 21-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

为什么同一组列有多个索引

• 执行应用程序移植而不删除现有索引,而使用其他属性

Oracle University and Error : You are not a Valid Partner use only
重新创建索引。
• 多个不同索引:
– 唯一索引和非唯一索引

c1 c2 c3 c4 c5

– 不同分区:本地分区和全局分区

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

当以下索引特性至少有一个不同时,可以对同一组列创建多个索引:
• 索引类型不同。不过,请注意以下例外情况:
- 无法对同一组列创建 B 树索引和 B 树簇索引。
- 无法对同一组列创建 B 树索引和按索引组织的表。
• 索引使用不同分区:
- 未分区的索引和分区的索引
- 本地分区的索引和全局分区的索引
- 分区类型不同(范围或散列)的索引
• 索引具有不同的唯一属性:可以对同一组列创建唯一索引和非唯一索引。
当同一组列有多个索引时,一次只有一个索引可见。

Oracle Database 12c:新功能 - 面向管理员 21-4


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

对同一组列创建多个索引

一次只有一个索引可见。

Oracle University and Error : You are not a Valid Partner use only
c1 c2 c3 c4 c5

c1 c2 c3 c4 c5

如果 OPTIMIZER_USE_INVISIBLE_INDEXES=TRUE,
优化程序会使用不可见索引。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

同一组列有多个索引时,一次只有一个索引可见。
如果要创建一个可见索引,则该组列的任何现有索引都必须不可见。也可以使同一组列的
其他索引不可见,或对该组列创建不可见的索引。
如果 OPTIMIZER_USE_INVISIBLE_INDEXES 设置为 True,则优化程序可使用不可见
索引来创建计划。

Oracle Database 12c:新功能 - 面向管理员 21-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SQL> create table T1 as select * from hr.employees;


SQL> create index t1_i1 on T1 (employee_id) invisible;
SQL> create index t1_i2 on T1 (employee_id) reverse;
SQL> alter session set optimizer_use_invisible_indexes = true;
SQL> explain plan for select employee_id, last_name from T1 where
employee_id=100;

Oracle University and Error : You are not a Valid Partner use only
Execution Plan
----------------------------------------------------------
Plan hash value: 2242215931
------------------------------------------------------------------
| Id | Operation | Name |
------------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID BATCHED| T1 |
|* 2 | INDEX RANGE SCAN | T1_I1 |
------------------------------------------------------------------

Oracle Database 12c:新功能 - 面向管理员 21-6


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:b
b. 错
a. 对
查询性能。

而只能决定是否使用可见索引。
测验

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 21-7


同一组列有多个索引时,优化程序会选择最佳索引以提高

同一组列有多个索引时,只有一个索引可见。因此,优化程序没有多个索引可供选择,

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SQL*Plus 中的不可见列和隐藏列

• 不可见列是用户指定的隐藏列。
SQL> CREATE TABLE mytab (col1 VARCHAR2(10),

Oracle University and Error : You are not a Valid Partner use only
col2 NUMBER INVISIBLE);

SQL> DESC mytab


Name Null? Type 不可见列未显示
------------------------------ ------ --------------
COL1 VARCHAR2(10)

– 可在以后设为可见
• 隐藏列不会影响访问表的现有应用程序。
• 只有通过在查询和其他操作中显式引用隐藏列的名称,
才能访问隐藏列。
SQL> INSERT INTO mytab (col1, col2) values ('A',1);

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

引入不可见列是为了让开发人员能增强应用程序,以满足业务规则和要求的不断变化。不
可见列是用户指定的隐藏列。使用不可见列,在开发人员增强应用程序以满足新的业务要
求的同时,用户也可以访问该应用程序。在将新业务要求合并到应用程序中后,可以公开
不可见列。可以在表中添加一个隐藏列,稍后再使用 ALTER TABLE MODIFY 语句将其
设为可见。
用户可以无缝地在表中添加隐藏列,而不会影响访问该表的现有应用程序。在将
INVISIBLE 列指定为 CREATE TABLE 的一部分时,可以将其用作分区键。可以将不可
见列指定为虚拟列。无法在 INSERT 语句的 VALUES 子句中为 INVISIBLE 列隐式指定
值。必须在列的列表中指定 INVISIBLE 列。只有通过在查询和其他操作中显式引用隐藏
列的名称,才能访问隐藏列。
注:不可见列与系统生成的隐藏列不同。
您可以将不可见列设为可见,但无法将隐藏列设为可见。
SQL> ALTER TABLE mytab MODIFY (col2 VISIBLE);

Oracle Database 12c:新功能 - 面向管理员 21-8


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SET COLINVISIBLE 和 DESCRIBE 命令

SET COLINVISIBLE 命令用于在 DESCRIBE 命令中显示

Oracle University and Error : You are not a Valid Partner use only
不可见的列。
SQL> SET COLINVISIBLE ON

SQL> DESC mytab


Name Null? Type
----------------------------- ------- ------------------------
COL1 VARCHAR2(10)
COL2 (INVISIBLE) NUMBER

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

SET COLINVISIBLE 命令可以使用户在 DESCRIBE 命令中显示不可见列。该语法有一个


ON/OFF 选项。ON 表示在 DESCRIBE 命令中显示不可见列的元数据,OFF 表示不显示元
数据。
如果表中不包含不可见列,则 COLINVISIBLE 标记不会影响 DESCRIBE 命令。
代码示例显示了 SET COLINVISIBLE 命令的用法及其对 DESCRIBE 结果的影响。

Oracle Database 12c:新功能 - 面向管理员 21-9


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:b
b. 错
a. 对
显示不可见列定义。
测验

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

设置为 ON 时,SET COLINVISIBLE 命令会显示不可见列定义。

Oracle Database 12c:新功能 - 面向管理员 21-10


SET COLINVISIBLE 命令不允许您在 DESCRIBE 命令中

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

联机重新定义:包含 VPD 的表
重新定义包含虚拟专用数据库 (VPD) 策略的表,而不更改表中
任何列的属性。
1. 使用 DBMS_RLS.ADD_POLICY 过程,在 HR.EMP 表中应用
VPD 策略

Oracle University and Error : You are not a Valid Partner use only
SQL> EXEC DBMS_RLS.ADD_POLICY ( object_schema => 'hr',-
object_name => 't1', policy_name => 't1_pol',-
function_schema => 'sys', policy_function=> 'auth_sal',-
statement_types => 'select, insert, update, delete')

2. 开始重新定义过程:
a. 验证该表是否是联机重新定义的潜在候选对象。
b. 创建临时表。
c. 开始重新定义。
SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE ( uname => 'hr',-
orig_table => 't1', int_table => 'int_t1',-
options_flag => DBMS_REDEFINITION.CONS_USE_PK,-
copy_vpd_opt => DBMS_REDEFINITION.CONS_VPD_AUTO)

3. 完成重新定义过程。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

您可以在表中应用虚拟专用数据库 (VPD) 策略,以限制用户在 SELECT 和 DML 操作中


选择或修改的数据。
如果要重新定义的原始表包含 VPD 策略,可以在
DBMS_REDEFINITION.START_REDEF_TABLE 过程中使用 copy_vpd_opt 参数,以
在联机重新定义期间处理这些策略。
copy_vpd_opt 参数的可能值如下:
• DBMS_REDEFINITION.CONS_VPD_NONE:如果原始表没有 VPD 策略,则指定此
值。这是默认值。如果指定此值,但原始表存在 VPD 策略,则会发生错误。
• DBMS_REDEFINITION.CONS_VPD_AUTO:指定此值可在联机重新定义期间自动将
VPD 策略从原始表复制到新表。只有表所有者和调用联机重新定义的用户可以在联
机重新定义期间访问临时表。
• DBMS_REDEFINITION.CONS_VPD_MANUAL:指定此值可在联机重新定义期间手
动将 VPD 策略从原始表复制到新表。
- 为原始表指定了 VPD 策略,且在原始表和临时表之间进行了列映射。
- 您需要在联机重新定义表时添加或修改 VPD 策略。

Oracle Database 12c:新功能 - 面向管理员 21-11


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

联机重新定义:dml_lock_timeout
FINISH_REDEF_TABLE 过程中的 dml_lock_timeout
参数指定该过程等待待处理 DML 提交的时长。
1. 验证该表是否可以联机重新定义。

Oracle University and Error : You are not a Valid Partner use only
SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE (…);

2. 创建临时表。
3. 开始重新定义。
SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE (…);

4. 复制从属对象。
SQL> EXEC DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS (…);

5. 完成重新定义过程。
SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE (uname => 'hr',-
orig_table => 't1', int_table => 'int_t1'-
dml_lock_timeout => 100)

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

完成联机重新定义过程后,便可执行 FINISH_REDEF_TABLE 过程。在此过程中,原始


表会在极短的时间段内以独占模式锁定,该时间段与原始表中的数据量无关。但是,
FINISH_REDEF_TABLE 会等待所有待处理 DML 提交之后再完成重新定义。
可以在 FINISH_REDEF_TABLE 过程中使用 dml_lock_timeout 参数,指定该过程等
待待处理 DML 提交的时长。该参数指定该过程正常结束之前等待的秒数。
• 如果为该参数指定了非空值,则可以重新启动该过程,它会从超时的那一刻继续。
• 如果将该参数设置为空,则该过程不会超时。在这种情况下,如果手动停止该过程,
则必须使用 ABORT_REDEF_TABLE 过程中止联机表重新定义,然后从步骤 5 开头
重新开始(如幻灯片中所示)。

Oracle Database 12c:新功能 - 面向管理员 21-12


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

高级行压缩:新功能名称和语法

11g COMPRESS 12c ROW STORE COMPRESS

Oracle University and Error : You are not a Valid Partner use only
方法 CREATE 和 典型应用 方法 CREATE 和 典型应用
ALTER TABLE ALTER TABLE

基本 COMPRESS DSS 基本 ROW STORE DSS


[BASIC] COMPRESS

OLTP COMPRESS OLTP、 高级 ROW STORE OLTP、


FOR OLTP DSS COMPRESS DSS
ADVANCED

SQL> CREATE TABLE tab1 SQL> CREATE TABLE tab1 ROW


COMPRESS [BASIC]; STORE COMPRESS [BASIC];

SQL> CREATE TABLE tab1 SQL> CREATE TABLE tab1 ROW


COMPRESS FOR OLTP; STORE COMPRESS ADVANCED;

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 11g 扩展了压缩技术,以支持常规数据处理操作,例如 INSERT、


UPDATE 和 DELETE。因此,压缩功能可用于各种工作量,不管是联机事务处理 (OLTP)
还是数据仓库。
Oracle Database 12c 对 OLTP 压缩进行了增强。在 11g 发行版 1 中 OLTP 压缩功能作
为高级压缩选件 (ACO) 的一部分发布。OLTP 压缩现在称为高级行压缩,可提高空间节
省量并提供更高压缩率。OLTP 和 BASIC 压缩的一个问题是在某行更新时,该行中直到
更新所引用的最高列的所有列都会解压缩。现在,只有更新的列会解压缩。OLTP 压缩
不支持 255 个以上的列,而行存储压缩支持 255 个以上的列。现在,行存储压缩的表支
持收缩空间操作。
行存储或列存储是表的属性,就如同组织子句一样。压缩和锁定选项是存储的选项。
ROW STORE 和 COMPRESS 是用于压缩表的新属性(ROW STORE 与 COLUMN STORE
或 HCC)。
ADVANCED 和 BASIC 是压缩类型,统一用于表、索引和 LOB,表示它是 ACO 的一
部分。

Oracle Database 12c:新功能 - 面向管理员 21-13


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

LOB 压缩:新名称

11g 12c

Oracle University and Error : You are not a Valid Partner use only
SecureFile 压缩 高级 LOB 压缩

SecureFile 取消重复 高级 LOB 取消重复

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

SecureFile LOB
在 Oracle Database 12c 中,高级压缩选项中与 SecureFile 相关的两个功能的名称已
更改:
• SecureFile 压缩现在称为高级 LOB 压缩。
• SecureFile 取消重复现在称为高级 LOB 取消重复。

Oracle Database 12c:新功能 - 面向管理员 21-14


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用压缩指导

• 压缩指导有助于确定最佳压缩率。

Oracle University and Error : You are not a Valid Partner use only
BEGIN
DBMS_COMPRESSION.GET_COMPRESSION_RATIO (
'USERS', 'HR', 'EMP', NULL, DBMS_COMPRESSION.COMP_ADVANCED,
blkcnt_cmp, blkcnt_uncmp, row_cmp, row_uncmp, cmp_ratio,
comptype_str,1000,1);
DBMS_OUTPUT.PUT_LINE('Block count compressed = ' || blkcnt_cmp);
DBMS_OUTPUT.PUT_LINE('Block count uncompressed = ' || blkcnt_uncmp);
DBMS_OUTPUT.PUT_LINE('Row count per block compressed = ' || row_cmp);
DBMS_OUTPUT.PUT_LINE('Row count per block uncompressed=' || row_uncmp);
DBMS_OUTPUT.PUT_LINE('Compression type = ' || comptype_str);
DBMS_OUTPUT.PUT_LINE('Comp ratio= '|| blkcnt_uncmp/blkcnt_cmp||'to 1');
END;

• DBA_TABLES 视图中 COMPRESS_FOR 列中的新压缩


类型

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

压缩指导进行了增强,以显示新的高级压缩类型。
SQL> set serveroutput on
DECLARE
blkcnt_cmp pls_integer;
blkcnt_uncmp pls_integer;
row_cmp pls_integer;
row_uncmp pls_integer;
cmp_ratio pls_integer;
comptype_str varchar2(100);
BEGIN
DBMS_COMPRESSION.GET_COMPRESSION_RATIO (
'USERS', 'HR', 'EMP', NULL, DBMS_COMPRESSION.COMP_ADVANCED,
blkcnt_cmp, blkcnt_uncmp, row_cmp, row_uncmp, cmp_ratio,
comptype_str,1000,1);
DBMS_OUTPUT.PUT_LINE('Block count compressed = ' || blkcnt_cmp);
DBMS_OUTPUT.PUT_LINE('Block count uncomp = ' || blkcnt_uncmp);
DBMS_OUTPUT.PUT_LINE('Compression type = ' || comptype_str);
DBMS_OUTPUT.PUT_LINE('Ratio = '||blkcnt_uncmp/blkcnt_cmp||' to 1');
END;
/
Block count compressed = 5
Block count uncompressed = 7
Compression type = "Compress Advanced"
Compression ratio = 1.4 to 1
PL/SQL procedure successfully completed.

Oracle Database 12c:新功能 - 面向管理员 21-15


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

增强的联机 DDL 功能

可以使用新的 ONLINE 关键字来允许在以下 DDL 操作期间

Oracle University and Error : You are not a Valid Partner use only
执行 DML 语句:
• DROP INDEX
• DROP CONSTRAINT
• ALTER INDEX UNUSABLE
• SET COLUMN UNUSED

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

从 Oracle Database 12c 发行版 1 (12.1) 开始,可以使用新的 ONLINE 关键字来允许在


以下 DDL 操作期间执行 DML 语句:
• DROP INDEX
• DROP CONSTRAINT
• ALTER INDEX UNUSABLE
• SET COLUMN UNUSED
此增强功能可让用户更简单地进行应用程序开发,尤其是进行应用程序移植。方案维护操
作不会对应用程序产生任何干扰。

Oracle Database 12c:新功能 - 面向管理员 21-16


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

DROP INDEX / CONSTRAINT

• ONLINE 表示在删除索引时允许对表或分区执行 DML

Oracle University and Error : You are not a Valid Partner use only
操作。
• 分区索引和非分区索引都支持联机 DROP INDEX。
SQL> DROP INDEX schema.index ONLINE FORCE;

• 联机 DROP CONSTRAINT 可让您从数据库中删除完整


性约束条件,但有一些限制:
– 无法删除包含 CASCADE 的约束条件
– 无法删除引用约束条件
SQL> ALTER TABLE hr.employees
DROP CONSTRAINT emp_email_uk ONLINE;

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

DROP INDEX 语句用于从数据库中删除索引或域索引。分区索引和非分区索引都支持联


机删除索引。
ONLINE:指定 ONLINE 表示在删除索引时允许对表或分区执行 DML 操作。
FORCE:FORCE 仅适用于域索引。此子句会删除域索引,即使索引类型例程调用返回错
误或索引标记为 IN PROGRESS。如果不使用 FORCE,则无法在索引类型例程调用返回
错误或索引标记为 IN PROGRESS 时删除域索引。
对删除索引的限制:
• 如果索引或其任何索引分区标记为 IN_PROGRESS,则无法删除域索引。
• 在删除域索引、簇索引或队列表中的索引时,无法指定 ONLINE 子句。
对删除约束条件的限制:
• 无法删除包含 CASCADE 的约束条件。
• 无法删除引用其他依赖关系的约束条件。

Oracle Database 12c:新功能 - 面向管理员 21-17


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

索引 UNUSABLE

• 指定 UNUSABLE 子句,以将索引、索引分区或索引子
分区标记为 UNUSABLE。

Oracle University and Error : You are not a Valid Partner use only
• 指定 ONLINE 子句,表示在将索引标记为 UNUSABLE
时允许对表或分区执行 DML 操作。
SQL> ALTER INDEX hr.i_emp_ix UNUSABLE ONLINE;

SQL> SELECT status FROM user_indexes


WHERE table_name='EMP';

INDEX_NAME STATUS
------------------------ ------------
I_EMP_IX UNUSABLE

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

指定 UNUSABLE 关键字,以将索引、索引分区或索引子分区标记为 UNUSABLE。在将对


象标记为 UNUSABLE 时,为索引、索引分区或索引子分区分配的空间会立即释放。无法
使用的索引必须重新构建或者必须删除并重新创建,然后才能使用。将一个分区标记为
UNUSABLE 时,索引的其他分区仍然有效。从 Oracle 12c 开始,通过指定 ONLINE 关键
字来使 ALTER INDEX UNUSABLE 子句联机,表示在将索引标记为 UNUSABLE 时允许对
表或分区执行 DML 操作。如果指定此子句,数据库不会删除索引段。
注:无法为临时表中的索引指定 UNUSABLE。

Oracle Database 12c:新功能 - 面向管理员 21-18


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SET UNUSED 列

• SET UNUSED 子句可以是释放数据库空间的第一步,


方法是删除不再需要的列。

Oracle University and Error : You are not a Valid Partner use only
• ONLINE 关键字表示在将列标记为 UNUSED 时允许对表
执行 DML 操作。
SQL> CREATE TABLE emp (ename VARCHAR2(20), id NUMBER);
SQL> INSERT INTO emp VALUES('Tim',4);
SQL> SELECT * FROM emp;
SQL> ALTER TABLE emp SET UNUSED (ename) ONLINE;

SQL> DESC emp;


Name Null? Type
---------------- ------ ----------------------------
ID NUMBER

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

drop_column_clause 可以是释放数据库空间的第一步,方法是删除不再需要的列或在系
统资源的需求变低时将其标记为在以后删除。
可指定 SET UNUSED 关键字以将一个或多个列标记为未使用列。为外部表中的列指定该
子句时,该子句会透明地转换为 ALTER TABLE ... DROP COLUMN 语句。因为对外部表
执行的任何操作都仅针对元数据进行,所以这两个指令的性能并没有差别。未使用列被视
为已删除列,即使其列数据仍保留在表行中。将某列标记为 UNUSED 之后,您将无法访
问该列。执行 SELECT * 查询时不会检索未使用列中的数据。另外,执行 DESCRIBE 时
不会显示标记为 UNUSED 的列的名称和类型,因此您可以在表中添加一个与未使用列同
名的新列。
指定 ONLINE 关键字以表示在将一个或多个列标记为 UNUSED 时允许对表执行 DML
操作。
在将具有 DEFERRABLE 约束条件的列标记为未使用列时,无法指定 ONLINE 子句。后续
DROP UNUSED COLUMNS 会以物理方式从表中删除所有未使用列,如同 DROP COLUMN
一样。

Oracle Database 12c:新功能 - 面向管理员 21-19


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED





描述高级行压缩
说明同一组列多个索引

使更多 DDL 语句无阻塞


在本课中,您应该已经学会:

描述联机重新定义增强功能
小结

描述对不可见列和隐藏列的支持

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 21-20


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED



21-2:使用高级行压缩
21-1:使用不可见/可见列
练习 21:概览

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 21-21


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

其他
课程单元

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


Oracle 数据泵、SQL*Loader 和外部表

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle Database 12c 新增功能和增强功能


Enterprise Manager Enterprise Manager Enterprise Manager
Cloud Control Database Express
其他工具
和其他工具

基础功能 CDB 和 PDB 创建 CDB 和 PDB 管理


CDB 和 PDB

Oracle University and Error : You are not a Valid Partner use only
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录

安全性 统一审计 权限分析 数据编写

HA RMAN

易管理性 DB 操作 实时 ADDM 比较时段 ADDM ADR


12.1.0.2 12.1.0.2

内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速
12.1.0.2
SQL 优化 资源管理器 索引、表
缓存

数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

有多项 Oracle 数据泵、SQL*Loader 和外部表增强功能。您还将检验 SQL*Loader 快速


模式功能。

Oracle Database 12c:新功能 - 面向管理员 22-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

课程目标

学完本课后,应能完成以下工作:

Oracle University and Error : You are not a Valid Partner use only
• 描述 Oracle 数据泵的完全可移动功能
• 描述 Oracle Database 12c 中数据泵、SQL*Loader 和
外部表的各项新功能
• 描述 Oracle 数据泵和 SQL*Loader 新功能的适用使用
情形和配置详细信息
• 描述 SQL*Loader 快速模式

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要全面了解 Oracle 数据泵的新功能,请参阅 Oracle 文档中的以下指南:


• 《Oracle Database Utilities 12c Release 1 (12.1)》
请参阅其他可用信息来源:
• My Oracle Support 简讯:“Reduce Transportable Tablespace Downtime Using
Cross Platform Incremental Backups”(文档 ID 1389592.1)
• Oracle 白皮书:“Upgrading to Oracle Database 12c”
(http://www.oracle.com/technetwork/database/upgrade/upgrading-oracle-database-
wp-12c-1896123.pdf)
• Oracle 白皮书:“Oracle Database 12c:Full Transportable Export/Import”
(http://www.oracle.com/technetwork/database/enterprise-edition/full-transportable-
wp-12c-1973971.pdf)

Oracle Database 12c:新功能 - 面向管理员 22-4


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

完全可移动导出/导入:概览

升级至新发行版 Oracle DB

Oracle University and Error : You are not a Valid Partner use only
将数据库移动到新计算机系统

• 将非 CDB(Oracle Database 11.2.0.3 及更高版本)


移动到其他非 CDB。
• 将非 CDB(11.2.0.3 及更高版本)作为 PDB 移动
到 CDB。
• 将 PDB 移动到其他 PDB。
• 将 PDB 移动到非 CDB。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

完全可移动导出/导入功能可用于多种情形:
• 升级至新发行版 Oracle DB:可以使用完全可移动导出/导入功能将数据库从
11.2.0.3 或更高版本升级至 Oracle Database 12c。要执行上述升级操作,请安装
Oracle Database 12c 并创建一个空数据库。接着,使用完全可移动导出/导入功能
将 11.2.0.3 数据库移动到 Oracle Database 12c 数据库。
• 将数据库移动到新计算机系统:可以使用完全可移动导出/导入功能将数据库从一个
计算机系统移动到另一个计算机系统。您可能想要将数据库移动到新计算机系统以
升级硬件,或将数据库移动到其他平台上。
• 将非 CDB 移动到非 CDB 或 CDB:移动到 CDB 后,移动的数据库将成为与 CDB
关联的 PDB。完全可移动导出/导入功能可以高效地将 11.2.0.3 或更高版本的数据库
移动到 Oracle Database 12c 数据库。

Oracle Database 12c:新功能 - 面向管理员 22-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

完全可移动导出/导入:用法

完全可移动导出功能会导出所有必要对象和数据,以创建数
据库的完整副本。

Oracle University and Error : You are not a Valid Partner use only
• TRANSPORTABLE=ALWAYS 参数
• FULL 参数

$ expdp user_name FULL=y … TRANSPORTABLE=always

仅当在导出期间使用可移动选项创建转储文件时,完全可移
动导入才会导入该文件。
• TRANSPORT_DATAFILES
• 如果使用了 NETWORK_LINK,则需要:
– TRANSPORTABLE=ALWAYS 参数

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

完全可移动导出功能会导出所有必要对象和数据,以创建数据库的完整副本。将混合使用
多种数据移动方法:
• 位于可移动表空间中的对象仅会将其元数据卸载到转储文件集中。数据本身会在您
将数据文件复制到目标数据库中时进行移动。必须复制的数据文件将列在日志文件
末尾,以供导出操作使用。
• 位于不可移动表空间(例如 SYSTEM 和 SYSAUX)中的对象会使用直接路径卸载和
外部表,将其元数据和数据都卸载到转储文件集中。
示例显示了使用 VERSION 参数的完全可移动导出。如果源数据库是 11.2.0.3 或更高的
Oracle Database 11g 发行版,则需要 VERSION 参数。

Oracle Database 12c:新功能 - 面向管理员 22-6


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

执行完全可移动导出时有以下限制:
• 如果要导出的数据库包含加密表空间或具有加密列(透明数据加密 (TDE) 列或
SecureFile LOB 列)的表,则还必须提供 ENCRYPTION_PASSWORD 参数。
• 如果源数据库中含有加密表空间,则源数据库和目标数据库必须位于具有相同字节
排列顺序 (endianness) 的平台上。
• 如果源平台和目标平台的字节排列顺序 (endianness) 不同,则必须转换要移动的数
据,使其格式与目标平台的格式相同。使用 DBMS_FILE_TRANSFER 程序包或

Oracle University and Error : You are not a Valid Partner use only
RMAN CONVERT 命令。
• 完全可移动导出无法重新启动。
• 具有存储且已选定要导出的所有对象中的所有存储段,必须完全位于不可移动的管
理表空间 (SYSTEM/SYSAUX) 中或完全位于用户定义的可移动表空间中。单个对象的
存储不能跨越这两种表空间。
• 使用完全可移动导出通过网络移动数据库时,含有 LONG 或 LONG RAW 列且位于管
理表空间(例如 SYSTEM 或 SYSAUX)中的表不受支持。
• 使用完全可移动导出通过网络移动数据库时,如果审计线索信息本身存储在用户定
义的表空间中,则无法为存储在管理表空间(例如 SYSTEM 和 SYSAUX)中的表启
用审计。
• 如果源数据库和目标数据库都运行 Oracle Database 12c 发行版 1 (12.1),则必须至
少将 Oracle 数据泵 VERSION 参数设置为 12.0 或将 COMPATIBLE 数据库初始化参
数设置为 12.0 或更高版本,才能执行完全可移动导出。
• 从 11.2.0.3 源数据库开始才支持完全可移动导出。
完全可移动导入
执行完全可移动导入时有以下要求:
• 如果您使用的是网络链接,则在 NETWORK_LINK 参数中指定的数据库必须为
Oracle Database 11g 发行版 2 (11.2.0.3) 或更高版本,且 Oracle 数据泵 VERSION
参数必须至少设置为 12。(在非网络导入中,会从转储文件隐式确定
VERSION=12。)
• 如果源平台和目标平台的 endian 格式不同,则必须转换要移动的数据,使其格式与
目标平台的格式相同。可使用 DBMS_FILE_TRANSFER 程序包或 RMAN CONVERT
命令转换数据。
• 如果源平台和目标平台的 endian 格式不同,则在网络模式或转储文件模式下不支持
对加密表空间进行完全可移动导入。
• 使用完全可移动导入功能通过网络移动数据库时,含有 LONG 或 LONG RAW 列且位
于管理表空间(例如 SYSTEM 或 SYSAUX)中的表不受支持。
• 使用完全可移动导入功能通过网络移动数据库时,如果审计线索信息本身存储在用
户定义的表空间中,则无法为存储在管理表空间(例如 SYSTEM 和 SYSAUX)中的
表启用审计。

Oracle Database 12c:新功能 - 面向管理员 22-7


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

完全可移动导出/导入:示例
目标
源数据库 数据库
在必要时进行 Endian 转换
orcl 数据文件 + prod
RMAN CONVERT

Oracle University and Error : You are not a Valid Partner use only
或 转储文件
移动
DBMS_FILE_TRANSFER
4
1
只读表空间:
• APPL1 5
• HRTBS 3 $ impdp user_name FULL=y
DUMPFILE=expdat.dmp
DIRECTORY=data_pump_dir
TRANSPORT_DATAFILES=
2 '/oracle/oradata/prod/file1.dbf',
'/oracle/oradata/prod/file2.dbf',
$ expdp user_name FULL=y '/oracle/oradata/prod/file3.dbf'
DUMPFILE=expdat.dmp LOGFILE=import.log
DIRECTORY=data_pump_dir
TRANSPORTABLE=always
VERSION=12.0 LOGFILE=export.log

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要执行完全可移动操作,请执行下列步骤:
1. 在导出之前,将数据库中的所有用户定义的表空间置于只读状态。
2. 以具有 DATAPUMP_EXP_FULL_DATABASE 角色的用户身份调用 Oracle 数据泵导出
实用程序,并指定完全可移动导出选项:FULL=Y、TRANSPORTABLE=ALWAYS。
LOGFILE 参数很重要,因为它将包含导入操作需要移动的数据文件的列表。
要在 11.2.0.3 数据库上执行该操作,请使用 VERSION 参数。只有 Oracle Database
12c 数据库才支持完全可移动导入。
3. 导入之前,请移动转储文件。
4. 移动您可能已转换的数据文件。如果要将数据库移动到与源平台不同的平台中,则
请确定源平台和目标平台是否都支持跨平台数据库移动。如果两个平台的 endian 格
式相同,则不必进行转换。否则,必须使用 DBMS_FILE_TRANSFER 或 RMAN
CONVERT 命令转换源平台或目标平台中数据库内的每个表空间。
5. 以具有 DATAPUMP_IMP_FULL_DATABASE 角色的用户身份调用 Oracle 数据泵导入
实用程序,并指定完全可移动导入选项:FULL=Y、TRANSPORT_DATAFILES。
6. 将源表空间置于读写状态。可以在步骤 5 之前执行此操作。

Oracle Database 12c:新功能 - 面向管理员 22-8


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

通过网络移动数据库:示例

通过网络移动数据库:使用 NETWORK_LINK 参数执行导入。

Oracle University and Error : You are not a Valid Partner use only
1. 在目标中创建与源数据库之间的数据库链接。
2. 将源数据库中的所有用户定义的表空间置于只读状态。
3. 将所有用户定义的表空间的数据文件从源位置移动到
目标位置。
4. 在必要时执行数据文件转换。
5. 导入目标数据库。
$ impdp username full=Y network_link=sourcedb
transportable=always
transport_datafiles='/D1/sales01.dbf','/D1/cust01.dbf'
encryption_password=pass1 version=12 logfile=import.log

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要通过网络移动数据库,请使用 NETWORK_LINK 参数执行导入。将使用数据库链接执行


导入,而不涉及任何转储文件。
• 如果源数据库是 11.2.0.3 数据库或更高版本的 Oracle Database 11g 发行版数据
库,则必须使用 VERSION 参数并将其设置为 12。如果源数据库是 Oracle
Database 12c 数据库,则不需要使用 VERSION 参数。
• 如果源数据库包含任何加密表空间或其中的表含有加密列的表空间,则必须指定
ENCRYPTION_PASSWORD 参数。
• Oracle 数据泵网络导入过程会复制以下内容:用户定义的表空间内所含对象的元数
据,以及管理表空间(例如 SYSTEM 和 SYSAUX)内所含用户定义对象的元数据和
数据。
• 导入完成后,用户定义的数据库将处于读写模式。
• 再次将源数据库中的用户定义的表空间置于读写状态。

Oracle Database 12c:新功能 - 面向管理员 22-9


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

禁用 Oracle 数据泵导入的日志记录

• 提供更快的数据加载
• 适用于大型数据加载以及填充新数据库

Oracle University and Error : You are not a Valid Partner use only
• 建议在完成数据加载后进行完全数据库备份
注释
– 不会完全清除日志记录。导入时仍会生成少量日志活动。
– 如果数据库处于 FORCE LOGGING 模式,则不会禁用日志
记录。

$ impdp … TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y 1

$ impdp … TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y:INDEX 2

$ impdp … TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y
TRANSFORM=DISABLE_ARCHIVE_LOGGING:N:TABLE 3

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle 数据泵提供了一个在导入操作过程中禁用日志记录的选项。这样可以更快进行导
入,因为重做日志信息不会写入磁盘或档案,从而可将更高 I/O 带宽专用于加载数据。
禁用日志记录尤其适用于大型数据加载或最初填充新数据库的作业。
如果禁用日志记录,Oracle 建议在完成 Oracle 数据泵导入操作之后执行 Recovery
Manager (RMAN) 完全备份。此外,如果在导入过程中发生介质故障(虽然不太可能发
生),则必须重新启动导入。如果 DISABLE_ARCHIVE_LOGGING 设置为 Y(如示例 1
所示),则在导入数据之前将禁用指定对象类型 TABLE 和/或 INDEX 的日志记录属性。
如果将其设置为 N(默认值),则在导入过程中不会禁用档案日志记录。加载数据后,
对象的日志记录属性将还原为其原始设置。如果未指定任何对象,则会将
DISABLE_ARCHIVE_LOGGING 行为同时应用于 TABLE 和 INDEX 对象类型。
请注意,即使对 Oracle 数据泵导入会话禁用日志记录,针对 Oracle 数据泵用于协调其
活动的主表执行的操作也会被记录下来。如果数据库处于 FORCE LOGGING 模式,则即
使指定了禁用日志记录的选项,在 Oracle 数据泵加载过程中也不会禁用日志记录。
• 示例 2 仅禁用了 INDEX 的日志记录。
• 示例 3 显示了获得与示例 2 相同结果的不同方法。

Oracle Database 12c:新功能 - 面向管理员 22-10


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

将视图导出成表
• 使用 VIEWS_AS_TABLES 导出以下内容:
– 表定义和视图数据

Oracle University and Error : You are not a Valid Partner use only
– 从属对象(例如约束条件和权限)
• 适用于:
– 导出数据子集
– 导出跨多个表的非规范化数据集
$ expdp … VIEWS_AS_TABLES=employees_v TABLES=departments 1

$ expdp … VIEWS_AS_TABLES=managers_v,oe.orders_v 2

$ impdp … VIEWS_AS_TABLES=managers_v REMAP_TABLE=managers_v:managers 3

$ impdp hr1/hr1 VIEWS_AS_TABLES=employees_v NETWORK_LINK=hr_link


REMAP_TABLE=employees_v:employees TABLE_EXISTS_ACTION=append 4

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle 数据泵提供 VIEWS_AS_TABLES 选项来将视图导出成表。Oracle 数据泵会将对应


的表定义以及视图中的所有可见数据写入转储文件中,而不只是导出视图定义 SQL。
导入时,Oracle 数据泵可使用与原始视图相同的几何结构(列和数据类型)创建表,并
在其中填充导出的数据。
依赖于视图的对象也会导出,就像它们是在表中定义的一样。例如,与视图相关的权限会
在导出转储文件中的对应表中记录为权限。不会导出未应用于表的从属对象。
通过将视图导出成表的功能,可以导出数据子集以用于开发和测试、数据复制以及脱机归
档用途。
还可以使用此功能导出跨多个相关表的非规范化数据集。在从事务处理系统提取数据并将
其加载到决策支持系统和数据仓库中时,通常会用到这种操作。
只能将含有标量列的关系视图导出成表。更复杂的视图(包括引用对象类型或函数的视图)
则不受支持。
VIEWS_AS_TABLES 参数会以未加密格式卸载视图数据。如果您卸载了敏感数据,
Oracle 强烈建议您为导出操作启用加密,并确保导入的表已加密。

Oracle Database 12c:新功能 - 面向管理员 22-11


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

幻灯片显示了四个使用 VIEWS_AS_TABLES 命令行参数的示例。


• 示例 1 是 VIEWS_AS_TABLES 参数指定单个视图 (hr.employees_v) 的简单情况。
可以单独使用该参数或将其与 TABLES 参数配合使用。如果使用其中一个参数,
Oracle 数据泵就会执行表模式导出。
• 示例 2 将两个视图(hr.managers_v 和 oe.orders_v)导出成表。
• 示例 3 使用在示例 2 中创建的导出转储文件。它演示了如何将 VIEWS_AS_TABLES
参数和 impdp 结合使用,以选择性地将 managers_v 导出成 managers 表。

Oracle University and Error : You are not a Valid Partner use only
• 示例 4 显示了如何将 VIEWS_AS_TABLES 参数与网络导入结合使用。在该模式下,
VIEWS_AS_TABLES 参数的语法与 Oracle 数据泵导出 (expdp) 所支持的语法相同。
在该示例中,视图 employees_v 来自于 hr_link 数据库链接所指定的数据库。
employees_v@hr_link 中的数据将导入到目标数据库上 hr1 方案中的
employees 表。因为指定了 TABLE_EXISTS_ACTION=append,所以会将源视图
行中的数据附加到 hr1.employees 表(如果有)。

Oracle Database 12c:新功能 - 面向管理员 22-12


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

指定加密口令

• 此新选项会提示用户指定加密口令:

Oracle University and Error : You are not a Valid Partner use only
$ expdp ... ENCRYPTION_PWD_PROMPT=Y …

Password: <Specify password here. Input not echoed>

• 使用此功能可以提高加密口令的安全性,因为它是在
运行时静默提供的。
– 使用 ps 之类的命令不会显示该口令。
– 该口令未存储在脚本中。
• 同时使用 ENCRYPTION_PASSWORD 参数和
ENCRYPTION_PWD_PROMPT=Y 会被禁止并生成一个
错误。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

早期版本的 Oracle 数据泵实用程序(expdp 和 impdp)支持对写入至导出转储文件的


数据进行加密。虽然可以使用 Oracle Wallet 进行透明加密,但也支持基于口令的加密。
为支持基于口令的加密并允许指定口令,在 Oracle 数据泵实用程序中添加了一个命令行
参数 ENCRYPTION_PASSWORD。在 Oracle Database 12c 之前的版本中,只能将
ENCRYPTION_PASSWORD 参数与 Oracle 数据泵导出结合使用来为基于口令的加密设置
口令。此机制的问题在于,加密口令很容易泄露。非授权系统用户通常可以在 Linux 和
UNIX 上使用 ps 之类的实用程序查看命令行参数(包括加密口令)。此外,从安全角度
来看,将加密口令存储在脚本中通常被视为不好的做法。
在 Oracle Database 12c 中,Oracle 数据泵实用程序能够提示用户提供加密口令,而不
会在用户输入口令时回显值。可以将新的命令行参数 ENCRYPTION_PWD_PROMPT 设置
为 Y,来指示实用程序提示用户输入加密口令。系统将从标准输入流读取口令,并在输入
口令时禁止终端回显。

Oracle Database 12c:新功能 - 面向管理员 22-13


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

在导入期间压缩表

• 现在,可以在导入时指定压缩方法。
– 该方法与导出时显示的压缩设置无关。

Oracle University and Error : You are not a Valid Partner use only
• 命令行语法和示例:
$ impdp ... TRANSFORM = TABLE_COMPRESSION_CLAUSE:NONE|"<comp-clause>" ...

$ impdp … TRANSFORM = TABLE_COMPRESSION_CLAUSE:"ROW STORE COMPRESS"

• 语法注释:
– NONE => 在 CREATE TABLE 中忽略压缩子句
– <comp-clause> => 有效的表压缩子句

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

使用早期版本的 Oracle 数据泵时,导入表时会使用导出时所显示的相同压缩设置。


Oracle Database 12c 允许 Oracle 数据泵在导入时指定压缩方法,而不考虑在源数据库
中指定的设置。
用于在导入期间压缩(或解压缩)表的选项由一个新元数据转换参数
TABLE_COMPRESSION_CLAUSE 提供,该参数可在 impdp 命令行中设置,或使用
DBMS_DATAPUMP.METADATA_TRANSFORM PL/SQL 过程以编程方式设置。
如果将该参数设置为 NONE,则会忽略表压缩子句,且导入的表将采用与表空间关联的默
认压缩设置。想要对元数据库中压缩设置不同的一系列表应用统一压缩方法时,该选项特
别有用。
否则,参数值必须是一个有效的表压缩子句,例如 NOCOMPRESS、ROW STORE
COMPRESS 和 ROW STORE COMPRESS ADVANCED。
在 impdp 命令行上指定包含多个关键字的表压缩子句时,必须将它们括在双引号中。
由于命令行中的引号在某些操作系统中有特殊含义,因此请考虑使用参数文件来设置转换
参数。

Oracle Database 12c:新功能 - 面向管理员 22-14


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

在导入期间创建 SecureFile LOB

• 用于在导入时指定 LOB 存储方法的选项


• 命令行语法和示例:

Oracle University and Error : You are not a Valid Partner use only
$ impdp … TRANSFORM = LOB_STORAGE:SECUREFILE|BASICFILE|
DEFAULT|NO_CHANGE …

$ impdp … LOB_STORAGE:SECUREFILE

• 语法注释:
– DEFAULT => CREATE TABLE 没有 LOB 存储子句
– NO_CHANGE => 在转储文件中指定设置

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c 允许 Oracle 数据泵在导入时指定 LOB 存储方法,而不考虑在源数


据库中指定的设置。此功能可允许用户直接从 BasicFile LOB 移植到 SecureFile LOB。
用于在导入期间指定 LOB 存储方法的选项由一个新元数据转换参数 LOB_STORAGE 提
供,该参数可在 impdp 命令行中设置,或使用
DBMS_DATAPUMP.METADATA_TRANSFORM PL/SQL 过程以编程方式设置。
只要将该参数设置为 SECUREFILE 或 BASICFILE,即可为与导入会话相关的所有 LOB
指定对应的 LOB 存储方法。如果将该参数设置为 DEFAULT,则会忽略 LOB 存储子句,
且导入的表将采用与会话或实例关联的默认设置。如果将该参数设置为 NO_CHANGE,则
会使用在导出转储文件中指定的 LOB 存储子句。

Oracle Database 12c:新功能 - 面向管理员 22-15


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:b
b. 错
a. 对
impdp 命令上的
测验

导入的表将采用与表空间关联的默认压缩设置。
会导致 impdp 会话创建的所有表被解压缩。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 22-16


TRANSFORM=TABLE_COMPRESSION_CLAUSE:NONE 设置

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SQL*Loader 对标识列的直接路径加载的支持

• 标识列是一个数值列,其中包含序列生成器为对表执行

Oracle University and Error : You are not a Valid Partner use only
的每个 INSERT 语句分配的整数值。
• SQL*Loader 支持标识列的直接路径加载:

列规范 SQL*Loader 执行的操作


col1 NUMBER GENERATED ALWAYS col1 无法显式加载。该列值始终由序列生成器
AS IDENTITY 提供。
col2 NUMBER GENERATED BY DEFAULT col2 可以显式加载。如果未显式加载,则该列值
AS IDENTITY 由序列生成器提供。显式加载的 NULL 值会导致
对应的行被拒,因为标识列隐式包含 NOT NULL
约束条件。
col3 NUMBER GENERATED BY DEFAULT col3 可以显式加载。如果未显式加载,则该列值
ON NULL AS IDENTITY 由序列生成器提供。显式加载的 NULL 值会被序列
值替换。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

SQL*Loader 的新功能始于支持标识列的直接路径加载。
标识列是一个数值列,其中包含序列生成器为在关联表中执行的每个 INSERT 语句分配
的递增或递减整数值。可以将 GENERATED ... AS IDENTITY 子句和 CREATE
TABLE 或 ALTER TABLE 语句结合使用来指定标识列。标识列是 Oracle Database 12c
中的新功能。
SQL*Loader 与该新功能结合使用可支持标识列的直接路径加载。幻灯片中的表描述
SQL*Loader 针对不同类型的标识列执行的操作。这些操作会自动发生,且与标识列的正
常行为一致。

Oracle Database 12c:新功能 - 面向管理员 22-17


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SQL*Loader 和外部表的增强功能

• 允许在数据文件名中使用通配符
‒ INFILE('emp*.dat') 或 ('emp?.dat')

Oracle University and Error : You are not a Valid Partner use only
• 支持包含嵌入式新行的 CSV 文件
‒ FIELDS CSV WITH EMBEDDED …
• 可以为所有字符和日期字段指定一次表级 NULLIF 和
日期格式
‒ FIELDS DATE FORMAT "DD-Month-YYYY"
‒ FIELDS TERMINATED BY "," NULLIF = "NA"
• 使用 FIELD NAMES 子句使数据文件中的第一条记录包含字
段名称和顺序
‒ FIELD NAMES FIRST FILE
• 特定于外部表:ALL FIELDS OVERRIDE
‒ 列的默认属性

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

以下表述适用于 SQL*Loader 和外部表。使用 SQL*Loader 或外部表时的语法可能有所


不同。
• 允许在数据文件名中使用通配符:“*”表示多个字符,“?”表示单个字符。
• 在特定条件下,Oracle Database 12c 支持 CSV 文件。请阅读《Oracle Database
Utilities 12c Release 1 (12.1)》,了解在什么情况下可以加载 CSV 文件数据。
• 可以为所有字段指定一次表级 NULLIF 和日期格式,并针对单个字段将其覆盖。
NULLIF 适用于所有字符和日期字段,日期格式适用于所有日期字段。
• 包含字段名称和顺序的第一条记录可以在第一个文件中或每个文件中。
• FIRST FILE 表示第一个数据文件的第一条记录包含数据的字段名称列表。ALL
FILES 表示所有数据文件中的第一条记录包含数据的字段名称列表。处理数据时会
跳过每个数据文件中的第一条记录。每个数据文件中的字段顺序可能不同。
• 最后一项表述仅适用于外部表。ALL FIELDS OVERRIDE 子句会告诉访问驱动程
序,所有字段都存在,且它们的顺序与外部表中的顺序相同。只需要指定有特殊定
义的字段即可。

Oracle Database 12c:新功能 - 面向管理员 22-18


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SQL*Loader 快速模式

简单易用:
• 指定一个表名以启动快速模式加载:

Oracle University and Error : You are not a Valid Partner use only
– 表列必须是标量数据类型。
– 数据文件仅包含分隔的字符数据。
– SQL*Loader 使用表列定义来确定输入数据类型。
• 无需创建控制文件。
$ sqlldr hr TABLE=test

test.log 文件
• SQL*Loader 控制文件选项
• 创建外部表语句
test_%p.log_xt 文件。
• 加载结果
test.dat 文件
hr.test 表

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

如果您激活 SQL*Loader 快速模式,并且仅指定用户名和 TABLE 参数,则其他各种参数


将使用默认设置。您可以通过在命令行上指定其他参数来覆盖大多数默认设置。
SQL*Loader 快速模式会生成两个文件。日志文件的名称源自表名(默认)。
• 一个包含以下内容的日志文件:
- 控制文件输出
- 用于创建外部表和使用 SQL INSERT AS SELECT 语句执行加载的 SQL 脚本。
- SQL*Loader 快速模式既不使用控制文件也不使用 SQL 脚本。之所以提供这两
项内容,是因为您可能有时希望使用它们作为基础来通过常规 SQL*Loader 或
独立外部表执行操作。
• 一个类似于 SQL*Loader 日志文件的日志文件,用来说明操作的结果。”%p” 表示
SQL*Loader 进程的进程 ID。

Oracle Database 12c:新功能 - 面向管理员 22-19


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

下面是名为 test.dat 的输入数据文件的示例(该文件包含两条要加载的记录),以及


在加载完成后生成的两个日志文件的摘录。创建的 HR.TEST 表包含三列:C1 NUMBER、
C2 VARCHAR2(10) 和 C3 VARCHAR2(10)。
$ more test.dat
3, C, WWW
4, D, UUU
$ sqlldr hr TABLE=test

Oracle University and Error : You are not a Valid Partner use only
$ more test.log

Express Mode Load, Table: TEST
Data File: test.dat
Bad File: test_%p.bad …
Table TEST, loaded from every logical record.
Insert option in effect for this table: APPEND
Column Name Position Len Term Encl Datatype
-------------------- ---------- ----- ---- ---- ---------
C1 FIRST * , CHARACTER
C2 NEXT * , CHARACTER
C3 NEXT * , CHARACTER
Generated control file for possible reuse:
OPTIONS(EXTERNAL_TABLE=EXECUTE, TRIM=LRTRIM)
LOAD DATA INFILE 'test' APPEND INTO TABLE TEST
FIELDS TERMINATED BY "," ( C1, C2, C3)
End of generated control file for possible reuse.

creating external table "SYS_SQLLDR_X_EXT_TEST"
CREATE TABLE "SYS_SQLLDR_X_EXT_TEST"
("C1" NUMBER,"C2" CHAR(1),"C3" VARCHAR2(20)) ORGANIZATION external(
TYPE oracle_loader DEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000
ACCESS PARAMETERS
( RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
BADFILE 'SYS_SQLLDR_XT_TMPDIR_00000':'test_%p.bad'
LOGFILE 'test_%p.log_xt' READSIZE 1048576
FIELDS TERMINATED BY "," LRTRIM REJECT ROWS WITH ALL NULL FIELDS
("C1" CHAR(255),"C2" CHAR(255),"C3" CHAR(255)))
location ('test.dat')) REJECT LIMIT UNLIMITED
executing INSERT statement to load database table TEST
INSERT /*+ append parallel(auto) */ INTO TEST (C1, C2, C3)
SELECT "C1", "C2", "C3" FROM "SYS_SQLLDR_X_EXT_TEST" …
Table TEST: 2 Rows successfully loaded.

Oracle Database 12c:新功能 - 面向管理员 22-20


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

小结

在本课中,您应该已经学会:

Oracle University and Error : You are not a Valid Partner use only
• 描述 Oracle 数据泵的完全可移动功能
• 描述 Oracle Database 12c 中 Oracle 数据泵、
SQL*Loader 和外部表的各项新功能
• 描述 Oracle 数据泵和 SQL*Loader 新功能的适用使用
情形和配置详细信息
• 描述 SQL*Loader 快速模式

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 22-21


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED



练习 22:概览

22-1:使用完全可移动模式移动数据库

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 22-22


22-2:使用 SQL*Loader 快速模式加载数据(可选)

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

分区增强功能

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle Database 12c 新增功能和增强功能


Enterprise Manager Enterprise Manager Enterprise Manager
Cloud Control Database Express
其他工具
和其他工具

基础功能 CDB 和 PDB 创建 CDB 和 PDB 管理


CDB 和 PDB

Oracle University and Error : You are not a Valid Partner use only
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录

安全性 统一审计 权限分析 数据编写

HA RMAN

易管理性 DB 操作 实时 ADDM 比较时段 ADDM ADR


12.1.0.2 12.1.0.2

内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速
12.1.0.2

缓存
SQL 优化 资源管理器 索引、表

数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

有多个分区增强功能。

Oracle Database 12c:新功能 - 面向管理员 23-2


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

课程目标

学完本课后,应能完成以下工作:

Oracle University and Error : You are not a Valid Partner use only
• 说明间隔引用分区
• 在单个操作中维护多个分区
• 描述本地和全局部分索引
• 创建和维护本地和全局部分索引
• 描述异步全局索引维护

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要全面了解分区增强功能和用法,请参阅 Oracle 文档中的以下指南:


• 《Oracle Database VLDB and Partitioning Guide 12c Release 1 (12.1)》
• 《Oracle Database Data Warehousing Guide 12c Release 1 (12.1)》

Oracle Database 12c:新功能 - 面向管理员 23-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

引用分区增强功能

• 支持间隔引用分区

• 为 TRUNCATE PARTITION

Oracle University and Error : You are not a Valid Partner use only
操作提供 CASCADE 选项
表 ORDERS:
范围 (ORDER_DATE)
主键 (ORDER_ID)
• 为 EXCHANGE[SUB]
PARTITION 操作提供
范围 (ORDER_DATE)
表 ORDER_ITEMS: 外键 (ORDER_ID) CASCADE 选项

通过 PK/FK 关系继承的分区键

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle 11g 中引入了引用分区。它将通过引用约束条件进行关联的两个表等同分区。通


过引用将表分区时,随后对父表执行的分区维护操作会自动级联到子表。因此,无法对引
用分区表直接执行分区维护操作。
在 Oracle Database 12c 发行版 1 中,使用三种新方法增强了引用分区:
• 间隔引用分区允许具有间隔分区父表的引用分区。
• 为 TRUNCATE PARTITION 操作提供 CASCADE 选项,以将操作级联到引用分区
子表。
• 为 EXCHANGE [SUB] PARTITION 操作提供 CASCADE 选项,以将操作级联到引
用分区子表。
此外,TRUNCATE TABLE 已通过 CASCADE 选项进行增强,以根据引用约束条件将操作
级联到子表(不必为引用分区表)。

Oracle Database 12c:新功能 - 面向管理员 23-4


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

间隔引用分区

• 间隔分区表可用作引用分区的

父表。

Oracle University and Error : You are not a Valid Partner use only
新间隔
• 在将分区插入到引用分区表时,
分区
会自动在引用分区表中创建与父
表 ORDERS: 范围 (ORDER_DATE)
主键 (ORDER_ID) 表中的间隔分区相对应的分区。
• 每在父表中创建一个间隔分区,
范围 (ORDER_DATE)
表 ORDER_ITEMS:
外键 (ORDER_ID) 子表都会继承关联父表中的分区
名称。


新间隔

分区
通过 PK/FK 关系继承的分区键

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

间隔分区表可用作引用分区的父表。在间隔引用分区表(子表)中插入行时,就会创建该
子表的间隔段分区。因此,有可能发生间隔分区存在于父表中但不存在于子表中的情况,
因为没有人在子表的这个分区中插入任何行。在父表中创建一个间隔分区时,子表会继承
关联父表中的分区名称。
如果子表有表级默认表空间,则将该表空间用作新间隔分区的表空间。否则,将从父表分
区继承表空间。

Oracle Database 12c:新功能 - 面向管理员 23-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

TRUNCATE TABLE CASCADE

如果为 TRUNCATE TABLE 指定


… CASCADE 选项,它会发生以下情况:

Oracle University and Error : You are not a Valid Partner use only
• 截断引用了已启用 ON DELETE
CASCADE 引用约束条件的表的
表 ORDERS: 范围 (ORDER_DATE)
主键 (ORDER_ID)
所有子表。
表 ORDER_ITEMS: 范围 (ORDER_DATE) • 如果父表与子表通过多个引用约
外键 (ORDER_ID)
束条件进行关联,且其中至少有
一个约束已启用 ON DELETE
CASCADE,则会成功。

SQL> TRUNCATE TABLE hr.orders CASCADE;


通过 PK/FK 关系继承的分区键

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

从 Oracle Database 12c 开始,可以为截断操作添加一个 CASCADE 选项,以根据引用约


束条件级联操作。这会影响 TRUNCATE TABLE、ALTER TABLE TRUNCATE
PARTITION 和 ALTER TABLE TRUNCATE SUBPARTITION 操作。
如果为 TRUNCATE TABLE 指定了 CASCADE 选项,则 Oracle DB 会截断引用已启用 ON
DELETE CASCADE 引用约束条件的表的所有子表。此级联操作会以递归方式应用于孙子
表、重孙表,依此类推。根据已启用的 ON DELETE CASCADE 引用约束条件确定要截断
的表集之后,如果该集外的任何子表通过已启用的约束条件引用该集中的任何表,则会发
生错误。如果父表与子表通过多个引用约束条件进行关联,且至少有一个约束包含 ON
DELETECASCADE,则针对父表的 TRUNCATE TABLE CASCADE 操作将会成功。
可以对引用分区层次中的任何级别执行 TRUNCATE,该操作可级联到从该目标表开始的子
表。不需要对子表的权限。如果为没有引用分区子表的表指定 CASCADE 选项,则会忽略
该选项。为该操作指定的任何其他选项(例如 DROP STORAGE 或 UPDATE INDEXES)
都将应用于所有受该操作影响的表。
默认情况下,CASCADE 选项处于关闭状态。

Oracle Database 12c:新功能 - 面向管理员 23-6


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

多分区维护操作

• 通过添加/截断/删除分区,可以在单个操作中添加/截断/

Oracle University and Error : You are not a Valid Partner use only
删除多个分区。
• 拆分分区和合并分区操作可将数据拆分为较小分区或将
数据合并为较大分区
• 在 Oracle Database 12c 之前,Oracle 允许使用
ALTER TABLE 拆分和合并分区 DDL 仅对两个分区执
行拆分和合并操作。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

拆分分区和合并分区操作可将数据拆分为较小分区或将数据合并为较大分区。
在 Oracle Database 12c 之前,Oracle 允许使用 ALTER TABLE 拆分和合并分区 DDL 仅
对两个分区执行拆分和合并操作。因此,要将一个分区拆分成 N 个分区或将 N 个分区合
并成一个分区,就必须发出 (N-1) 个 DDL。例如,您可能需要要合并每个月的分区,以
汇总上年的数据。由于一次只能合并两个分区,因此需要发出 11 个 ALTER TABLE 合并
分区 DDL。这不仅繁琐而且成本高昂,因为会进行多次数据读写。
合并多个范围分区的另一种方法是使用 CREATE TABLE … AS SELECT (CTAS) 语句,
将 N 个源分区中的数据加载到一个新的非分区表中。接着,删除前面 (N-1) 个源分区并
将第 N 个源分区与新表交换。第 N 个源分区现在包含要合并的 N 个分区中的数据,可将
其重命名为目标分区名。与发出 (N-1) 个合并分区 DDL 相比,这种方法可以减少数据移
动。例如,在合并上年的每月分区时,客户发出一个 CTAS、11 个删除分区 DDL 和一个
交换分区 DDL,即可通过较少的数据移动实现相同结果。

Oracle Database 12c:新功能 - 面向管理员 23-7


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

添加多个分区

• 使用 ALTER TABLE 语句的 ADD PARTITION 子句添

Oracle University and Error : You are not a Valid Partner use only
加多个新分区。
• 本地和全局索引操作与添加单个分区时的操作相同。
• 将以上限值升序列出的多个范围分区添加到范围分区表
或组合范围分区表的高端。
• 如果 DEFAULT 分区不存在,则使用新分区值集将多个
列表分区添加到一个表中。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

可以使用 ALTER TABLE 语句的 ADD PARTITION 子句添加多个新分区。添加多个分区


时,本地和全局索引操作与添加单个分区时的操作相同。请注意,ADD PARTITION 和
ADD PARTITIONS 同义。
只要未定义 MAXVALUE 分区,就可以将以上限值升序列出的多个范围分区添加到范围分
区表或组合范围分区表的高端(最后一个现有分区之后)。同样,如果 DEFAULT 分区不
存在,则可以使用新分区值集将多个列表分区添加到一个表中。

Oracle Database 12c:新功能 - 面向管理员 23-8


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

创建范围分区表
SQL> CREATE TABLE sales
( prod_id NUMBER(6),
cust_id NUMBER,
time_id DATE,

Oracle University and Error : You are not a Valid Partner use only
channel_id CHAR(1),
promo_id NUMBER(6),
quantity_sold NUMBER(3),
amount_sold NUMBER(10,2)
)
PARTITION BY RANGE (time_id)
(PARTITION sales_q1_2012 VALUES LESS THAN
(TO_DATE('01-APR-2012','dd-MON-yyyy'))
TABLESPACE tsa
,PARTITION sales_q2_2012 VALUES LESS THAN
(TO_DATE('01-JUL-2012','dd-MON-yyyy'))
TABLESPACE tsb
,PARTITION sales_q3_2012 VALUES LESS THAN
(TO_DATE('01-OCT-2012','dd-MON-yyyy'))
TABLESPACE tsc
,PARTITION sales_q4_2012 VALUES LESS THAN
(TO_DATE('01-JAN-2013','dd-MON-yyyy'))
TABLESPACE tsd );

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

幻灯片示例创建了一个包含四个分区的 SALES 表,每个分区代表 2012 的一个季度。此


示例显示在 Oracle Database 11g 中如何创建范围分区表。
• 为每个分区指定了一个名称:
– sales_q1_2012
– sales_q2_2012
– sales_q3_2012
– sales_q4_2012
• time_id 列是分区列,该列中的值代表特定行的分区键。
• VALUES LESS THAN 子句决定分区界限:其中的分区键值小于子句所指定已排序
值列表的行会存储在该分区中。
• 每个分区包含在一个独立的表空间中:tsa、tsb、tsc 和 tsd。
例如,time_id=17-MAR-2012 的行会存储在 sales_q1_2012 分区中。

Oracle Database 12c:新功能 - 面向管理员 23-9


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

添加多个分区

可以使用单个 SQL 语句来添加多个分区,方法是按如下所

Oracle University and Error : You are not a Valid Partner use only
示指定各个分区:
SQL> ALTER TABLE sales ADD
PARTITION sales_q1_2013 VALUES LESS THAN
(TO_DATE('01-APR-2013','dd-MON-yyyy')),
PARTITION sales_q2_2013 VALUES LESS THAN
(TO_DATE('01-JUL-2013','dd-MON-yyyy')),
PARTITION sales_q3_2013 VALUES LESS THAN
(TO_DATE('01-OCT-2013','dd-MON-yyyy')),
PARTITION sales_q4_2013 VALUES LESS THAN
(TO_DATE('01-JAN-2014','dd-MON-yyyy'));

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Oracle Database 11g 中,可以在分区表中添加一个分区。


在 Oracle Database 12c 中,可以使用单个语句并指定各个分区来添加多个分区。例如,
在幻灯片示例中,可以在之前创建的 sales 范围分区表中添加多个分区,即
sales_q1_2012、sales_q2_2012、sales_q3_2012 和 sales_q4_2012。

Oracle Database 12c:新功能 - 面向管理员 23-10


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

截断多个分区

• 使用 ALTER TABLE ... TRUNCATE PARTITION 语

Oracle University and Error : You are not a Valid Partner use only
句,截断范围分区表或列表分区表中的多个分区。
• 该操作将截断本地索引的对应分区。
• 除非指定了 UPDATE INDEXES 子句,否则必须重新构
建全局索引。

SQL> ALTER TABLE sales TRUNCATE PARTITIONS


sales_q1_2012, sales_q2_2012,
sales_q3_2012, sales_q4_2012;

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

使用 ALTER TABLE ... TRUNCATE PARTITION 语句可删除表分区中的所有行。截断


分区与删除分区相似,只是截断分区会清空分区数据,而不是从物理上删除分区。
该操作将截断本地索引的对应分区。
除非指定了 UPDATE INDEXES 子句,否则必须重新构建全局索引。
幻灯片示例截断了范围分区表 sales 中的四个分区。

Oracle Database 12c:新功能 - 面向管理员 23-11


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

删除多个分区

• 使用 ALTER TABLE 语句的以下子句,删除范围分区表

Oracle University and Error : You are not a Valid Partner use only
或列表分区表中的多个分区或子分区:
– DROP PARTITION
– DROP SUBPARTITION

SQL> ALTER TABLE sales DROP PARTITIONS sales_q1_2012,


sales_q2_2012,
sales_q3_2012,
sales_q4_2012;

• 本地和全局索引操作与删除单个分区时的操作相同。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

可以使用 ALTER TABLE 语句的 DROP PARTITION 和 DROP SUBPARTITION 子句,删


除范围分区表或列表分区表中的多个分区或子分区。例如,幻灯片中的语句删除了范围分
区表 sales 中的多个分区。请注意,无法删除表中的所有分区。
删除多个分区时,本地和全局索引操作与删除单个分区时的操作相同。

Oracle Database 12c:新功能 - 面向管理员 23-12


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

拆分成多个分区

• 将一个分区的内容重新分发到多个分区中。
• 每个新分区将获得一个新段并从当前源分区继承所有未

Oracle University and Error : You are not a Valid Partner use only
指定的物理属性。
• 指定与创建分区表的 SQL 语句相似的一系列新分区说
明,而不是使用 AT 或 VALUES 子句。

SQL> ALTER TABLE part_tab SPLIT PARTITION p0 INTO


(PARTITION p01 VALUES LESS THAN (25),
PARTITION p02 VALUES LESS THAN (50),
PARTITION p03 VALUES LESS THAN (75),
PARTITION p04);

SQL> ALTER TABLE part_tab SPLIT PARTITION p0 INTO


(PARTITION p01 VALUES LESS THAN (25),PARTITION p02);

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

当一个分区太大而导致备份、恢复或维护操作需要很长时间才能完成,或感觉分区中的数
据过多而影响性能时,可以使用 ALTER TABLE 语句的 SPLIT PARTITION 子句将一个
分区的内容重新分发到多个分区中。
在拆分多个分区时,会保留与当前分区关联的段并创建新(空)段。每个新分区会获得新
段并从当前源分区继承所有未指定的物理属性。
可以使用扩展的拆分语法,指定与创建分区表的 SQL 语句相似的一系列新分区说明,而
不是使用 AT 或 VALUES 子句。此外,最后一个新分区说明的范围或列表值来自于源分区
的上限以及为拆分生成的前 (N-1) 个新分区指定的界限值。
第一个幻灯片示例演示将分区 p0 拆分成多个分区,即 p01、p02、p03 和 p04。
在幻灯片的第二个示例中,分区 p02 采用原始分区 p0 的上限。

Oracle Database 12c:新功能 - 面向管理员 23-13


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

拆分成多个分区的规则
• 将一个范围分区拆分成 N 个分区:
– 必须在要拆分分区的分区范围内指定 (N-1) 个分区键

Oracle University and Error : You are not a Valid Partner use only
列值。
• 将一个列表分区拆分成 N 个分区:
– 必须指定 (N-1) 个文字值列表。
– 每个列表定义要将包含对应分区键值的行插入其中的前
(N-1) 个分区。
• 将 DEFAULT 列表分区或 MAXVALUE 范围分区拆分成
多个分区时:
– 将使用指定的文字值列表或上限值创建前 (N-1) 个新
分区。
– 拆分生成的第 N 个新分区将采用 DEFAULT 值或
MAXVALUE。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要将一个范围分区拆分成 N 个分区,必须在要拆分分区的分区范围内指定 (N-1) 个分区


键列值。指定的新上限值(不含)必须为升序。第 N 个新分区的上限将采用所拆分分区
的上限值。可以选择性地指定拆分生成的 N 个新分区的名称和物理属性。
要将一个列表分区拆分成 N 个分区,必须指定 (N-1) 个文字值列表,每个列表定义要将
包含对应分区键值的行插入其中的前 (N-1) 个分区。原始分区的剩余行将插入第 N 个新
分区,该分区的值列表包含原始分区中的剩余文字值。任何两个值列表都不得包含相同分
区值。指定的前 (N-1) 个值列表不能包含当前分区的全部分区值,因为这样第 N 个新分
区将为空。而且,新的 (N-1) 个值列表不能包含当前分区中不存在的任何分区值。
在将一个 DEFAULT 列表分区或 MAXVALUE 范围分区拆分成多个分区时,将使用指定的
文字值列表或上限值创建前 (N-1) 个新分区,而拆分生成的第 N 个新分区将采用
DEFAULT 值或 MAXVALUE。SPLIT_TABLE_SUBPARTITION 子句将以同样方式扩展,
以允许将范围或列表子分区拆分成 N 个新的子分区。

Oracle Database 12c:新功能 - 面向管理员 23-14


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

拆分成多个分区:示例

SQL> ALTER TABLE sales SPLIT PARTITION sales_2012 INTO

Oracle University and Error : You are not a Valid Partner use only
(PARTITION sales_Q1_2012 VALUES LESS THAN
(TO_DATE('01-APR-2012','dd-MON-yyyy')),
PARTITION sales_Q2_2012 VALUES LESS THAN
(TO_DATE('01-JUL-2012','dd-MON-yyyy')),
PARTITION sales_Q3_2012 VALUES LESS THAN
(TO_DATE('01-OCT-2012','dd-MON-yyyy')),
PARTITION sales_Q4_2012);

SQL> ALTER TABLE customers SPLIT PARTITION europe INTO


(PARTITION northern_europe VALUES ('France', 'Sweden'),
PARTITION southern_europe VALUES ('Spain', 'Portugal'),
PARTITION rest_europe);

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

第一个幻灯片示例将分区表 sales 的 sales_2012 分区拆分成与 2012 年的四个季度对


应的四个分区。在本示例中,分区 sales_2012 会隐式成为拆分分区的上限。
在第二个幻灯片示例中,按列表分区的示例表 customers 将分区 Europe 拆分成三个
分区:western_europe、southern_europe 和 rest_europe。

Oracle Database 12c:新功能 - 面向管理员 23-15


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

合并多个范围分区
• 将两个或多个分区或子分区的内容合并到一个新的分区
或子分区中。

Oracle University and Error : You are not a Valid Partner use only
SQL> ALTER TABLE sales
MERGE PARTITIONS sales_q1_2012, sales_q2_2012,
sales_q3_2012, sales_q4_2012
INTO PARTITION sales_2012;

SQL> ALTER TABLE sales


MERGE PARTITIONS sales_q1_2012 TO sales_q4_2012
INTO PARTITION sales_2012;

12
20
Q1
20
12 Y ea r
Q2 20
12 20 12
Q3

• 新分区会继承最高原始分区的分区上限。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Oracle Database 11g 中,可以将两个分区的内容合并到一个分区中。


在 Oracle Database 12c 中,可以将两个或多个分区或子分区的内容合并到一个新的分区
或子分区中。然后可以使用 ALTER TABLE SQL 语句的 MERGE PARTITIONS 和
MERGE SUBPARTITIONS 子句删除原始分区或子分区,如幻灯片中所示。合并范围分区
的一个原因是将历史数据联机保留在较大分区中。例如,您可能有每日分区,将这种最早
的分区合并到每周分区中,然后可以将每周分区合并到每月分区中,依此类推。
合并多个范围分区时,分区必须相邻且按其分区界限值升序进行指定。新分区会继承最高
原始分区的分区上限。
在第一个幻灯片示例中,合并了 sales 范围分区表的四个分区。与最早年份的四个季度
相对应的这四个分区就合并到了包含整年销售数据的单个分区中。
如果您使用了范围分区,可以使用 TO 关键字重写第一个语句,如幻灯片中的第二个示例
所示。
请注意此操作类型对性能的影响。

Oracle Database 12c:新功能 - 面向管理员 23-16


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

合并列表分区和系统分区

• 合并多个列表分区时,生成的分区值列表是要合并的

Oracle University and Error : You are not a Valid Partner use only
所有分区的分区值列表集的并集。
• 将 DEFAULT 列表分区与其他列表分区合并会生成
DEFAULT 分区。

C 、D
D 、 B、
C、 A
B 、
A、 、G 合并 U LT
A
、 F D EF
E
U LT
FA
DE

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

合并多个列表分区时,生成的分区值列表是要合并的所有分区的分区值列表集的并集。
将 DEFAULT 列表分区与其他列表分区合并会生成 DEFAULT 分区。

Oracle Database 12c:新功能 - 面向管理员 23-17


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:a
b. 错
a. 对
测验

将一个分区的内容重新分发到多个分区。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 23-18


可以使用 ALTER TABLE 语句的 SPLIT PARTITION 子句

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

分区索引:概述

• 索引可以像表一样分区。

Oracle University and Error : You are not a Valid Partner use only
• 分区索引可存在于非分区表中。
• 全局分区索引使用和表不同的分区策略。
• 本地分区索引遵循表的策略。

全局 本地

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

分区索引可以获得与分区表相同的管理优势和性能提升。对索引进行分区后,每个分区
是一个完整的独立索引。没有主索引来确定要使用的索引,因为分区信息本身就提供这
部分信息。用于指定索引分区的语法与用于分区表的语法非常相似。
全局索引可以在非分区表和分区表中定义,且不遵循分区表的分区键。本地索引只能在
分区表中定义。本地索引分区键与表分区键相同。只能对全局索引使用范围分区和散列
分区。
本地索引自动进行维护,即对表上的分区所做的更改会自动对本地索引重复;但是,可
能需要在分区维护操作期间使用更新索引子句维护关联的本地索引,具体视 DDL 而定。
始终会为对等数据(表)段构建一个本地索引段。因此,对于组合分区表,只有本地子
分区索引段,而逻辑分区顶级中却没有任何内容。

Oracle Database 12c:新功能 - 面向管理员 23-19


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

分区表的部分索引

• 可以对表的分区子集创建本地和全局索引,提高了索引

Oracle University and Error : You are not a Valid Partner use only
创建的灵活性。
• 此功能支持以下全局索引:为特定的表分区或子分区子
集编制索引,而排除其他分区或子分区。
• 使用默认表索引属性即可支持此功能。
• 创建或变更表时,可以为该表或其分区指定一个默认索
引属性。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

索引通常会占用大量空间,因为数据库中的每个表可能都定义了许多索引。
全局索引会为所有表分区编制索引,且索引结构与表分区没有关联。在 Oracle Database
12c 之前,Oracle 不允许对分区子集编制索引而排除其他分区。在 Oracle Database 12c
之前,DBA 无法使用任何操作从全局索引中排除非活动分区。
在 Oracle Database 12c 中,全局部分索引可节省空间并提高加载和查询时的性能。
可以对表的分区子集创建本地和全局索引,提高了索引创建的灵活性。
此功能支持以下全局索引:包括特定的表分区或子分区子集或为其编制索引,而排除其他
分区或子分区。使用默认表索引属性即可支持此操作。创建或变更表时,可以为该表或其
分区指定一个默认索引属性。

Oracle Database 12c:新功能 - 面向管理员 23-20


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

对表创建部分索引

• 在表上创建 PARTIAL 索引时:

Oracle University and Error : You are not a Valid Partner use only
– 本地索引:如果为表分区打开索引功能则会创建可用的索
引分区,否则会创建不可用的索引分区
– 全局索引:仅包括已打开索引功能的分区而排除其他分区
• 如果在创建索引时未指定 FULL 或 PARTIAL,则默认
为 FULL。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

可以在创建索引时指定 FULL 属性来覆盖此行为。如果未指定 FULL 或 PARTIAL,则默


认为 FULL。在这种情况下,索引创建行为与 Oracle Database 12c 之前的 Oracle DB 发
行版的行为相似。所有本地索引分区将创建为 USABLE 状态,且全局索引会引用该表的
所有分区。
无法创建唯一的全局部分索引。唯一全局索引必须始终为全索引。
注释
• 在本地索引中,特定索引分区中的所有键仅引用存储在单个基表分区中的行。本地
部分索引通过指定 LOCAL INDEXING PARTIAL 属性来创建。
• 在全局索引中,键可能会引用存储在多个基表分区或子分区中的行。全局部分索引
通过指定 GLOBAL INDEXING PARTIAL 属性来创建。

Oracle Database 12c:新功能 - 面向管理员 23-21


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

在分区和子分区级别指定 INDEXING 子句
SQL> CREATE TABLE orders ( order_id NUMBER(12),
order_date DATE
CONSTRAINT order_date_nn NOT NULL,

Oracle University and Error : You are not a Valid Partner use only

CONSTRAINT order_total_min CHECK (order_total >= 0)
)
INDEXING OFF
PARTITION BY RANGE (ORDER_DATE)
(PARTITION ord_p1 VALUES LESS THAN (TO_DATE('01-MAR-2010','DD-
MON-YYYY')) INDEXING ON,
PARTITION ord_p2 VALUES LESS THAN (TO_DATE('01-JUL-2010','DD-
MON-YYYY')) INDEXING OFF,
PARTITION ord_p3 VALUES LESS THAN (TO_DATE('01-OCT-2010','DD-
MON-YYYY')) INDEXING ON,
PARTITION ord_p4 VALUES LESS THAN (TO_DATE('01-MAR-2011','DD-
MON-YYYY')),
PARTITION ord_p5 VALUES LESS THAN (TO_DATE('01-MAR-2012','DD-
MON-YYYY')));

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Oracle Database 12c 中,对 CREATE TABLE 语法进行了扩展,可以支持指定默认


索引属性子句 INDEXING。可以使用 ALTER TABLE .. MODIFY DEFAULT
ATTRIBUTES 子句更改 INDEXING ON/OFF 的默认属性。这会更改未来分区(和子分
区)的默认属性。也可以在分区和子分区级别指定 INDEXING 子句。
幻灯片示例创建一个 ORDERS 表,其中包含下列项目:
• 分区 ORD_P1 和 ORD_P3(包括在所有全局部分索引中)
• 与前面这两个分区对应的本地部分索引(在默认情况下创建为 USABLE 状态)。
与使用 INDEXING OFF 子句的表分区以及没有 INDEXING 子句的表分区对应的
其他本地索引分区(ORD_P4 和 ORD_P5)会创建为 UNUSABLE 状态。

Oracle Database 12c:新功能 - 面向管理员 23-22


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

创建本地或全局部分索引

• 通过指定 INDEXING PARTIAL 子句,可以创建遵循表

Oracle University and Error : You are not a Valid Partner use only
索引属性的本地或全局索引。
SQL> CREATE INDEX orders_gidx_ordertotal
ON orders (order_total)
GLOBAL INDEXING PARTIAL;

• 通过指定 INDEXING FULL 子句,仍可创建覆盖表索


引属性的本地或全局索引。
SQL> CREATE INDEX orders_gidx_ordertotal
ON orders (order_total)
GLOBAL INDEXING FULL;

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

幻灯片示例中创建的 ORDERS_GIDX_ORDERTOTAL 全局索引仅会对使用 INDEXING ON


的表分区编制索引,而排除剩余分区。如前面所讨论,也可以使用 LOCAL 子句创建
PARTIAL 本地索引。

Oracle Database 12c:新功能 - 面向管理员 23-23


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

解释计划:LOCAL INDEX ROWID

针对表中两个分区的 ORDER_DATE 列创建了一个本地部分


索引。

Oracle University and Error : You are not a Valid Partner use only
SQL> EXPLAIN PLAN FOR SELECT order_mode, order_status FROM hr.tab_part1
WHERE order_mode='direct';
SQL> select * from table(dbms_xplan.display) ;

|Id|Operation | Name |Pstart|Pstop


---------------------------------------------------------------------------
| 0|SELECT STATEMENT
| 1| VIEW |VW_TE_2
| 2| UNION-ALL |
| 3| CONCATENATION |
| 4| PARTITION RANGE SINGLE | | 1 | 1
| 5| TABLE ACCESS FULL |TAB_PART1 | 1 | 1
| 6| PARTITION RANGE SINGLE | | 3 | 3
| 7| TABLE ACCESS BY LOCAL INDEX ROWID
BATCHED |TAB_PART1 | 3 | 3
| 8| INDEX RANGE SCAN |LIDX_ORDERDATE | 3 | 3
| 9| PARTITION RANGE OR | |KEY(OR)|KEY(OR)
|10| TABLE ACCESS FULL |TAB_PART1 |KEY(OR)|KEY(OR)

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

LIDX_ORDERDATE 本地部分索引由两个分区组成,为表中指定为 INDEXING ON 的分区


1 和 3 编制了索引。
在本示例中,本地部分索引用于访问分区 3 中的行,而不用于访问分区 1 中的行。分区 1
中的大多数行包含选定的值。

Oracle Database 12c:新功能 - 面向管理员 23-24


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

解释计划:GLOBAL INDEX ROWID

针对表中两个分区的 ORDER_MODE 列创建了一个全局部分


索引。

Oracle University and Error : You are not a Valid Partner use only
SQL> EXPLAIN PLAN FOR SELECT order_mode, order_status FROM hr.tab_part1
WHERE order_mode='direct';
SQL> select * from table(dbms_xplan.display) ;

|Id|Operation | Name |Pstart|Pstop


---------------------------------------------------------------------------
| 0|SELECT STATEMENT
| 1| VIEW |VW_TE_2
| 2| UNION-ALL |
| 3| TABLE ACCESS BY GLOBAL INDEX ROWID
BATCHED |TAB_PART1 |ROWID|ROWID
| 4| INDEX RANGE SCAN |GIDX_ORDERMODE | |
| 5| PARTITION RANGE OR | |KEY(OR)|KEY(OR)
| 6 | TABLE ACCESS FULL | TAB_PART1 |KEY(OR)|KEY(OR)

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

幻灯片示例中的 GIDX_ORDERMODE 全局部分索引仅会对五个表分区中指定为


INDEXING ON 的表分区(分区 1 和 3)编制索引。
在本示例中,全局部分索引用于访问表分区 1 和 3 中的行,而不用于访问未编制索引的
分区中的其他行。

Oracle Database 12c:新功能 - 面向管理员 23-25


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

受影响的数据字典视图:概览

数据字典视图/新列 说明

Oracle University and Error : You are not a Valid Partner use only
DBA|ALL|USER_PART_TABLES 显示分区表的对象级分区信息。
新列 DEF_INDEXING=ON/OFF
DBA|ALL|USER_TAB_PARTITIONS 显示分区级分区信息、分区存储参数和分
新列 INDEXING=ON/OFF 区统计信息。
DBA|ALL|USER_TAB_SUBPARTITIONS 显示子分区级分区信息、子分区存储参数
新列 INDEXING=ON/OFF 和子分区统计信息。
DBA|ALL|USER_INDEXES 显示索引。
新列 INDEXING =PARTIAL/FULL
DBA|ALL|USER_IND_PARTITIONS 针对每个索引分区,显示分区级分区信
DBA|ALL|USER_IND_SUBPARTITIONS 息、分区存储参数和各项分区统计信息。
Column STATUS=USABLE/UNUSABLE

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

下面是一些受影响视图的快速概览:
• DBA_PART_TABLES 视图显示数据库中所有分区表的对象级分区信息。新列
DEF_INDEXING 具有 ON 或 OFF 这两个值之一,在表级指定默认 indexing ON 或
indexing OFF。
• DBA_TAB_PARTITIONS 视图描述分区级分区信息、分区存储参数和 DBMS_STATS
程序包为所有分区生成的分区统计信息。新列 INDEXING 具有 ON 或 OFF 这两个值
之一,在分区级指定默认 indexing ON 或 OFF。
• DBA_TAB_SUBPARTITIONS 视图针对每个表的子分区描述子分区名称、所属表和
分区的名称及其存储属性。新列 INDEXING 具有 ON 或 OFF 这两个值之一,在子分
区级指定默认 indexing ON 或 OFF。
• DBA_INDEXES 视图用于描述索引。要搜集此视图的统计信息,请使用
DBMS_STATS 程序包。如果是全索引,则新列 INDEXING 是 FULL;如果是部分索
引,则新列是 PARTIAL。

Oracle Database 12c:新功能 - 面向管理员 23-26


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

• DBA_IND_PARTITIONS 视图针对每个索引分区,显示分区级分区信息、分区存储
参数和 DBMS_STATS 程序包生成的各项分区统计信息。如果使用本地部分索引分
区,则 STATUS 列是 USABLE;否则,该列是 UNUSABLE。与
DBA_IND_PARTITIONS 相似,DBA_IND_SUBPARTITIONS 也包含 STATUS 列,
该列会接受值 USABLE 或 UNUSABLE。

Oracle University and Error : You are not a Valid Partner use only

Oracle Database 12c:新功能 - 面向管理员 23-27


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

异步全局索引维护
• 在维护全局索引时,使用 UPDATE INDEXES 子句进行
的 DROP PARTITION 和 TRUNCATE PARTITION 操

Oracle University and Error : You are not a Valid Partner use only
作已经过优化:
– 使索引维护操作仅针对元数据进行
• 可以使用自动调度程序作业执行索引维护操作,以清除
所有全局索引:
– SYS.PMO_DEFERRED_GIDX_MAINT_JOB
– 执行 DBMS_PART.CLEANUP_GIDX 过程

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

需要维护全局索引的分区维护操作 DROP PARTITION 和 TRUNCATE PARTITION 已经


过优化,使索引维护操作仅针对元数据进行。此功能可允许在元数据中维护数据对象编号
列表,并忽略与删除和截断的对象相对应的无效索引条目。
可以使用自动调度程序作业 SYS.PMO_DEFERRED_GIDX_MAINT_JOB 执行索引维护操
作,以清除所有全局索引。默认情况下,该作业预定为每天凌晨 2 点运行。如果要主动
清除索引,可随时使用 DBMS_SCHEDULER.RUN_JOB 运行该作业。
也可以根据您的特定要求,将该作业修改为按不同调度运行。但是,Oracle 建议不要删
除该作业。

Oracle Database 12c:新功能 - 面向管理员 23-28


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

DBMS_PART 程序包

• DBMS_PART 程序包可让您完成分区对象的维护和管理

Oracle University and Error : You are not a Valid Partner use only
操作。
• 这个新程序包中包含 CLEANUP_GIDX 过程:
– 该过程会标识和清除全局索引,以确保存储效率和性能。
SQL> DESC dbms_part
PROCEDURE CLEANUP_GIDX
Argument Name Type In/Out Default?
--------------------- ---------- ------ --------
SCHEMA_NAME_IN VARCHAR2 IN DEFAULT
TABLE_NAME_IN VARCHAR2 IN DEFAULT

– 也可以使用下列选项之一强制清除需要维护的索引:
SQL> ALTER INDEX … REBUILD SQL> ALTER INDEX … COALESCE [PARTITION]
[PARTITION]; CLEANUP;

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

DBMS_PART 程序包提供了一个界面用于完成分区对象的维护和管理操作。由于之前通过
异步全局索引维护进行的分区维护操作,全局索引中的条目可能指向已不存在的数据段。
这些过时的索引行不会导致表或索引的任何操作期间出现任何正确性问题或损坏,不论它
们是查询、DML、DDL 还是分析。
DBMS_PART.CLEANUP_GIDX 程序包过程会标识和清除这些全局索引,以确保存储效率
和性能。
也可以使用下列选项之一强制清除需要维护的索引:
• DBMS_PART.CLEANUP_GIDX:此 PL/SQL 程序包过程会搜集系统中可能需要清除
的全局索引列表,并运行必要的操作以将这些索引还原到干净状态。
• ALTER INDEX REBUILD [PARTITION]:此 SQL 语句会像 Oracle Database
12.1 发行版之前那样重新构建整个索引或索引分区;生成的索引(分区)不包含任
何过时条目。
• ALTER INDEX COALESCE [PARTITION] CLEANUP:此 SQL 语句会清除索引块
中的任何孤立条目。

Oracle Database 12c:新功能 - 面向管理员 23-29


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

分区维护操作期间的全局索引维护优化

全局部分索引优化:

Oracle University and Error : You are not a Valid Partner use only
• 一个新列 ORPHANED_ENTRIES 已添加到以下数据字典
视图中:
– DBA|ALL|USER_INDEXES
– DBA|ALL|USER_IND_PARTITIONS
• 该列指定全局索引(分区)是否因为下列操作之一期间
的延迟索引维护而包含过时条目:
– DROP/TRUNCATE PARTITION
– MODIFY PARTITION INDEXING OFF
• 该列将包含下列三个值之一:
– YES、NO 或 N/A

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

• 新列 ORPHANED_ENTRIES 已添加到字典视图 DBA_INDEXES 和


DBA_IND_PARTITIONS 中。该列指定全局索引(分区)是否因为
DROP/TRUNCATE PARTITION 或 MODIFY PARTITION 操作期间的延迟索引维护
而包含过时条目。
• 该列可包含下列三个值之一:
- YES:索引(分区)包含孤立条目。
- NO:索引(分区)不包含任何孤立条目。
- N/A:该属性不适用;如果是本地索引或非分区表中的索引,就会显示此值。

Oracle Database 12c:新功能 - 面向管理员 23-30


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:a、e
d. NA
c. ON
b. NO

e. FULL
a. PARTIAL
值?(请选择所有适用项):
测验

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 23-31


可以为 DBA_INDEXES 视图中的新列 INDEXING 设置哪些

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED






说明间隔引用分区

描述异步全局索引维护
描述本地和全局部分索引
在本课中,您应该已经学会:

在单个操作中维护多个分区
小结

创建和维护本地和全局部分索引

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 23-32


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED


练习 23:概览

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


23-1:在分区表上使用本地和全局部分索引

Oracle Database 12c:新功能 - 面向管理员 23-33


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

JSON

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle Database 12c 新增功能和增强功能


Enterprise Manager Enterprise Manager Enterprise Manager
Cloud Control Database Express
其他工具
和其他工具

基础功能 CDB 和 PDB 创建 CDB 和 PDB 管理


CDB 和 PDB
热图和自动数据优化 联机数据文件移动

Oracle University and Error : You are not a Valid Partner use only
ADO 和存储
数据库中归档和期间有效性 期间历史记录

安全性 统一审计 权限分析 数据编写

HA RMAN

易管理性 DB 操作 实时 ADDM 比较时段 ADDM ADR


12.1.0.2 12.1.0.2

内存中列存储 整个数据库内存中高速缓存
性能 12.1.0.2
自动大表高速
SQL 优化 资源管理器 索引、表
缓存

数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2 SQL

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c R1 PS1 添加了对将 JavaScript 对象表示法 (JavaScript Object


Notation, JSON) 数据存储到 Oracle DB 中、对其进行查询以及为其编制索引的支持,并
允许数据库强制存储在 Oracle DB 中的 JSON 遵循 JSON 规则。
该功能还允许使用新的运算符查询 JSON 数据,这些运算符允许将基于 JSON 数据的查
询集成到 SQL 操作中。

Oracle Database 12c:新功能 - 面向管理员 24-2


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

课程目标

学完本课后,应能完成以下工作:

Oracle University and Error : You are not a Valid Partner use only
• 描述 JavaScript 对象表示法 (JavaScript Object Notation,
JSON) 的用途 12.1.0.2

• 将 JSON 数据存储在 Oracle RDBMS 中


• 使用 JSON 运算符查询 JSON 数据
• 为 JSON 数据编制索引

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 24-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

JSON:概览

• Web 体系结构中信息交换的主要数据格式

Oracle University and Error : You are not a Valid Partner use only
• NoSQL 存储中半结构化和非结构化无方案或动态方案
数据的格式
• 开发过程更快:
– 方案不是插入数据的先决条件。
– 与自然静态关系方案中的更改相比,无方案的数据结构
中的更改更加灵活。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

JSON 代表 RDBMS 中的半结构化和非结构化数据管理工作,无需提前了解数据方案即


可在 RDBMS 中存储和查询数据以及为其编制索引。
JSON 与 XML 有许多相同的属性,但 JSON 简单得多且不那么正式:
• JSON 没有方案、属性、名称空间、继承和替代项。
• JSON 学习起来更简单,使用起来更快速,并且更易于计算机生成、进行语法分析
和处理。
• JSON 显然是以数据为中心的数据模型。不对对象中的键值对进行排序。
顺应这一趋势的 Oracle 存储解决方案使用不同的存储系统:
• Oracle NoSQL 数据库。
• Oracle RDBMS 数据库,可以向内到达堆表或者使用外部表或 BFILE 向外到达外部
存储。

Oracle Database 12c:新功能 - 面向管理员 24-4


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

JSON:示例
• JSON 对象是对象、数组和标量数据的基于文本的可读
表示形式:
1 { "PONumber" : 1600, JSON 对象

Oracle University and Error : You are not a Valid Partner use only
2 "Reference" : "ABULL-20140421" , 键:值
3 "Requestor" : "Alexis Bull",
4 "User" : "ABULL",
5 "CostCenter": "A50",
数组
6 "ShippingInstructions" : {
一个或多个项目的集合
7 "name" : "Alexis Bull",
8 "Address": { ... },
9 "Phone" : [{"type":"Office","number":"905-555-5489"} ,{…}]
10 },
11 "Special Instructions" : null,
12 "AllowPartialShipment" : true,
13 "LineItems" : [{ ... },{ ... }] 9 个成员 K/V 对
14 }

• 值可以是其他对象、数组或标量值。
• 标量值是字符串、数字、布尔值和 NULL。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

JSON 对象实例必须遵循定义的编码。
幻灯片中的示例显示了由 { 和 } 括号定义的一个 JSON 对象。该对象不与任何名称关联,
而是独立存在。
该对象包含九个成员。每个成员由一个键(每个对象的键是唯一的)进行标识。
每个键与一个值关联。值可以是以下几项之一:
• 其他对象
• 一个数组:由包含值的 [ 和 ] 方括号指示(例如第 9 行和第 13 行中)
• 一个标量值:标量值是文本和数字(例如,第 2 行、第 3 行、第 4 行、第 5 行中)、
布尔值(例如,第 12 行中)或 NULL(例如,第 11 行中)

Oracle Database 12c:新功能 - 面向管理员 24-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle RDBMS 中的 JSON


Oracle RDBMS 中的 JSON 支持意味着您可以:
• 在表中存储 JSON 数据并为其 INSERT … SELECT
编制索引

Oracle University and Error : You are not a Valid Partner use only
SELECT …
• 从 JSON 数据中提取值并将其
映射到 SQL 类型 JSON 数据
{"name":"Bob","ad":"4,St.A"} 表
• 使用 JSON 数组作为行源 {"name":"Jim","ad":"5,St.B"}

• 将 JSON 数据存储到数据库以外
Row1: {"name":"Bob","ad":"4,St.A"} CREATE TABLE
Row2: {"name":"Jim","ad":"5,St.B"} … AS SELECT
JSON 数据

Row1: Bob, 4,St.A {"name":"Bob","ad":"4,St.A"}
Row2: Jim, 5,St.B {"name":"Jim","ad":"5,St.B"}

• 以文本和二进制格式与 JSON 交互

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

网络日志逗号分隔变量 (comma-separated variables, CSV) 可以轻松地映射到关系数据。


文件系统中存储的 JSON 数据在外部表的基础上使用 JSON_TABLE 和 JSON_VALUE 运
算符将 JSON 数据映射到关系表。
DBA 可以将 JSON 数据存储在外部表中,并从 Oracle RDBMS 查询 JSON 数据,而不必
将所有数据加载到一个存储中。

Oracle Database 12c:新功能 - 面向管理员 24-6


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

将 JSON 数据映射到 SQL 类型

• 支持以下列类型的文本 JSON:

Oracle University and Error : You are not a Valid Partner use only
– VARCHAR2(32767) 自动字符集转换
– CLOB 自动字符集转换
– BLOB
– RAW
– NCLOB
– NVARCHAR2
• 支持 BFILE 访问文件系统中的文件
• 通过将数据库字符集设置为 AL32UTF8 避免字符集转换

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

也支持 BFILE 访问文件系统中的文件。在这种情况下,文件必须为 Unicode。


支持 CLOB,但是它以 UTF16/UCS2 格式存储值,这样会导致使用更多字节(每个字符
两个字节)。
将在需要时自动执行字符集转换。JSON 查询引擎支持编码为 UTF8 和 UTF16 的
Unicode。字符集转换仅适用于“文本”列类型的 VARCHAR2 和 CLOB。它不适用于二进
制类型的 RAW 和 BLOB。它也不适用于 NVARCHAR2 和 NCLOB,因为这些仅存储
Unicode 数据。

Oracle Database 12c:新功能 - 面向管理员 24-7


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

创建 JSON 数据
• 创建用于存储 JSON 数据的表。
• 使用 CHECK 约束条件和 IS JSON 运算符:

Oracle University and Error : You are not a Valid Partner use only
SQL> CREATE TABLE j_purchaseorder (
id RAW(16) NOT NULL,
po_document CLOB CHECK (PO_DOCUMENT IS JSON))

• 按照定义的编码存储 JSON 数据:


SQL> INSERT INTO j_purchaseorder VALUES ( SYS_GUID(), '
{ "PONumber" : 1600,
"Reference" : "ABULL-20140421" ,
"Requestor" : "Alexis Bull",
"User" : "ABULL",
"CostCenter" : "A50",
"ShippingInstructions" : {
"name" : "Alexis Bull“,
"Address" : { ... },
"Phone" : [{"type":"Office","number":"905-555-5489"} ,{…}] },
"Special Instructions" : null,
"AllowPartialShipment" : true,
"LineItems" : [{ ... },{ ... }]}
');

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

所有文本类型(例如 VARCHAR2、NVARCHAR2、CLOB、NCLOB、RAW 和 BLOB)都有定


义的编码。要确保列仅存储 JSON 实例,检查约束条件可以在提交 INSERT 或 UPDATE
之前验证数据。IS JSON 谓词或 CHECK 约束条件可以确保只将有效的 JSON 数据传送
给 SQL/JSON 运算符。
DBA_JSON_COLUMNS 视图列出了所有者名称、表名、列名以及具有 IS JSON 检查约束
条件的每列的数据类型。这有助于检索包含 JSON 数据的所有列。
SQL> SELECT count(1) FROM j_purchaseorder WHERE po_doucment IS JSON;
此运算符可以对全部 JSON 数据进行语法分析,验证语法正确性(例如括号)以及每个
对象的键名唯一性。该运算符只能在谓词内使用。它不能在选择列表中使用。
IS JSON 运算符可以使用两种模式:
• 当且仅当数据严格遵循 JSON 标准时,IS JSON (STRICT) 才会返回 true。这
对于验证用户已创建的 JSON 数据(例如,通过字符串运算)很有用。
• IS JSON (LAX) 要求更加宽松。如果数据可以由 JSON 运算符处理,它便返回
true。LAX 模式是默认值。

Oracle Database 12c:新功能 - 面向管理员 24-8


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

查询 JSON 数据
• IS JSON 运算符可以检查包含有效 JSON 数据的行:
SQL> SELECT * FROM j_purchaseorder WHERE po_document IS JSON;

Oracle University and Error : You are not a Valid Partner use only
• 查询中的运算符使用路径表达式从 JSON 数据中选择
一个标量值:
列名 JSON 对象成员的键

PO_DOCUMENT PONumber Reference Requestor User CostCenter … LineItems

路径表达式:( po_document, '$.PONumber')


• JSON_VALUE 从 JSON 数据中选择一个标量值。
SQL> SELECT JSON_VALUE(po_document, '$.PONumber')
FROM j_purchaseorder;

JSON_VALUE(po_document,'$.PONumber')
---------------------------------------------------------------
1600

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

查询 JSON 数据需要使用 JSON 运算符,例如 IS JSON、JSON_VALUE、JSON_QUERY、


JSON_EXISTS 或 JSON_TABLE。
幻灯片中的第一个示例通过检查 JSON 内容是否符合 JSON 编码要求,使用 IS JSON 运
算符显示 po_document 表列包含 JSON 有效数据的行。
其他 JSON 运算符使用路径表达式从 JSON 数据中选择一个标量值,并将其返回到 SQL。
路径表达式用于在 JSON 分层数据中导航,并选择一个或多个值。路径表达式仅选择值,
而非键/值对。路径表达式是一系列步骤,每个步骤访问一个对象或一个数组。路径表达式
使用 JSON 对象的任何成员的表列名称和键。通配符可能是 (.*)。使用该通配符可以选择对
象的所有值,并访问数组的所有项目。
幻灯片中的第二个示例使用 JSON_VALUE 运算符。po_document 表列包含由九个成员组
成的 JSON 数据。其中一个是 PONumber。JSON_VALUE 运算符用于显示存储在
po_document 表列中的 PONumber 键值。
点表示法而非 JSON_VALUE 允许以下语法:
SQL> SELECT jp."PO_DOCUMENT"."User" FROM j_purchaseorder jp;

Oracle Database 12c:新功能 - 面向管理员 24-9


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用其他运算符查询 JSON 数据

• 类似于 JSON_QUERY,JSON_VALUE 也始终返回表示


一份 JSON 数据的值。

Oracle University and Error : You are not a Valid Partner use only
• 仅当选定的值包含一个或多个项目时,JSON_EXISTS
才会返回 true。
SQL> SELECT id FROM j_purchaseorder
WHERE JSON_EXISTS
(po_document, '$."Special Instructions"');

ID
--------------------------------
FA65F708C78B0C74E0430AAA2382409D
FA65F708C78C0C74E0430AAA2382409D
FA65F708C78D0C74E0430AAA2382409D
FA65F708C78E0C74E0430AAA2382409D
FA65F708C78F0C74E0430AAA2382409D

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

JSON_VALUE 只能从 JSON 数据返回一个标量值(字符串、布尔值或数字),而


JSON_QUERY 可以在 JSON 数据中选择零个、一个或多个元素,并将其作为有效的
JSON 返回:数组和对象可以直接返回。多个值或标量值必须包在一个数组内。
JSON_QUERY 运算符始终返回表示一份 JSON 数据的值,即使对于选择一个标量值的路
径表达式也是如此。
JSON_EXISTS 运算符是要在查询的 CASE 表达式或 WHERE 子句中使用的布尔值谓词。
仅当 JSON 进程返回的选定值不为空时,JSON_EXISTS 才会返回 true。如果选定值为
空,将返回 false。
幻灯片中的示例返回了已在 po_document 中为其提供特殊说明(即使值为 null)的
j_purchaseorder 的所有 ID。

Oracle Database 12c:新功能 - 面向管理员 24-10


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用 JSON_TABLE 和 NESTED PATH 运算符


解除 JSON 数据嵌套
• JSON_TABLE 允许表构造解除一个级别的嵌套。
• 当一个 JSON 数据实例有多个级别的数组嵌套时,NESTED

Oracle University and Error : You are not a Valid Partner use only
PATH 会映射 JSON 数据。
• 解除一个级别的嵌套:
SQL> SELECT d.* FROM j_purchaseorder p,
JSON_TABLE (
p.po_document,
'$'
COLUMNS (
po_number NUMBER(10) PATH '$.PONumber',
NESTED PATH '$.LineItems[*]'
COLUMNS (
itemno NUMBER(16) PATH '$.ItemNumber',
upccode VARCHAR2(14 CHAR) PATH '$.Part.UPCCode'
)
)
) d
WHERE po_number = 1600 or po_number = 1601;

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

链接列
一个 JSON 数据实例可以有多个级别的数组嵌套。JSON_TABLE 是解除一个级别嵌套的
运算符。
幻灯片中的示例显示了一个 j_purchaseorder 集合,其中每个客户都有一组电话号码。
JSON_TABLE 允许有关系地映射该数据。由于 JSON_TABLE 一次只能解除一个数组的嵌
套,因此必须使用两个 JSON_TABLE 并将其链接。第一个 JSON_TABLE 提取外部数组
(phones) 并将其传送到第二个 JSON_TABLE,它将在两个键(type 和 number)下解
除该数组的嵌套。
嵌套路径
SQL/JSON 标准允许第二个机制(称为“嵌套列”)钻探到集合。
嵌套列的主要构思是,一个 JSON_TABLE 行源可以使用 NESTED PATH 子句展平多个嵌
套数组。
链接可以实体化 FORMAT JSON 列的结果。该操作成本较高,并且仅限于 32k。如果某
个内部数组大于 32k,则无法返回。嵌套列不会将中间结果实体化为列值,因此不限于
32k。这通常会加快嵌套列的速度。

Oracle Database 12c:新功能 - 面向管理员 24-11


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

为 JSON 数据编制索引
• 创建 JSON 函数索引:
SQL> CREATE UNIQUE INDEX po_number_idx
ON j_purchaseorder (JSON_VALUE(PO_DOCUMENT,'$.PONumber'

Oracle University and Error : You are not a Valid Partner use only
returning NUMBER(10) ERROR ON ERROR));

SQL> CREATE BITMAP INDEX costcenter_idx


ON j_purchaseorder (JSON_EXISTS(PO_DOCUMENT,'$.CostCenter'));

• 创建 JSON 搜索索引:
SQL> CREATE INDEX po_document_idx
ON j_purchaseorder (PO_DOCUMENT)
indextype is ctxsys.context
parameters('section group CTXSYS.JSON_SECTION_GROUP');

SQL> SELECT index_name, index_type FROM user_indexes;

INDEX_NAME INDEX_TYPE
--------------------------- ----------------------------
PO_NUMBER_IDX FUNCTION-BASED NORMAL
COSTCENTER_IDX FUNCTION-BASED BITMAP
PO_DOCUMENT_IDX DOMAIN

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle RDBMS 12.1.0.2 中的 JSON 允许两种类型的索引:


• 函数索引:
- B*tree 索引 - 使用 JSON_VALUE 运算符。
- 位图索引 - 使用 IS_JSON 和 JSON_EXISTS 运算符。
• 搜索索引:使用上下文索引基础结构为全部 JSON 实例编制索引。这对于以下各项
很有用:
- 使用 JSON_TEXTCONTAINS 运算符进行的全文搜索查询。表示社交网络中帖
子的 JSON 数据就是一个例子,用户可能要从帖子内容中查询出现的某些词。
- 例如,探究 JSON 数据结构和内容时的即席查询,即无法预定义的查询。这些
可以使用 JSON_VALUE 和 JSON_EXISTS 运算符。
- VARCHAR2、BLOB、CLOB 和 BFILE 支持 JSON 搜索索引。
对于提前知道的查询(例如,按照 ID 查找帖子),函数索引可以提供较高的查询和索引
性能。

Oracle Database 12c:新功能 - 面向管理员 24-12


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用索引查询
• 使用 JSON_VALUE 运算符查询:
SQL> SELECT po_document FROM j_purchaseorder
WHERE JSON_VALUE (PO_DOCUMENT,'$.PONumber'

Oracle University and Error : You are not a Valid Partner use only
returning NUMBER(10)) = 1600;

-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2015 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| J_PURCHASEORDER | 1 | 2015 | 2 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | PO_NUMBER_IDX | 1 | | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------

• 使用 JSON_EXISTS 运算符查询
SQL> SELECT po_document FROM j_purchaseorder WHERE
JSON_EXISTS (PO_DOCUMENT,'$.ShippingInstructions.Address.county');

--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2014 | 4 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 2014 | | |
|* 2 | DOMAIN INDEX | PO_DOCUMENT_IDX | 5 | 10070 | 4 (0)| 00:00:01 |
--------------------------------------------------------------------------------------

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

幻灯片中的第一个示例显示了一个计划表,明确指出使用了 PO_NUMBER_IDX 索引。


第二个示例也显示了一个计划表,明确指出使用了 PO_DOCUMENT_IDX 搜索索引。谓词
信息显示通过搜索大于 0 的 ShippingInstructions.Address.county 键值执行了
访问。

Predicate Information (identified by operation id):


---------------------------------------------------
2-
access("CTXSYS"."CONTAINS"("J_PURCHASEORDER"."PO_DOCUMENT",'HASPATH(
/ShippingInstructions/Address/county)')>0)

Oracle Database 12c:新功能 - 面向管理员 24-13


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用 JSON 搜索索引查询
• 使用 JSON_TEXTCONTAINS 运算符查询:
SQL> SELECT count(*) FROM j_purchaseorder
WHERE JSON_TEXTCONTAINS(

Oracle University and Error : You are not a Valid Partner use only
PO_DOCUMENT,'$.LineItems.Part.Description','Seven' );

COUNT(*)
----------
164

• JSON_TEXTCONTAINS 需要 JSON 搜索索引:


SQL> SELECT count(*) FROM j_purchaseorder
WHERE JSON_TEXTCONTAINS(
PO_DOCUMENT,'$.LineItems.Part.Description','Seven' );
SELECT count(*) FROM j_purchaseorder
*
ERROR at line 1:
ORA-40467: JSON_TEXTCONTAINS() cannot be evaluated without
JavaScript Object Notation (JSON) index

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

第一个查询使用 JSON_TEXTCONTAINS 运算符。JSON_TEXTCONTAINS 运算符在


JSON 路径下执行全文搜索。
查询的解释计划明确指出了 PO_DOCUMENT_IDX 搜索索引的用法。
下文所述计划表的谓词信息确认通过搜索大于 0 的
ShippingInstructions/Address/county 键值(表示只有存在的那些项)执行了
访问。

Predicate Information (identified by operation id):


---------------------------------------------------
3 -
access("CTXSYS"."CONTAINS"("J_PURCHASEORDER"."PO_DOCUMENT",'HASPATH(
/ShippingInstructions/Address/county)')>0)

如果不存在 JSON 搜索索引,则使用 JSON_TEXTCONTAINS 运算符的搜索将失败。

Oracle Database 12c:新功能 - 面向管理员 24-14


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

视图

下面两个视图可以显示存储 JSON 数据的表和列:

Oracle University and Error : You are not a Valid Partner use only
• DBA_JSON_COLUMNS
• DBA_CONSTRAINTS

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

如果对某列定义了 IS JSON 检查约束条件,则该列将添加到 DBA_JSON_COLUMNS 视图。


该视图列出了用户名、表名、列名以及具有 IS JSON 检查约束条件的每列的数据类型。这
有助于检索包含 JSON 数据的所有列。
DBA_CONSTRAINTS 视图的 SEARCH_CONDITION 列允许以下新条件:
• IS JSON
• IS JSON (STRICT)
• IS JSON (LAX)
SQL> SELECT search_condition FROM user_constraints
2 WHERE constraint_type='C';

SEARCH_CONDITION
---------------------------------------------------------------------
"ID" IS NOT NULL
po_document IS JSON (STRICT)

Oracle Database 12c:新功能 - 面向管理员 24-15


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

小结

在本课中,您应该已经学会:

Oracle University and Error : You are not a Valid Partner use only
• 描述 JavaScript 对象表示法 (JavaScript Object Notation,
JSON) 的用途
• 将 JSON 数据存储在 Oracle RDBMS 中
• 使用 JSON 运算符查询 JSON 数据
• 为 JSON 数据编制索引

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 24-16


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED





24-2:查询 JSON 数据
24-1:存储 JSON 数据
练习 24:概览

24-4:在 JSON 数据中搜索全文(可选)

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


24-3:将 JSON 数据卸载到外部表(可选)

Oracle Database 12c:新功能 - 面向管理员 24-17


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SQL 增强功能

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


和 Migration Assistant for Unicode

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle Database 12c 新增功能和增强功能


Enterprise Manager Enterprise Manager Enterprise Manager
Cloud Control Database Express
其他工具
和其他工具

基础功能 CDB 和 PDB 创建 CDB 和 PDB 管理


CDB 和 PDB
热图和自动数据优化 联机数据文件移动

Oracle University and Error : You are not a Valid Partner use only
ADO 和存储
数据库中归档和期间有效性 期间历史记录

安全性 统一审计 权限分析 数据编写

HA RMAN

易管理性 DB 操作 实时 ADDM 比较时段 ADDM ADR


12.1.0.2 12.1.0.2

内存中列存储 整个数据库内存中高速缓存
性能 12.1.0.2
自动大表高速
SQL 优化 资源管理器 索引、表
缓存

数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

有几项 SQL 增强功能。


Migration Assistant for Unicode 取代了字符集扫描程序 (Character Set Scanner)。

Oracle Database 12c:新功能 - 面向管理员 25-2


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

课程目标

学完本课后,应能完成以下工作:

Oracle University and Error : You are not a Valid Partner use only
• 列举 Oracle SQL 中对 VARCHAR2、NVARCHAR2 和 RAW
数据类型长度限制的放宽
• 了解 Oracle Database Migration Assistant for Unicode 6.1
• 使 SecureFile 成为 LOB 的默认存储机制
• 在查询中使用 SQL 行限制子句

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要全面了解 Oracle 数据编写新功能的用法,请参考 Oracle 文档中的以下指南:


• 《Oracle Database Reference 12c Release 1 (12.1)》-“MAX_STRING_SIZE”
一章
• 《Oracle Database SQL Language Reference 12c Release 1 (12.1)》-“Data
Types”一章
参考其他信息来源:
• Oracle 学习库中的“Oracle Database 12c New Features Demo Series”演示:
- SQL Row_Limiting_Clause
• Oracle Database 12c:Installation and Upgrade 课程

Oracle Database 12c:新功能 - 面向管理员 25-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

放宽了数据类型的长度限制

• VARCHAR2、NVARCHAR2 和 RAW 数据类型的最大大小

Oracle University and Error : You are not a Valid Partner use only
增加到 32767 字节。
声明列长度大于 4000 字节的
声明列长度为 4000 字节或更少的
VARCHAR2 和 NVARCHAR2 列
VARCHAR2 和 NVARCHAR2 列
以及声明列长度大于 2000 字节
以及声明列长度为 2000 字节或更
的 RAW 列称为扩展字符数据类型
少的 RAW 列在行内存储。
列,它们在行外存储。

• MAX_STRING_SIZE 控制 SQL 中扩展数据类型的最大


大小。
MAX_STRING_SIZE = { STANDARD | EXTENDED }

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Oracle Database 12c 中,可以指定 VARCHAR2、NVARCHAR2 和 RAW 数据类型的最大


大小为 32767 字节。这样,用户便可以在数据库中存储更长的字符串。在本发行版之前,
VARCHAR2 和 NVARCHAR2 数据类型的最大大小为 4000 字节,RAW 数据类型的最大大小
为 2000 字节。声明的 VARCHAR2、NVARCHAR2 或 RAW 列长度影响如何在内部存储列。
• 声明列长度为 4000 字节或更少的 VARCHAR2 和 NVARCHAR2 列以及声明列长度为
2000 字节或更少的 RAW 列在行内存储。
• 声明列长度大于 4000 字节的 VARCHAR2 和 NVARCHAR2 列以及声明列长度大于
2000 字节的 RAW 列称为“扩展字符数据类型列”,它们在行外存储。
MAX_STRING_SIZE 控制 SQL 中扩展数据类型的最大大小:
• STANDARD 表示在 Oracle 12c 之前使用的数据类型长度限制。
• EXTENDED 表示 Oracle Database 12c 中的 32767 字节限制。
扩展字符数据类型具有以下限制:
• 在聚簇表和按索引组织的表中不受支持。
• 没有分区内并行 DDL、UPDATE 和 DELETE DML。
• 对于在使用自动段空间管理 (Automatic Segment Space Management, ASSM) 进行
管理的表空间中存储的表,没有分区内并行直接路径插入。
Oracle Database 12c:新功能 - 面向管理员 25-4
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

针对扩展数据类型配置数据库

1. 关闭数据库实例。
2. 在 UPGRADE 模式下重新启动数据库。

Oracle University and Error : You are not a Valid Partner use only
3. 将 MAX_STRING_SIZE 的设置更改为 EXTENDED。
SQL> ALTER SYSTEM SET MAX_STRING_SIZE = EXTENDED;

4. 以 SYSDBA 用户身份运行
$ORACLE_HOME/rdbms/admin/utl32k.sql 脚本。
5. 重新启动数据库实例。
注释
• 不能将值从 EXTENDED 更改为 STANDARD。
• 在 RAC 环境中,要关闭所有实例。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

只有将数据库实例参数 MAX_STRING_SIZE 设置为 EXTENDED 后,才能创建包含扩展字


符数据类型列的表。
RAC 环境中所有 RAC 节点上 MAX_STRING_SIZE 初始化参数的值也必须相同。

Oracle Database 12c:新功能 - 面向管理员 25-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用 VARCHAR2、NVARCHAR2 和 RAW 数据类型

• 可以创建包含扩展字符数据类型列的表:
SQL> CREATE TABLE long_varchar(id NUMBER,vc VARCHAR2(32767));

Oracle University and Error : You are not a Valid Partner use only
• 可以修改现有 VARCHAR2、NVARCHAR2 和 RAW 列的
大小:
SQL> ALTER TABLE t MODIFY (varchar_column VARCHAR2(32767));

• 可以将 32k 列添加到现有表中:


SQL> ALTER TABLE t ADD (long_varchar_column VARCHAR2(12345));

• 数据泵导出、导入和 SQL*Loader 可以使用扩展数据


类型。
• 索引可以防止现有列上出现数据类型扩展。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

可以按幻灯片中所述创建包含扩展字符数据类型列的表。
可以使用 ALTER TABLE MODIFY(列...)语句修改现有 VARCHAR2、NVARCHAR2 和
RAW 列的大小。在这种情况下,Oracle DB 将执行原地长度扩展,而不会将行内存储移植
到外部 LOB 存储。
注:Oracle 建议不要过度增加现有 VARCHAR2 列的大小使其超过 4000 字节,因为这样
会引发以下问题:
• 可能会发生行链接。
• 无论是否选择了列,都必须整个读取行内存储的任何数据。因此,行内存储的扩展
字符数据类型列会对性能产生不利影响。
• 要移植到扩展字符数据类型列的新行外存储,必须重新创建表。否则,将在任何类
型的表重组(例如 ALTER TABLE MOVE)期间保留列的行内存储。
如果某个现有表满足前面 CREATE TABLE 部分中所述的 32k 类型所需的条件,则可以通
过 ALTER TABLE ADD DDL 将 32k 列添加到该表中。
数据泵导出、导入和 SQL*Loader 可以使用扩展数据类型。
现有索引可以防止现有列上出现数据类型扩展。必须首先删除索引,然后修改包含新扩展
值的列,最后重新创建索引。
Oracle Database 12c:新功能 - 面向管理员 25-6
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Database Migration Assistant for Unicode


Unicode 更新:最新版本是 Unicode Standard 6.1。
• 是一项行业标准,允许计算机以一致的方式表示和处理

Oracle University and Error : You are not a Valid Partner use only
所有语言的文本和符号
Database Migration Assistant for Unicode 6.1 (DMU):
• 是新一代独一无二的移植工具,针对将数据库从标准字
符集移植到 Unicode 提供了简化的端到端解决方案
• 从数据库安装中删除了 CSSCAN 和 CSALTER 实用程序,
它们不再受支持
• 支持移植包含文本数据且处理数据库对象的所有 Oracle
数据类型
• 显著减少移植停机时间
• 位于 $ORACLE_HOME/dmu

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

DMU 是新一代独一无二的移植工具,针对将数据库从标准字符集移植到 Unicode 提供了


简化的端到端解决方案。从数据库安装中除去了标准的 CSSCAN 和 CSALTER 实用程序,
它们不再受支持。DMU 支持移植几乎所有可能直接或间接包含文本数据且处理数据库对象
(例如实体化视图、索引、约束条件和触发器)的 Oracle 数据类型,这些数据类型受表转
换的影响以便在移植后正确同步。它可以显著减少移植停机时间。它与 CDB 不兼容。
特性:
• 引导式端到端移植工作流
• 直观的图形用户界面
• 高级数据分析和清理工具
• 在验证模式下检查数据完整性以确保符合 Unicode 标准
优点:
• 通过自动移植任务减轻成本高昂的手动工作量
• 简化数据准备过程并防止数据丢失
• 强大的错误处理和故障恢复
• 在以 Unicode 标准编码的数据库中对数据完整性进行健康检查

Oracle Database 12c:新功能 - 面向管理员 25-7


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SecureFile

• SecureFile 成为大对象 (LOB) 的默认存储机制。

Oracle University and Error : You are not a Valid Partner use only
• 将 init.ora 参数 COMPATIBLE 设置为 12.0.0.0.0 或更高
时,DB_SECUREFILE 的默认值为 PREFERRED。
• 要更改该行为,请将该值设置为 PERMITTED。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

从 Oracle Database 12c 开始,SecureFile 已成为大对象 (large object, LOB) 存储的默认


机制。如果未显式指定任何存储类型,则新的 LOB 列将使用 SecureFile LOB 存储。
将 COMPATIBLE 实例参数设置为 12.0.0.0.0 或更高时,DB_SECUREFILE 的默认值为
PREFERRED。要更改该行为,请将该值设置为 PERMITTED。SecureFile 为在数据库中
存储非结构化数据提供了最佳性能。使 SecureFile 成为非结构化数据的默认存储机制有
助于确保数据库在您管理非结构化数据时实现尽可能高的性能。

Oracle Database 12c:新功能 - 面向管理员 25-8


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SQL 行限制子句

使用行限制子句可以限制查询返回的行数。

Oracle University and Error : You are not a Valid Partner use only
• 使用 FETCH FIRST/NEXT 关键字指定要返回的行数。
• 使用 PERCENT 关键字指定要返回的行数的百分比。
• 使用 OFFSET 关键字指定返回的行以整个结果集的第一
行后面的某一行开头。
将数据排序且限制行输出的查询得到广泛使用,通常称为
Top-N 查询。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Oracle Database 12c 发行版 1 中,SQL SELECT 语法得到了增强以允许行限制子句,


该子句可以限制在结果集中返回的行数。
限制返回的行数对报告、分析、数据浏览以及其他任务会非常有用。先将数据排序再限制
行输出的查询得到广泛使用,通常称为 Top-N 查询。
可以使用 FETCH FIRST/NEXT 关键字指定要返回的行数或行数的百分比。可以使用
OFFSET 关键字指定返回的行以整个结果集的第一行后面的某一行开头。

Oracle Database 12c:新功能 - 面向管理员 25-9


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

SQL 行限制子句:示例

SQL> SELECT employee_id, first_name


FROM employees

Oracle University and Error : You are not a Valid Partner use only
ORDER BY employee_id
FETCH FIRST 5 ROWS ONLY ;

SQL> SELECT employee_id, first_name 返回


FROM employees employee_id 值
最小的 5 个雇员
ORDER BY employee_id
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY ;

返回接下来 employee_id
值最小的 5 个雇员

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

可以在 SQL SELECT 语句中指定行限制子句,方法是将其放在 ORDER BY 子句后面。请


注意,ORDER BY 子句不是必需的。
• OFFSET:使用该子句可以指定在行限制开始之前跳过的行数。偏移量的值必须是一
个数字。如果指定负数,会将偏移量视为 0。如果指定 NULL 或者指定的数字大于或
等于查询返回的行数,将返回 0 行。
• ROW | ROWS:可以交换使用这些关键字。提供它们是为了语义清晰。
• FETCH:使用该子句可以指定要返回的行数或行数的百分比。
- FIRST | NEXT:可以交换使用这些关键字。提供它们是为了语义清晰。
- row_count | percent PERCENT:使用 row_count 可以指定要返回的行数。使用
percent PERCENT 可以指定要返回的选定总行数的百分比。百分比的值必须是
一个数字。
第一个代码示例返回 employee_id 值最小的五个雇员。
第二个代码示例返回下一组 employee_id 值最小的五个雇员。

Oracle Database 12c:新功能 - 面向管理员 25-10


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:a
b. 错
a. 对
为 EXTENDED。
测验

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 25-11


要使用扩展字符数据类型,必须将 MAX_STRING_SIZE 设置

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:a
a. 查询中的 SQL 行限制子句
测验

b. 会话参数 SQL_ROW_LIMITING
可以使用哪一项限制查询返回的行数:

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 25-12


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

小结

在本课中,您应该已经学会:

Oracle University and Error : You are not a Valid Partner use only
• 列举 Oracle SQL 中对 VARCHAR2、NVARCHAR2 和 RAW
数据类型长度限制的放宽
• 了解 Oracle Database Migration Assistant for Unicode 6.1
• 使 SecureFile 成为 LOB 的默认存储机制
• 在查询中使用 SQL 行限制子句

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 25-13


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED



练习 25:概览

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


25-2:使用 SQL 行限制子句查询表(可选)
25-1:使用 32K VARCHAR2 数据类型(可选)

Oracle Database 12c:新功能 - 面向管理员 25-14


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle University and Error : You are not a Valid Partner use only
新进程、视图、参数、程序包和权限

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


有关 Oracle Database 12c 新增功能的视图、参数、程序包和权限的完整列表,请参阅
Oracle 文档中的以下指南:
• Oracle Database Reference 12c Release 1 (12.1)
• Oracle Database PL/SQL Packages and Types Reference 12c Release 1 (12.1)
• 《Oracle Database Security Guide 12c Release 1 (12.1)》
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

实例和数据库
RCBG MMAN MMON MMNL RECO DBRM AQPC
VKRM PMON SMON SAnn EMNC GEN0 VKTM PSP0
(资源管理器的 (结果高速缓存) (内存管理器) Mnnn (轻量易管理性
监视器) (进程监视器) (系统监视器) (恢复进程) (SGA 分配器)
(数据库资源
(EMON 协调程序) (常规任务执行) (虚拟计时器) (进程衍生程序)
(AQ 进程协调
程序)
虚拟调度程序) (易管理性监视器) 管理器)

SMCO 系统全局区 (SGA)


共享池 大型池 共享 I/O 池 QMnn
Wnnn 最近最少使用 (AQ 主类)
(空间管理协调程序)
(LRU) 列表
数据库缓冲区高速缓存 (Securefile)
库高速缓存 响应队列

闪存缓冲区 缓冲池 非默认缓冲池 流池


共享 SQL 区域 冷 热 请求队列
(散列值 SQL 源 检查点队列 区域 默认
执行计划) Java 池
RSMN Oracle XA Qnnn
低 RBA 顺序 接口池

Oracle University and Error : You are not a Valid Partner use only
(远程从属监视器) (AQ 服务器类)
8K
共享服务器的 DEFAULT 闪存 2K 16 K
用户全局区 (UGA) ASH 缓冲区 闪回 LRU 链 重做日志
缓冲区 已用内存
缓冲区 备份/恢复操作

保留池
KEEP 闪存
CJQ0
IPC0 LRU 链 4K 32 K 共享服务器的
专用 SQL 区域 空闲内存 Jnnn
(IPC 服务) 数据字典高速缓存(行高速缓存)
(永久保留区域) (作业队列
协调程序)
结果高速缓存
保留 循环
固定 SGA
PX 消息池
入队
其他
LCK0、1 闩锁 OFSD
(锁进程) (Oracle 文件
全局资源目录(仅 RAC) 服务器)

FBDA DBW0..j ACMS LGWR TT00-zz ARCHn


ges 大消息缓冲区 gcs 保留散列存储桶
RVWR TMON BW36..99 CKPT
(恢复写进程) (传输监视器)
(闪回数据
归档程序) (检查点进程)
(内存服务 LG00-99 (重做传输
从属进程)
(归档程序进程)
n=0..9 或 n=a..t
的原子控制文件)
LMD0、Z
(数据库写进程) (重做日志写进程)
ges 资源 gcs 主存储桶

LDD0、Z ges 共享全局区 gcs 资源 31 个可能


RM
(全局入队服务) (RAT 屏蔽从属
的目标 进程)

数据库区
ges 进程数组 gcs 影子

快速恢复区
ges 保留消息缓冲区 gcs 关联性 数据文件和临时文件
LMHB 归档


归档 RPnn
系统

闪回日志
还原
(全局高速缓存/ ges 入队 重做日志文件 重做日志
入队脉动监视器) 归档
重做日志
控制文件 CTWR 文件
重做日志文件
文件
(捕获处理
Worker)
(更改跟踪
闪回线程 写进程)
重做线程

RMSn Pnnn SCMN SCMN



共享 服务器 更改
(并行查询
参数文件 跟踪文件 MARK
LREG
(RAC 管理进程)
从属进程) 服务器 (线程监听程序) (线程监听程序)
(标记重新同步
(监听程序注册 协调程序的 AU)
闪存高速缓存
Snnn Dnnn 进程)
闪存高速缓存
(共享服务器) (分派程序) 闪存高速缓存
闪存高速缓存
闪存高速缓存
闪存高速缓存
闪存高速缓存
PING MML OCFn
(互连等待时间度量) RMAN (介质管理层例程)
或 DIAG DIA0 (ASM CF 连接池)

程 进程 OSB (诊断捕获进程) (诊断进程)
用户 监

服务器 (Oracle Secure Backup)
程序全局区 (PGA)
进程 进程 SQL 工作区

LMON 游标 数据库驻留 专用 排序区 散列区 位图合并区


映像副本
自动诊断
RBAL
(全局入队服务 连接共享 服务器 资料档案库 (ADR) (ASM 重新平衡
监视器)
用户全局区 (UGA) 专用 SQL 区 主进程)
用户全局区 (UGA) 磁带备份
BG 跟踪 FG 跟踪
PRnn
Lnnn Nnnn 或 文件 文件
转储
文件 (并行恢复进程)
会话变量 OLAP 池 永久保留区 运行时区
(池化服务器进程) (连接代理进程)
HM 报表 意外事件 意外事件
程序包 转储
备份片段

Amazon S3 云
LMS0-Z
预警日志

(全局高速缓存服务)
备份集 文件
Onnn
(ASM 连接池)

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

说明文字:
1. 圆圈中的元素表示 Oracle 进程。如果这些元素周围是虚线(均匀虚线圈起的元素),
表示它们可以作为线程或 OS 进程运行。如果这些元素周围是实线,表示它们只能作
为 OS 进程运行。SCMN 是一个例外。使用多进程多线程体系结构时,运行多个
Oracle 进程的每个 OS 进程也运行一个称为 SCMN 的特殊线程,该线程从根本上讲
是内部监听程序线程。所有线程创建均通过该线程进行路由。
2. 黑色圆圈中的元素是 DB 12c 的新元素。
3. 圆圈中的元素有两个主要不同颜色的细微差别,这是为了区分 RAC 进程和非 RAC
进程。
4. 文件由圆柱体表示。
5. 这些文件的存储位置分成三个主要区域:快速恢复区、数据库区和自动诊断资料档案
库。使用三种不同颜色的背景矩形指定这些区域。服务器参数文件是一个例外。如果
发现某个文件类型属于两个区域,表示某些相应的文件可以在这两个区域内。
6. 在一个圆圈中的元素内,您可能会看到两个名称。这是为了指明第二个名称(较小的
文字)从属于第一个名称。

Oracle Database 12c:新功能 - 面向管理员 A-2


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

多租户体系结构:一般体系结构图示
监听程序 listener.ora

CDB 实例 PDB 容器 1 ... PDB 容器 n

多租户容器数据库
根容器 字典对象定义(元数据)
字典 OBJ$ 公用用户
CDB$ROOT 对象数据
CDB CDB_SERVICES SYS...
... DBMS_* . AWR
. 视图
C##...

Oracle University and Error : You are not a Valid Partner use only
公用 DBA、CDB_DBA...
CDB 资源计划 DBA_OBJECTS 角色 C##...
对象链接 公用 本地
元数据链接

权限 权限
快速的 PDB 间数据库链接

本地 本地
PDB$SEED PDB 容器 1 权限 PDB 容器 n 公用
公用 权限
OBJ$ .. OBJ$ .. 角色 后台进程 OBJ$
.. 角色
本地
本地 角色
角色
公用 公用 本地
PDB 资源计划 公用 本地 PDB 资源计划
用户
用户 用户
SGA 用户 用户

CDB 实例
PDBid1 PDBid1 PDBid1

PDB 文件 PDBid2

PDBid2
PDBid2 PDBid2
PDBid1
PDBid1

PDBid2

SYSTEM SYSAUX
PDBid1 PDBid2 PDBid1

SYSTEM SYSAUX SYSTEM SYSAUX


临时文件 临时文件 临时文件
用户 用户
前台进程

根文件

更改
预警日志 SYSTEM
跟踪文件

Wallet SYSAUX 用户 临时文件 还原


控制文件 重做 闪回日志 归档重做
数据文件 日志文件
SPFILE 日志文件

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

CDB 和 PDB
视图
• CDB_xxx:CDB 中所有 PDB 中的所有对象
• DBA_xxx:容器或 PDB 中的所有对象

Oracle University and Error : You are not a Valid Partner use only
• CDB_pdbs:CDB 内的所有 PDB
• CDB_tablespaces:CDB 内的所有表空间
• CDB_users:CDB 内的所有用户(公用和本地)
• V$PDBS:显示有关与当前实例关联的 PDB 的信息
• V$CONTAINERS:显示有关 PDB 以及与当前实例相关
的根的信息
• PDB_PLUG_IN_VIOLATIONS:显示有关对 CDB 进行
兼容性检查后 PDB 违规情况的信息
• RC_PDBS:恢复有关 PDB 备份的目录视图

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-4


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

CDB 和 PDB
参数
• ENABLE_PLUGGABLE_DATABASE:在 CDB 实例启动
时创建 CDB 所需的参数

Oracle University and Error : You are not a Valid Partner use only
• PDB_FILE_NAME_CONVERT:在处理 CREATE
PLUGGABLE DATABASE 语句时将现有文件的名称映射
到新文件的名称
• CDB_COMPATIBLE:使您获得类似于非 CDB 的行为
• PDB_OS_CREDENTIAL 12.1.0.2
:使除 oracle 以外的其他
OS 用户连接到 PDB
程序包
• DBMS_PDB.DESCRIBE
• DBMS_PDB.CHECK_PLUG_COMPATIBILITY

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

热图和 ADO
视图
• DBA_HEAT_MAP_SEG_HISTOGRAM

Oracle University and Error : You are not a Valid Partner use only
• DBA_HEAT_MAP_SEGMENT
• V$HEAT_MAP_SEGMENT
• DBA_ILMOBJECTS
• DBA_ILMPOLICIES、
DBA_ILMDATAMOVEMENTPOLICIES
• DBA_ILMTASKS、DBA_ILMEVALUATIONDETAILS
• DBA_ILMRESULTS
参数
• HEAT_MAP:激活活动跟踪和统计信息收集

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-6


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

热图和 ADO
程序包
• DBMS_HEAT_MAP
– BLOCK_HEAT_MAP

Oracle University and Error : You are not a Valid Partner use only
– EXTENT_HEAT_MAP
• DBMS_ILM
– EXECUTE_ILM、STOP_ILM
– PREVIEW_ILM、ADD_TO_ILM、REMOVE_FROM_ILM
– EXECUTE_ILM_TASK
• DBMS_ILM_ADMIN
– CUSTOMIZE
– DISABLE_ILM、ENABLE_ILM
– CLEAR_HEAT_MAP_ALL、CLEAR_HEAT_MAP_TABLE
– SET_HEAT_MAP_START
– SET_HEAT_MAP_ALL、SET_HEAT_MAP_TABLE

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-7


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

新列

程序包

– SET_CONTEXT_LEVEL
– ENABLE_AT_VALID_TIME
• DBMS_FLASHBACK_ARCHIVE
• 应用程序表中的 ORA_ARCHIVE_STATE

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


数据库中归档和期间有效性

Oracle Database 12c:新功能 - 面向管理员 A-8


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

安全性:审计
视图
• UNIFIED_AUDIT_TRAIL
• AUDIT_UNIFIED_POLICIES

Oracle University and Error : You are not a Valid Partner use only
• AUDIT_UNIFIED_ENABLED_POLICIES
UNIFIED_AUDIT_TRAIL 中的新列
• FGA_POLICY_NAME
• DP_xxx(数据泵操作)
• RMAN_xxx
• OLS_xxx
• DV_xxx(Database Vault 操作)
• XS_xxx(Real Application Security 操作)
程序包
• DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-9


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

安全性:权限分析

视图
• DBA_USED_PRIVS

Oracle University and Error : You are not a Valid Partner use only
• DBA_USED_SYSPRIVS、DBA_USED_OBJPRIVS
• DBA_USED_PUBPRIVS
• DBA_USED_OBJPRIVS_PATH、
DBA_USED_SYSPRIVS_PATH
• DBA_UNUSED_PRIVS
• DBA_UNUSED_OBJPRIVS、DBA_UNUSED_SYSPRIVS
• DBA_UNUSED_OBJPRIVS_PATH
• DBA_UNUSED_SYSPRIVS_PATH
• DBA_PRIV_CAPTURES

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-10


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

安全性:权限分析和新增权限

程序包
• DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE

Oracle University and Error : You are not a Valid Partner use only
• DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE
• DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE
• DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT
• DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE
权限
• SYSBACKUP
• SYSDG
• SYSKM
• PURGE DBA_RECYCLEBIN

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-11


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

安全性:Oracle 数据编写
视图
• REDACTION_POLICIES
• REDACTION_COLUMNS

Oracle University and Error : You are not a Valid Partner use only
• REDACTION_VALUES_FOR_TYPE_FULL
程序包
• DBMS_REDACT.ADD_POLICY
• DBMS_REDACT.ALTER_POLICY
• DBMS_REDACT.DROP_POLICY
• DBMS_REDACT.ENABLE_POLICY
• DBMS_REDACT.DISABLE_POLICY
• DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES
权限
• EXEMPT REDACTION POLICY
• EXEMPT DDL REDACTION POLICY
• EXEMPT DML REDACTION POLICY

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-12


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED


程序包
HA:闪回数据归档

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-13


DBMS_FLASHBACK_ARCHIVE.GET_SYS_CONTEXT
• DBMS_FLASHBACK_ARCHIVE.SET_CONTEXT_LEVEL

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

易管理性:数据库操作

新列
• DBOP_NAME

Oracle University and Error : You are not a Valid Partner use only
• 以下几项中的 DBOP_EXEC_ID
– V$SQL_MONITOR
– V$ACTIVE_SESSION_HISTORY
– CDB_HIST_ACTIVE_SESS_HISTORY
– DBA_HIST_ACTIVE_SESS_HISTORY
参数
• STATISTICS_LEVEL=TYPICAL
• CONTROL_MANAGEMENT_PACK_ACCESS=
DIAGNOSTIC+TUNING

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-14


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

易管理性:数据库操作

程序包

Oracle University and Error : You are not a Valid Partner use only
• DBMS_SQL_MONITOR.BEGIN_OPERATION
• DBMS_SQL_MONITOR.END_OPERATION
• DBMS_SQL_MONITOR.REPORT_SQL_MONITOR
• DBMS_SQL_MONITOR.REPORT_SQL_MONITOR_LIST
• DBMS_SQL_MONITOR.REPORT_SQL_MONITOR_XML
• DBMS_SQL_MONITOR.REPORT_SQL_MONITOR_LIST_XML

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-15


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

易管理性:ADDM

程序包 DBMS_ADDM:

Oracle University and Error : You are not a Valid Partner use only
新增函数
• REAL_TIME_ADDM_REPORT
• COMPARE_INSTANCES
• COMPARE_DATABASES
• COMPARE_CAPTURE_REPLAY_REPORT
• COMPARE_REPLAY_REPLAY_REPORT

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-16


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

性能:内存中列存储
程序包
• DBMS_INMEMORY.REPOPULATE
参数

Oracle University and Error : You are not a Valid Partner use only
• INMEMORY_SIZE
• INMEMORY_QUERY
• INMEMORY_CLAUSE_DEFAULT
• INMEMORY_FORCE
新列
• INMEMORY_PRIORITY、INMEMORY_DISTRIBUTE、
INMEMORY_COMPRESSION - 位于 DBA_TABLES、
DBA_TAB_PARTITIONS
• DEF_INMEMORY_PRIORITY、DEF_INMEMORY_DISTRIBUTE、
DEF_INMEMORY_COMPRESSION - 位于 DBA_TABLESPACES

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-17


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

性能:内存中列存储
视图
• V$IM_COLUMN_LEVEL

Oracle University and Error : You are not a Valid Partner use only
• V$IM_COL_CU
• V$IM_HEADER
• V$IM_SEGMENTS
• V$IM_USER_SEGMENTS
• V$IM_SEGMENTS_DETAIL
• V$IM_SEG_EXT_MAP
• V$IM_TBS_EXT_MAP
• V$IM_SMU_HEAD
• V$IM_SMU_CHUNK

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-18


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

新列

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-19


性能:整个数据库内存中高速缓存

• FORCE_FULL_DB_CACHING - 位于 V$DATABASE

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED


视图
参数

• V$BT_SCAN_CACHE
V$BT_SCAN_OBJ_TEMPS
性能:自动大表高速缓存

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


• DB_BIG_TABLE_CACHE_PERCENT_TARGET

Oracle Database 12c:新功能 - 面向管理员 A-20


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

性能:SQL 优化
程序包
• DBMS_SPM.REPORT_AUTO_EVOLVE_TASK
• DBMS_SPM.CREATE_EVOLVE_TASK

Oracle University and Error : You are not a Valid Partner use only
• DBMS_SPM.EXECUTE_EVOLVE_TASK
• DBMS_SPM.REPORT_EVOLVE_TASK
• DBMS_SPM.IMPLEMENT_EVOLVE_TASK
• DBMS_STATS.SEED_COL_USAGE
• DBMS_STATS.REPORT_COL_USAGE
参数
• OPTIMIZER_ADAPTIVE_REPORTING_ONLY
新列
• IS_RESOLVED_ADAPTIVE_PLAN、IS_REOPTIMIZABLE - 位于
V$SQL
视图
• DBA_SQL_PLAN_DIR_OBJECTS

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-21


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

性能:资源管理器
视图
• DBA_CDB_RSRC_PLAN_DIRECTIVES
程序包 DBMS_RESOURCE_MANAGER:新增过程

Oracle University and Error : You are not a Valid Partner use only
• CREATE_CDB_PLAN / UPDATE_CDB_PLAN / DELETE_CDB_PLAN
• CREATE_CDB_PLAN_DIRECTIVE /
UPDATE_CDB_PLAN_DIRECTIVE /
DELETE_CDB_PLAN_DIRECTIVE
• UPDATE_CDB_DEFAULT_DIRECTIVE
• UPDATE_CDB_AUTOTASK_DIRECTIVE
程序包 DBMS_RESOURCE_MANAGER:更新的过程
• SET_CONSUMER_GROUP_MAPPING:ORACLE_FUNCTION 属性的新值
– INMEMORY_PREPOPULATE
– INMEMORY_POPULATE
– INMEMORY_REPOPULATE
– INMEMORY_TRICKLE

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-22


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

参数
• THREADED_EXECUTION=TRUE
性能:多进程多线程

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-23


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED


参数更改

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


DB_FLASH_CACHE_SIZE=size1、size2
• DB_FLASH_CACHE_FILE=file1、file2
性能:数据库智能闪存高速缓存

Oracle Database 12c:新功能 - 面向管理员 A-24


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

参数
视图
• V$TEMPUNDOSTAT

• TEMP_UNDO_ENABLED=TRUE
性能:临时还原

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-25


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

性能:联机操作

程序包

Oracle University and Error : You are not a Valid Partner use only
• DBMS_REDEFINITION.START_REDEF_TABLE ( …,
copy_vpd_opt => DBMS_REDEFINITION.CONS_VPD_AUTO)
• EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE (…,
dml_lock_timeout => 100);

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-26


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

其他:分区
新列
• DEF_INDEXING - 位于

Oracle University and Error : You are not a Valid Partner use only
– DBA_PART_TABLES
• INDEXING - 位于
– DBA_TAB_PARTITIONS
– DBA_TAB_SUBPARTITIONS
– DBA_INDEXES
• ORPHANED_ENTRIES - 位于
– DBA_INDEXES
– DBA_IND_PARTITIONS
程序包
• DBMS_PART.CLEANUP_GIDX

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-27


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

视图
• DBA_JSON_COLUMNS
其他:JSON

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-28


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED


参数

DB_SECUREFILE=preferred
其他:SQL

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


• MAX_STRING_SIZE=standard|extended

Oracle Database 12c:新功能 - 面向管理员 A-29


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

程序包
• DBMS_COMPARISON
附录 C:数据比较

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 A-30


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle University and Error : You are not a Valid Partner use only
可插入数据库:其他创建方法

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

本附录介绍如何使用未在名为“创建容器数据库和可插入数据库”一课中详细介绍的方法
创建可插入数据库。
注:要全面了解 Oracle 可插入数据库新增功能和使用方法,请参阅 Oracle 文档中的以下
指南:
• 《Oracle Database Administrator’s Guide 12c Release 1 (12.1)》
• 《Oracle Database PL/SQL Packages and Types Reference 12c Release 1 (12.1)》
的“DBMS_PDB”一章
也可以参阅 OTN 白皮书:
• “Oracle Database 12c: Full Transportable Export/Import”
• “Overview of Cross-Platform Data Transport using Backup Sets”
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用数据泵将非 CDB 插入 CDB


容器数据库 CDB1 1. 从 ORCL 执行 TTS 或 TDB 导出。
2. 以具有 CREATE PLUGGABLE DATABASE
数据文件/ 控制 重做日志
临时文件 文件 文件 权限的公用用户身份连接到根。

Oracle University and Error : You are not a Valid Partner use only
根 3. 创建新的 PDB2(方法 1)。
数据文件/临时文件 4. 使用以下文件向 CDB1 / 中执行 TTS 或
PDB$SEED TDB 导入:
-从
数据文件 ORCL – ORCL 转储文件
PDB2 创建 – ORCL 数据文件
PDB2
6. 检查应用程序数据:
impdp TTS SQL> CONNECT sys@PDB2
SQL> SELECT * FROM HR.EMP;
转储文件

expdp TTS
数据文件 控制 重做日志
文件 文件

ORCL 12.1

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

如果选择可移动表空间 (transportable tablespace, TTS) 或可移动数据库 (transportable


database, TDB) 导出/导入方法,该方法与使用数据泵导出/导入在两个非 CDB 之间移动数
据相同。
1. 首先,从 ORCL 数据库执行 TTS 或 TDB 导出。
2. 然后,以公用用户身份连接到 CDB 的根。
3. 为了创建将作为 ORCL 数据的容器的新 PDB2,使用前面所述的方法 1。
4. 最后,使用 ORCL 转储文件和数据文件向 CDB 的 PDB2 中执行 TTS 或 TDB 导入。
导入命令使用到 PDB2 服务的连接。
5. 然后连接到 PDB2,在 dba_tables 视图中查看您的表是否在 PDB2 中。
检查应用程序数据是否已导入。
SQL> SELECT * FROM HR.EMP;
如果无法使用可移动数据库或可移动表空间移动数据,则使用完全常规的数据泵导出/导入
将数据和元数据移至 PDB。
注:要获得有关如何执行 TDB 的详细信息,请参阅讲解数据泵增强功能的课程或《Oracle
Database Administrator’s Guide 12c Release 1 (12.1)》中的“Transporting Data”一章。

Oracle Database 12c:新功能 - 面向管理员 B-2


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

使用复制方法将非 CDB 插入 CDB


容器数据库 CDB1 使用复制的方法:
数据文件/ 控制 重做日志
临时文件 文件 文件 1. 以具有 CREATE PLUGGABLE

Oracle University and Error : You are not a Valid Partner use only

DATABASE 权限的公用用户身份连接
数据文件/临时文件
到根。
PDB$SEED
-从 2. 创建新的 PDB2(方法 1)。
ORCL
数据文件
3. 在读/写模式下打开 PDB2。
PDB2 创建
PDB2 4. 配置从 ORCL 到 PDB2 的单向复制环境。
5. 检查应用程序数据:
SQL> CONNECT sys@PDB2
复制 SQL> SELECT *
2 FROM dba_tables;
SQL> SELECT * FROM HR.EMP;
数据文件 控制 重做日志
文件 文件

ORCL 12.1

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

如果选择复制方法,步骤如下所示:
1. 以具有 CREATE PLUGGABLE DATABASE 权限的公用用户身份连接到根。
2. 使用前面所述的方法 1 创建将作为 ORCL 数据的容器的新 PDB2。
3. 在读/写模式下打开 PDB2。
4. 配置 Oracle GoldenGate 单向复制环境,使非 CDB ORCL 作为源数据库,PDB2 作
为目标数据库。
5. 当 PDB2 中的数据跟上非 CDB ORCL 中的数据时,故障转移到 PDB2。

Oracle Database 12c:新功能 - 面向管理员 B-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

在 CDB 之间克隆 PDB


容器数据库 CDB1
1. 在 CDB1 中,以在 CDB2 中具有 SYSDBA
数据文件/
临时文件
控制
文件
重做日志
文件
权限的公用用户身份创建 link_cdb2。
根 2. 使用任意方法定义新 pdb4 文件的位置。

Oracle University and Error : You are not a Valid Partner use only
数据文件/临时文件
3. 作为 SYS 连接到 CDB2。
PDB$SEED 4. 使 PDB2 处于停顿状态:
数据文件
SQL> ALTER PLUGGABLE DATABASE
PDB1
pdb2 CLOSE;
-从 SQL> ALTER PLUGGABLE DATABASE
数据文件 PDB2 pdb2 OPEN READ ONLY;<
PDB4 创建
PDB4 5. 作为 SYS 连接到 CDB1。
6. 从 PDB2 克隆 PDB4:
容器数据库 CDB2
SQL> CREATE PLUGGABLE DATABASE

pdb4 FROM PDB2@link_cdb2;
PDB$SEED
7. 重新打开 PDB2。
数据文件
PDB2 8. 在读/写模式下打开 PDB4。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

该技术可以从 CDB 复制源 PDB,然后将副本插入另一个 CDB。


在这种情况下,必须在 FROM 子句中指定到远程 CDB 的数据库链接。
该数据库链接可以从将要包含新 PDB 的 CDB 连接到远程源 PDB。
有多种不同的方式指定所克隆 PDB 的文件的目标位置,可以在 CREATE PLUGGABLE
DATABASE 语句中使用 FILE_NAME_CONVERT 子句,或者省略该子句而使用
DB_CREATE_FILE_DEST 或 PDB_FILE_NAME_CONVERT 初始化参数。
该操作有一些限制。源和目标 CDB 平台必须满足以下要求:它们必须安装有相同的
endian 格式和兼容的数据库选项,并使用相同的字符集和国家字符集。

Oracle Database 12c:新功能 - 面向管理员 B-4


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

插入移走的 PDB:使用 SQL Developer


1. 选择要移走的 PDB。

2. 单击“Unplug

Oracle University and Error : You are not a Valid Partner use only
(移走)”。

3. 提供 xml 文件名。

4. 查看 SQL 语句。 6. 选择容器数据库。

5. 单击“Apply(应用)”按钮。 7. 单击“Plug(插入)”。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

可以使用 SQL Developer 执行移走和插入操作。


首先选择要移走的 PDB 并将其关闭。然后单击“Unplug(移走)”选项。为将要生成的
xml 文件提供一个名称。先查看 SQL 语句,再应用该语句。然后插入移走的 PDB,选择
容器数据库,并选择“Plug(插入)”选项。
注:在 Oracle Database 12.1.0.2 中,如果是在描述远程 PDB,则 PDB 名称可以指定借
以访问该 PDB 的数据库链接的名称。
SQL> create database link pdblink connect to system identified by
********
using 'PDB_SAMPLES';

Database link created.

SQL> exec dbms_pdb.describe('/tmp/pdb_samples.xml',


'PDB_SAMPLES@pdblink')
PL/SQL procedure successfully completed.

Oracle Database 12c:新功能 - 面向管理员 B-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

插入移走的 PDB:使用 SQL Developer


8. 为新插入的 PDB 提供一个名称。

Oracle University and Error : You are not a Valid Partner use only
9. 提供源 xml 文件名。

10. 查看 SQL 语句。

11. 单击“Apply(应用)”按钮。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要插入 PDB,请为新插入的 PDB 和 XML 文件源文件提供一个名称。先查看 SQL 语句,


再应用该语句。
最后一项操作是打开 PDB。

Oracle Database 12c:新功能 - 面向管理员 B-6


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

方案和数据更改管理

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

课程目标

学完本课后,应能说明:

Oracle University and Error : You are not a Valid Partner use only
• 为什么以及何时使用新增的方案更改计划功能
• 如何使用方案更改计划
• 为什么以及何时使用新增的数据比较功能
• 如何使用数据比较

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

注释
有关许可“数据库生命周期管理包”的信息,请参阅 Oracle 文档中的以下指南:
• 《Oracle Enterprise Manager Licensing Information 12c Release 1 (12.1)》
请参阅其他信息资源:
• Oracle 学习库中“Oracle Enterprise Manager Cloud Control 12c Demo Series”
演示:
- Managing Schema Change Plans
- Performing Data Comparison
方案更改计划和数据比较操作只能在 Enterprise Manager Cloud Control 中执行。

Oracle Database 12c:新功能 - 面向管理员 C-2


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c

数据库生命周期管理包:新增功能

方案更改计划:
• 将方案更改保存到更改计划中。

Oracle University and Error : You are not a Valid Partner use only
• 将更改应用于多个目标。

数据比较:
• 跨环境比较参考数据。
• 确定测试和生产环境之间的差异。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

数据库生命周期管理包用于确保企业可以管理所有更改,无论是在将数据库从开发测试环
境提升到生产环境时主动执行,还是在生产环境中发生导致问题的任何意外更改时被动执
行。Enterprise Manager 提供此功能是为了自动识别和检测这些更改,以便组织可以立即
采取措施并在无脚本和手动干预的情况下自动完成应用更正操作的过程。
数据库生命周期管理包允许您:
• 基于两个数据库之间的比较将方案更改组合到方案更改计划中,然后将这些更改计划
从一个环境传播到另一个环境
• 执行允许跨环境比较数据的数据比较,并确定测试和生产环境之间的数据差异

Oracle Database 12c:新功能 - 面向管理员 C-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

方案更改计划
方案更改计划
Change Management Pack 功能 数据比较
数据比较

Oracle University and Error : You are not a Valid Partner use only
自动将开发环境中的计划更改
同步到生产环境。
开发 生产

在生产环境中检测意外更改
并修复它们。
生产 生产

HR HR
Appli 分析应用程序升级 Appli
V1 V2
对定制设置的影响。
生产 生产

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Change Management Pack 功能


通过 Oracle Enterprise Manager 11g 发行版 1 Change Management Pack,数据库管理
员可以评估、计划和实施数据库方案更改,以便在不会引发错误和丢失数据的前提下支持
新应用程序要求,同时最大限度地缩短停机时间。
Oracle Enterprise Manager 11g 发行版 1 Change Management Pack 允许您:
• 自动将开发环境中的计划更改同步到生产环境
• 在生产环境中检测意外更改并修复它们
• 分析应用程序升级对定制设置的影响
例如,如果您具有定制应用程序或者定制对象或模块并执行应用程序升级,则会在您毫无
察觉的情况下添加一些触发器,可能还会向表中添加一些列。一些模块可能也受数据库对
象更改的影响。Change Management Pack 将分析并报告对应用程序对象所做的更改。
如何自动将开发环境中的计划更改同步到生产环境?

Oracle Database 12c:新功能 - 面向管理员 C-4


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

Change Management Pack 组件

1. 创建字典基线:

Oracle University and Error : You are not a Valid Partner use only
– 包含特定时间捕获的一组对象的定义
– 可用于比较
2. 执行字典比较:
– 检测两个版本的对象定义之间的差异
3. 执行字典同步:
– 使目标数据库中一组对象的定义与源中的相同

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在 Enterprise Manager 11g 发行版 1 中,Change Management Pack 的主要功能包括以


下几项,这些功能使管理员能够评估、计划和实施数据库方案更改:
• 字典基线:某个时间点的数据库及其关联数据库对象的定义
• 字典比较:一个基线或数据库与另一基线或数据库之间的差异的完整列表
• 字典同步:促进基线中所捕获数据库定义的更改或数据库中的更改应用到目标数据
库的过程

Oracle Database 12c:新功能 - 面向管理员 C-5


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

字典基线
包含在特定时间捕获的数据库或数据库子集的定义
• 非方案对象类型:

Oracle University and Error : You are not a Valid Partner use only
– 表空间
– 用户、概要文件、角色和授权
• 应用程序的所有方案对象
– 表、视图、索引
– 过程、程序包、触发器
– init.ora
提供存储在 EM 资料档案库中的时间点快照
HR HR HR
EMP EMP DEPT EMP DEPT I_DEPT
V1 V2 V3

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

字典基线是包含在特定时间点捕获并存储在 Enterprise Manager 资料档案库中的一组数


据库定义的对象。
创建基线时,要创建相应的基线范围规范,用于描述捕获时所基于的数据库对象和方案的
名称和类型。
您可以在稍后或者定期捕获相同基线的其他版本。范围规范确定要在基线中捕获的数据库
对象。(范围规范还确定在字典比较和同步中要处理的对象。)指定基线范围之后,无法
更改范围规范。此限制确保所有版本的基线都使用相同的规则集捕获,这意味着版本之间
的差异来自数据库中的更改,而非范围规范更改。基线可以在未来与其他数据库或其他基
线进行比较时用作参考,以分析是否发生了更改。

Oracle Database 12c:新功能 - 面向管理员 C-6


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

• 基线范围规范可以包括:
- 要捕获的方案和对象类型
例如,您可以捕获所有表、索引以及方案 HR 和 SH 的视图。
- 非方案对象,例如,用户、角色、表空间以及授予用户和角色的权限
您可以指定要排除的方案和对象类型。
- 单个方案对象(通过指定每个对象的类型、方案和名称)
- init.ora 参数

Oracle University and Error : You are not a Valid Partner use only
基线是用于与其他基线或数据库进行比较的不错的参考。
开发人员如何使用基线?
一些开发人员使用同一测试数据库,并在同一应用程序中做出更改。在不同的时间点,自
动作业定期创建基线的新版本,其中包括随着时间的推移不同开发人员做出的更改。报告
的更改存储在数据库外的 Enterprise Manager 资料档案库中。它是可审计的。

Oracle Database 12c:新功能 - 面向管理员 C-7


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

字典比较

• 包含特定时间数据库对象定义的比较结果
• 可以比较:

Oracle University and Error : You are not a Valid Partner use only
– 数据库与数据库
– 基线与数据库
– 方案与方案
• 可以定义要比较的内容
HR
EMP DEPT I_DEPT
源数据库
HR
EMP 添加的对象
比较
HR 删除的列 表 DEPT
EMP 索引 I_DEPT
目标数据库

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

将识别的更改传播到另一数据库过程的下一步是将参考数据库或基线与目标数据库进行
比较。
您将执行字典比较,字典比较可以识别开发数据库的基线与生产数据库之间、测试数据
库与生产数据库之间或者单个数据库/基线中两个方案之间数据库对象定义的差异。
比较规范由源和目标、范围以及所有者定义。范围规范描述比较中包含的数据库对象定
义的名称和类型以及包含这些对象定义的方案。
比较识别任意类型的对象之间任意属性的差异。例如,比较显示应用程序的原始基线中
的定义与当前数据库中的定义之间的差异。创建新的比较版本之后,它识别开发周期开
始时的原始定义与目前的相同定义之间的差异。
源中的方案对象与目标中相同方案的对象进行比较。例如,开发源数据中的 HR.EMP 表
与生产目标数据库中的 HR.EMP 进行比较。
将报告源数据库和目标数据库之间的所有差异:
• 在源数据库或目标数据库两者任何一个中向表添加了新列或从表中删除了列。
• 在源数据库中创建了新索引但未在目标数据库中创建,或者反之。

Oracle Database 12c:新功能 - 面向管理员 C-8


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c 之前版本

字典同步
将源数据库或基线与目标数据库进行比较之后的字典同步
操作分三个阶段执行:
1. 在应用之前查看并编辑验证的更改。

Oracle University and Error : You are not a Valid Partner use only
2. 生成影响报告和脚本。
生成脚本
3. 执行脚本。 脚本

比较结果 编辑并验证更改 CREATE TABLE


DEPT
HR HR
CREATE INDEX
EMP 添加的对象 EMP 添加的对象
I_DEPT
删除的列 表 DEPT 否 表 DEPT
索引 I_DEPT 索引 I_DEPT
影响

表空间 TAB:
另需 50M

执行脚本 表空间 INDX:


另需 80M
目标数据库

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

最后一步是字典同步,字典同步将同步两个数据库之间或者基线与数据库之间数据库对象
定义的差异。数据库同步的基本操作是在数据库中创建或修改选定的对象定义,以便与另
一数据库或基线中的对象定义相匹配。
同步分三个步骤执行:
1. 在生成脚本之前查看建议的更改列表,以便有选择地从同步中排除对象。交互同步
模式允许您在第二步中执行此操作,以检查比较结果。
2. 验证建议的更改。生成 SQL 脚本。您仍可以查看 SQL 脚本以消除某些 SQL 语句并
要求重新生成脚本。
3. 继续执行脚本。

Oracle Database 12c:新功能 - 面向管理员 C-9


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

比较更改传播与 11g SQL 脚本

类别 更改传播 SQL 脚本

Oracle University and Error : You are not a Valid Partner use only
智能更改验证 是 否
在应用之前预览并编辑更改 是 否
自动保存和通过版本处理更改 是 否
显示应用的更改的日志 是 是
维护更改日志的历史记录 是 否
(或者手动)
集中管理 是 否
允许在不显示数据库口令的情况下执行 是 否

设计用于跨多个数据库环境处理数据库 是 否
更改

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

使用 Change Management Pack 而非 SQL 脚本的更改传播优势


• 使用 Change Management Pack 的更改传播提供智能更改验证。使用 11g SQL 脚
本的方法非常耗时并且可能容易出错。
• 比较允许您预览和编辑更改。系统自动识别更改。进行比较之后再处理所有建议的
更改更加简单。您只需拒绝或接受更改即可。
• 您可以通过 GUI Enterprise Manager 工具跟踪更改的不同版本。使用脚本处理此操
作比较困难:您必须手动创建目录以托管假脱机文件并维护更改日志的历史记录。
• 更改集中存储在 Enterprise Manager 资料档案库中。
• 不显示口令,而 SQL 脚本则显示。Enterprise Manager 提供了此功能,以便可以非
常安全地存储与安全身份识别相关的身份证明,因此开发人员和 DBA 无需记住口令
即可在开发数据库中创建基线或在目标数据库中应用更改。
• 它设计用于跨多个数据库环境(例如,开发、测试、报告、生产数据库)反复处理
数据库更改应用。在一个位置捕获更改,然后可以在多个目标数据库中应用更改。

Oracle Database 12c:新功能 - 面向管理员 C-10


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c

数据库生命周期管理包方案更改计划
更改计划允许用户指定对象元数据更改并将其分组和打包。
基于以下对象创建更改计划:

Oracle University and Error : You are not a Valid Partner use only
• 即席更改
• 基于比较的差异
• 开发人员工具
将更改应用于多个目标。
基于角色的工作流
• 开发人员:通过 SQL Developer 创建/存储更改计划
• DBA:复查/应用更改计划

保存在 复查并编 验证更改 生成执行 应用更改


形成方案更改
更改计划中 译更改计划 计划 脚本 计划

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

应用程序开发人员需要自动机制来捕获开发更改以移交给 DBA,而不是来回发送脚本,
来回发送脚本非常耗时并且可能容易出错。方案更改计划为开发人员和 DBA 提供了通过
单个通用对象(即更改计划)处理应用程序方案更改的自动化方法。
此对象由开发人员创建,用于收集并存储应用程序方案更改,DBA 将复查这些更改并将
它们应用于所有目标系统。因此,这是存放更改请求的容器对象。
根据您在企业中的角色,您可以使用不同的工具来管理更改计划。
1. 开发人员使用 SQL Developer 工具创建更改计划并将更改计划存储在 Enterprise
Manager 资料档案库中。这些更改可以是即席更改,例如,新创建的表和索引、在
表中添加或删除的列、修改的过程、添加的触发器、修改的视图。DBA 还可以依靠
基于比较的更改来创建更改计划。例如,如果您比较具有一个共同表的两个数据库,
但是一个数据库中的表比另一数据库中的相同表多一列,则这项更改可以包含在更改
计划中。过去,这些更改通过脚本手动收集。Enterprise Manager 12c 数据库生命周
期管理引入了更改计划这个新对象,开发人员或 DBA 可以在其中存储所有应用程序
更改。更改计划与源数据库无关联。

Oracle Database 12c:新功能 - 面向管理员 C-11


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

2. 使用 Enterprise Manager GUI 工具,DBA 复查更改计划中的更改,编辑并验证更改


(可能执行也可能不执行)并最终请求生成 SQL 脚本。脚本生成完成后,DBA 执
行 SQL 脚本以将所有接受的更改应用于多个数据库。
如果不允许开发人员访问测试或生产环境,则引入的相应重要功能是使用基于角色的工作
流。如果您查看幻灯片底部的流程,则会发现开发人员和 DBA 扮演不同的角色。开发人
员使用 SQL Developer 管理应用程序开发,期间提供方案更改。他们创建更改计划以存
储更改并将其存储在 Enterprise Manager 资料档案库中。

Oracle University and Error : You are not a Valid Partner use only
然后,DBA 使用 Enterprise Manager 复查并编辑方案更改计划。他们验证更改后,请求
生成 SQL 脚本并在预定的时间执行以将更改应用于多个目标。

Oracle Database 12c:新功能 - 面向管理员 C-12


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

更改请求

• 更改计划包含针对一个或多个元数据对象的更改请求。

Oracle University and Error : You are not a Valid Partner use only
• 更改请求可以请求:
– 创建对象
– 删除对象
– 修改对象的一个或多个属性
• 部署更改计划以同步目标时:
– 在所部署数据库的上下文中分析更改
– 基于目标数据库中的元数据生成相关 PL/SQL 脚本

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

方案更改计划包含针对一个或多个元数据对象的更改请求。更改请求有三种形式:
• 创建数据库对象:它包含数据库对象的完整定义。例如,在开发数据库中创建了一个
新表,需要在目标数据库应用程序中添加此表。
• 删除数据库对象:它包含对象的类型、方案和名称,以及用于删除该对象的说明。例
如,目标数据库中无需再包含某个表或索引,因为开发人员已将其从应用程序中删除。
• 修改数据库对象:它包含与特定对象属性相关的一个或多个说明。可以采用各种形式:
- 修改属性的值:例如,将表的表空间更改为 USERS 或者将列 C1 的数据类型从
VARCHAR2(50) 更改为 VARCHAR2(100)。
- 添加或删除子对象,如表列或分区。例如,如果需要在目标数据库的表中添加或
删除一些列,则修改对象的一个或多个属性。
- 更改初始化参数的值。
可以监视某个对象,以便此对象发生任何更改时,可以向更改计划通知应用于此监视对象的
更改类型。

Oracle Database 12c:新功能 - 面向管理员 C-13


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

方案更改计划不是 SQL 脚本。更改请求包含要做出的更改的抽象规范。将更改计划部署


到数据库会生成适用于该数据库的脚本。
在部署阶段验证方案更改计划时还应该考虑的问题是,在目标数据库上下文中分析更改以
确定是否可以执行更改。例如,如果更改建议在目标数据库表中添加一列,以便与测试数
据库中的相同表相匹配,同时该列已手动添加到目标表中,则分析将报告应用更改没什么
用。另一个示例,如果更改请求想要修改的表未存在于目标数据库中,则无法执行该更改
请求。同样地,如果更改请求向表中添加外键约束条件,但是约束条件引用的表不存在,

Oracle University and Error : You are not a Valid Partner use only
则约束条件无法添加到表中。
它确定更改是否具有不良后果。例如,如果某个表列的数据类型为 VARCHAR2(200),则
请求将数据类型更改为 VARCHAR2(100) 可能会导致脚本执行失败或者截断现有数据。
它创建执行更改请求所需的 DDL 语句。
它确定受方案更改计划部署影响的对象之间的依赖关系并对 DDL 语句进行相应的排序。
这是智能分析,用于对照目标数据库中的实际定义验证在测试数据库中所做的更改,以检
查是否可以成功应用更改。
它生成影响报告,指明何时无法执行更改请求或者可能会导致问题。DBA 可以在执行生成
的脚本之前检查影响报告与脚本。
PL/SQL 脚本根据目标数据库的元数据针对特定目标数据库生成,此步骤仍允许 DBA 在
执行脚本之前排除要对目标数据库执行的某些操作。

Oracle Database 12c:新功能 - 面向管理员 C-14


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

方案同步
1. 方案同步或方案更改计划

Oracle University and Error : You are not a Valid Partner use only
2. 从更改计划创建方案
同步

• 如果使用“Schema Synchronizations(方案同步)”,则从以下屏幕创建
方案同步:
– “Database(数据库)”或“Baseline(基线)”或“Change plan
(更改计划)”屏幕
• 如果使用“Schema Change Plans(方案更改计划)”,则选择“Create
Synchronization from Change Plan(从更改计划创建同步)”。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

由于方案更改计划是新增的同步源,因此用于补充现有的更改管理字典同步组件。
方案同步操作使目标数据库中一组对象的定义与源中的定义相同,并且仍分三步执行。
同步之前的步骤仍然是将源与目标数据库进行比较,但是此源可以是数据库、基线或者更
改计划。在之前的 Oracle Change Management Pack 版本中,比较源只能是基线或源数
据库。DBA 只需复查方案更改计划中包含的所有更改并在请求生成脚本之前验证它们。
您可以通过两种方式执行同步的第一步:
• 在“Schema(方案)”菜单中,依次单击“Change Management(更改管理)”
选项、“Schema Synchronizations(方案同步)”选项和“Create Schema
Synchronization(创建方案同步)”,在其中将提示您选择同步源。在 Enterprise
Manager Cloud Control 中,现在更改计划作为可能的源列出。
• 在“Schema(方案)”菜单中,依次单击“Change Management(更改管理)”
选项和“Schema Change Plans(方案更改计划)”选项,并在可用于同步目标的
更改计划中进行选择。然后单击“Create Synchronization from a Change plan(从
更改计划创建同步)”按钮。将执行分析,以显示更改请求中的不一致。在生成脚
本的过程中,仍允许您在执行脚本之前排除要对目标数据库执行的某些操作。

Oracle Database 12c:新功能 - 面向管理员 C-15


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

方案同步

生成脚本

Oracle University and Error : You are not a Valid Partner use only
更改计划 编辑并验证更改 CREATE TABLE
DEPT
HR HR
EMP 添加的对象 EMP 添加的对象 CREATE INDEX
I_DEPT
删除的列 表 DEPT 否 表 DEPT
索引 I_DEPT 索引 I_DEPT

表空间 TAB:
另需 50M
执行脚本 表空间 INDX:
另需 80M
目标数据库

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

同步之前的步骤仍然是将源与目标数据库进行比较,现在源可以是更改计划。DBA 复查比
较之后发出的所有更改,并在请求生成脚本之前验证它们。
执行“Create Synchronization from a Change Plan(从更改计划创建同步)”分析之后,
将显示更改请求中的不一致。在生成脚本的过程中,仍允许您在执行脚本之前排除要对目
标数据库执行的某些操作。

Oracle Database 12c:新功能 - 面向管理员 C-16


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

12c

方案更改计划
方案更改计划
数据库生命周期管理包数据比较 数据比较
数据比较

数据比较弥补了重要不足,允许:

Oracle University and Error : You are not a Valid Partner use only
• 应用程序供应商比较种子数据
• 应用程序客户比较不同站点的配置数据
• DBA 确定应用程序升级对种子数据定制设置有何影响

数据库 A 数据库 B

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

数据库生命周期管理包的数据比较弥补了缺少此数据比较功能的 Change Management


Pack 的重要不足。
应用程序供应商需要比较不同应用程序版本的种子数据。
应用程序的客户可能希望比较不同站点的配置数据。
DBA 可能希望知道应用程序数据库升级期间将对其种子数据定制设置产生什么影响。这
可以通过将生产数据库克隆到测试数据库、升级测试数据库、然后比较测试数据库和生产
数据库的种子数据来完成。数据比较的此类应用情形有很多。
数据比较是数据库生命周期管理包的新增功能。此功能可以通过 Enterprise Manager
Cloud Control GUI 页面访问,这些页面提供 Oracle DB 中 DBMS_COMPARISON 程序包
的访问界面。

Oracle Database 12c:新功能 - 面向管理员 C-17


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

DBMS_COMPARISON

数据比较提供了用于访问 DBMS_COMPARISON 程序包的 GUI


界面。

Oracle University and Error : You are not a Valid Partner use only
• 比较参考数据库和候选数据库的数据
– 要求在两个数据库之间创建数据库链接
– 参考数据库和候选数据库可以是同一数据库
• 可用于不同类型的数据:
– 种子数据 - 安装时随应用程序提供
– 配置数据 - 用户设置的应用程序参数
– 主数据 - 与业务相关的数据系列(例如,客户、供应商、
产品、员工等)
– 事务处理数据 - 记录业务流程的操作

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

数据比较依赖于 Oracle DB 的 DBMS_COMPARISON 程序包。DBMS_COMPARISON 是


Oracle Database 11g 中的一个程序包,允许比较不同数据库中的数据库对象并识别它们
之间的差异。
DBMS_COMPARISON 比较参考数据库和候选数据库的数据库对象中的数据。
参考数据库是运行 DBMS_COMPARISON 程序包中的子程序的数据库。请注意,参考数据
库承担额外的处理负载,并需要一些空间来存储不同行的行 ID(而不是整个行本身)。
如果您比较生产系统和测试系统的数据,则可能适合在测试系统上处理并存储结果。
参考数据库中的对象与候选数据库中的对象进行比较。
参考数据库和候选数据库可以是同一个数据库。否则,需要将在参考数据库中创建的数据
库链接传递到 DBMS_COMPARISON 以允许它访问候选数据库中的数据。

Oracle Database 12c:新功能 - 面向管理员 C-18


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

• 应用程序正常运行所需的种子数据是安装时随应用程序提供的数据。它可以随系统
提供,以用于培训或测试,或者用作用户输入数据的模板。例如,Siebel 在值列表
(LOV) 定义、视图与职责的默认映射和预定义的查询中提供了种子数据。
• 配置数据包含用户设置的应用程序参数。根据应用程序类型,配置数据可能包含科
目表、供应商的付款条件或者诊断代码列表。
• 主数据是指与业务相关的数据系列(客户、供应商、产品、员工)。这些通常是业
务资源,属于不同的主题类别。所有业务,无论属于哪种业务类型,都存储有关其

Oracle University and Error : You are not a Valid Partner use only
人员、产品、财务、信息和物理资源的数据。
• 事务处理数据记录业务流程的操作。事务处理的示例包括订单、发票或付款记录。
这种类型的数据增长较快,会在事务处理数据库中形成大量数据。

Oracle Database 12c:新功能 - 面向管理员 C-19


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

流程

创建数据比较 定义对象对 提交比较作业 查看结果

Oracle University and Error : You are not a Valid Partner use only
DBMS_COMPARISON

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

流非常简单。
1. 在两个数据库之间或同一数据库中创建数据比较。
2. 定义需要进行数据比较的对象。
3. 提交作业以执行比较。
4. 查看结果以验证所比较对象的数据是否存在任何差异。

Oracle Database 12c:新功能 - 面向管理员 C-20


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

准则

• 参考数据库必须为 Oracle Database 11g 发行版 1 或更

Oracle University and Error : You are not a Valid Partner use only
高版本,候选数据库必须为 Oracle Database 10g 发行
版 1 或更高版本。
• 数据库字符集必须相同。
• 可以比较表、单表视图、实体化视图和同义词的数据。
• 索引必须唯一标识两个对象中的行。
• 无法比较某些数据类型的数据(例如,LONG、LONG
RAW、ROWID、CLOB 和 BLOB)。
– 然而,可以从比较中排除这些列。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

参考数据库始终执行比较;因此,Oracle DB 版本必须为 Oracle Database 11g 或更高版


本。用于比较的候选数据库必须为 Oracle Database 10g 或更高版本。它可以是通过数据
库链接访问的远程数据库,也可以是相同数据库(用于比较不同的方案对象)。
参考数据库和候选数据库的数据库字符集必须相同。
数据比较允许您比较表、单表视图、实例化视图和表的同义词。要将参考对象的行与候选
对象的行进行比较,必须唯一标识这些行。一个或多个非 NULL 列的主键约束条件或唯一
约束条件可以满足此要求。
因此,要将参考对象的行与候选对象的行进行比较,数据库对象必须具有以下一种类型的
索引:
• 数字、时间戳、间隔或 DATE 数据类型列的单列索引。
• 仅包含数字、时间戳、间隔或 DATE 数据类型列的组合索引。组合索引中的每个列必
须具有 NOT NULL 约束条件或属于主键的一部分。

Oracle Database 12c:新功能 - 面向管理员 C-21


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

如果表中不存在这些约束条件,则用户需要创建列满足此要求的索引。如果不满足此要求,
您将在查看结果时收到一条错误消息,例如:
ORA-23626: No eligible index on table SCOTT.BONUS ORA-
06512: at "SYS.DBMS_COMPARISON", line 5002 ORA-06512: at
"SYS.DBMS_COMPARISON", line 448 ORA-06512: at line 2

比较两个对象时会考虑大多数数据类型。但是比较期间某些数据类型不受支持(例如:

Oracle University and Error : You are not a Valid Partner use only
LONG、LONG RAW、ROWID、CLOB、BLOB)。然而,可以从比较中排除这些列。

Oracle Database 12c:新功能 - 面向管理员 C-22


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

创建数据比较
1. 创建数据比较。
– 参考数据库

Oracle University and Error : You are not a Valid Partner use only
– 候选数据库
2. 选择对象对或者将多个对象添加到列表中。

3. 提交比较作业。
4. 查看比较结果。

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

从“Enterprise(企业)”菜单中选择目标数据库,然后在数据库上下文中,从“Schema
(方案)”菜单中依次单击“Change Management(更改管理)”和“Data
Comparisons(数据比较)”。
1. 创建数据比较:提供参考数据库和候选数据库的名称,它们可以是不同的数据库,也
可以是相同的数据库。参考数据库是包含参考对象的数据库。
2. 使用“Actions(操作)”菜单,通过指定参考对象和候选对象来定义对象对。如果
参考数据库与候选数据库相同,则对象来自同一数据库。在幻灯片所示的示例中,比
较在 HR 数据库的 HR.DEPARTMENTS 表与 SALES 数据库的
HR_BIS.DEPARTMENTS 表之间定义。选择参考或候选对象的一个或多个列,使两个
对象的比较内容相同。(可选)存在多个索引时选择用于比较的索引,为比较的每个
对象对指定一个 where 子句,为比较配置一个时间点。您声明用于比较的对象对或
多个对象。通过添加多个对象,可以将参考数据库中的多个对象批量包含在规范中。
您可以搜索并选择多个对象,例如参考数据库中的表和视图,然后根据需要编辑每个
项目。
3. 提交比较作业。
4. 完成比较作业之后,查看比较结果。

Oracle Database 12c:新功能 - 面向管理员 C-23


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

比较作业和结果

提交比较作业。
比较作业

Oracle University and Error : You are not a Valid Partner use only
存在差异。
存在差异
查看两者之间的行差异 仅参考行
仅候选行
不相同的行

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

第一个屏幕截图显示已提交的比较作业。三个比较使用不同的配置执行。
第二个屏幕截图显示其中一个已完成比较(即 My_Compare_3)的结果。数据比较尝试
比较所有表。查找“Result(结果)”列中具有 ≠ 符号的行,该符号表示参考行和候选
行数据之间存在差异。如果符号为 =,则表示选定比较列的所有行都相同。如果出于任何
原因(例如,任何相关的列缺少唯一索引)比较失败,则可以通过选择“Messages(消
息)”选项卡(显示在窗口底部,但是在此窗口中未显示)来查看错误消息。错误消息使
用红色 X 指示,而非 ≠ 符号。
您还可以通过单击“Executed Statements(已执行语句)”选项卡查看执行比较时执行
的 SQL 语句。您将看到以下详细语句,例如:
• create database link 在参考数据库与候选数据库之间创建链接
• dbms_comparison.create_comparison 创建具有比较对象列表的命名比较
• dbms_comparison.compare 执行比较
如果您想要查看两个对象之间差异的详细信息,请单击“View Row Differences(查看行
差异)”。

Oracle Database 12c:新功能 - 面向管理员 C-24


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

结果:仅参考行
• 仅参考行
• 仅候选行

Oracle University and Error : You are not a Valid Partner use only
不相同的行

仅参考行

存在于参考对象中
参考对象 但未存在于候选对象
中的所有行

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

“Row Data Differences(行数据差异)”页面允许您查看:


• 仅参考行
• 仅候选行
• 不相同的更改行
• 上述所有行
“Row Source(行源)”列指示整行数据的来源。此外,在参考对象和候选对象之间存在
差异的行数据以对比色显示,以指示数据源自参考对象(蓝色)还是候选对象(红色)。
比较基于关键字列(取决于所选的唯一索引)显示。如果关键字列值不同,则行显示为仅
候选行或仅参考行。如果其他列不同,则行显示为不相同的行。
在幻灯片所示的示例中,您选择查看具有存在于参考对象中但是未存在于候选对象中的索
引列值的行。例如,DEPARTMENT_ID 为 10 和 140 的行未存在于
HR_BIS.DEPARTMENTS 表中。

Oracle Database 12c:新功能 - 面向管理员 C-25


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

结果:仅候选行

• 仅参考行
• 仅候选行

Oracle University and Error : You are not a Valid Partner use only
• 不相同的行

仅候选行

存在于候选对象中
但是未存在于参考
对象中的所有行

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在幻灯片所示的示例中,您选择查看仅候选行,即具有仅存在于候选对象中但未存在于参
考对象中的索引列值的行。例如,DEPARTMENT_ID 为 280 的行未存在于参考对象
HR.DEPARTMENTS 中,但是存在于候选对象 HR_BIS.DEPARTMENTS 中。

Oracle Database 12c:新功能 - 面向管理员 C-26


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

结果:不相同的行

• 仅参考行
• 仅候选行

Oracle University and Error : You are not a Valid Partner use only
• 参考对象和候选对象之间不相同的行

不相同的行

同时存在于参考对象和
候选对象中但具有不同值
的所有行

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

在幻灯片所示的示例中,您选择查看不相同的行。这是指索引列值存在于两个对象中,但
是其他(非索引)列值存在一处或多处差异的行。在此示例中,DEPARTMENT_ID 为 240
的行同时存在于 HR.DEPARTMENTS 和 HR_BIS.DEPARTMENTS 对象中,但是
LOCATION_ID 在参考对象中为 1700,在候选对象中为 1800。

Oracle Database 12c:新功能 - 面向管理员 C-27


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:d
c. 删除对象
d. 以上所有项
b. 创建缺失的对象
a. 修改对象的一个或多个属性
测验

目标数据库中的方案更改计划用于:

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 C-28


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

答案:d
b. 仅候选行
a. 仅参考行

d. 以上所有项
测验

c. 参考对象和候选对象之间不相同的行

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


数据比较作业显示两个比较对象之间的以下差异:

Oracle Database 12c:新功能 - 面向管理员 C-29


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED




如何使用数据比较
如何使用方案更改计划
小结

在本课中,您应该已经学会如何说明:

为什么以及何时使用新增的数据比较功能

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


为什么以及何时使用新增的方案更改计划功能

Oracle Database 12c:新功能 - 面向管理员 C-30


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

练习

C-1:使用方案更改计划(可选演示)

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

Oracle Database 12c:新功能 - 面向管理员 C-31


Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。


其他课程中的新增功能和增强功能

Oracle University and Error : You are not a Valid Partner use only
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

更多信息

有关本课程中未涉及的主题的详细信息,请参考以下课程:

Oracle University and Error : You are not a Valid Partner use only
• 其他 Oracle University Oracle Database 12c ILT 课程
• Oracle Database 12c: New Features 自学教程
– 自定进度的全套联机课程,详细介绍了所有新增功能
– 自定进度联机课程所涵盖所有主题的演示:
http://www.oracle.com/goto/oll
• Oracle 学习库 OBE 和演示
– http://www.oracle.com/technology/obe/demos/admin/demos.html
– http://www.oracle.com/technology/obe/start/index.html

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

有关本课程中未涉及的主题的详细信息,请参考以下课程:
• Oracle University Oracle Database 12c 教师指导课程
• Oracle Database 12c: New Features 自定进度联机课程
• Oracle By Example 系列和演示:Oracle Database 12c
- Oracle by Example (OBE) 教程就如何针对业务问题实施各种技术解决方案提
供了实践性分步指导。除以下 OBE 教程外,也可以在 Oracle University 知识
中心获得更多产品培训。
- 演示提供了特定任务的自动演示,并解释了如何执行任务。
- 教程提供了特定产品或主题的概念解释、演示和分步指导。

Oracle Database 12c:新功能 - 面向管理员 D-2


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

建议的 Oracle University ILT 课程

• Enterprise Manager Cloud Control


– 使用 Oracle Enterprise Manager Cloud Control 12c

Oracle University and Error : You are not a Valid Partner use only
– Oracle Enterprise Manager Cloud Control 12c: Install
and Upgrade Workshop
– Oracle Enterprise Manager Cloud Control 12c:
Advanced Administration Workshop
– Oracle Enterprise Manager Cloud Control 12c:
Advanced Configuration Ed 1.1
• 安装和升级
– Oracle Database 12c:安装和升级 - 课堂练习
• 安全性
– Oracle Database 12c:安全性

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要获得有关 Oracle 产品和其他 Oracle DB 新功能所使用关键云计算技术的详细信息,请


遵循 Oracle University 中的其他培训。

Oracle Database 12c:新功能 - 面向管理员 D-3


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

建议的 Oracle University ILT 课程


• Real Application Cluster
– Oracle Database 12c: High Availability New Features
Ed 1

Oracle University and Error : You are not a Valid Partner use only
– Oracle Database 12c: Clusterware Administration
– Oracle Database 12c: ASM Administration Ed 1
– Oracle Database 12c: RAC Administration
• Exadata
– Exadata Database Machine 管理 - 课堂练习版本 1
• 性能
– Oracle Database 12c:性能管理和优化
– Oracle Database 12c: SQL Tuning for Developers
• Data Guard
– Oracle Database 12c:Data Guard 管理版本 1

版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。

要获得有关 Oracle 产品和其他 Oracle DB 新功能所使用关键云计算技术的详细信息,请


遵循 Oracle University 中的其他培训。

Oracle Database 12c:新功能 - 面向管理员 D-4

Das könnte Ihnen auch gefallen