Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
D77758CN20
学生指南– 第 2 卷
面向管理员
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
Maria Billings 有限权利声明
目录
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
III
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
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
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
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 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
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
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
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
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
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
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、
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
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录
HA RMAN
内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速 12.1.0.2
缓存
SQL 优化 资源管理器 索引、表
数据泵、SQL*Loader 和外部表 分区
其他
12.1.0.2
JSON SQL
课程目标
学完本课后,应能完成以下工作:
Oracle University and Error : You are not a Valid Partner use only
• 解释紧急监视
• 描述实时 ADDM
• 使用实时 ADDM
• 描述比较时段 ADDM
• 使用比较时段 ADDM
• 生成比较时段 ADDM 报告
• 了解用来查看 ASH 数据的增强功能
紧急监视:难题
• 发生故障的系统
• 响应缓慢的数据库
Oracle University and Error : You are not a Valid Partner use only
– 所有用户的查询速度都非常慢。
– 性能屏幕的数据刷新速率很慢。
– 吞吐量明显降低。
• 由于内部资源争用数据库挂起
– 数据库完全无响应;不允许登录。
– 用户的查询挂起。
– 性能屏幕不刷新。
解决方案:关闭数据库实例?
DBA 可以根据不同的故障现象判断系统出现了问题:
• 用户抱怨查询无响应。
• EM 性能页的刷新速率越来越慢。
• 吞吐量异常降低。
您希望能够通过 ADDM 执行常规性能分析,但是可能存在一些严重限制:
• 在运行缓慢的系统上,该时段的快照可能不可用。
• 根据性能问题的严重性,捕获 AWR 快照可能并不明智甚至根本无法实现。
• 您无法连接到数据库,因为它已挂起。
关闭数据库实例是唯一的解决方法吗?可能有不像退回服务器实例这么极端的另一种解决
方法。
要执行此分析,您需要能够进行连接并快速进行轻量分析,以确定谁阻塞了数据库、为什
么数据库会挂起。此分析应该不需要 I/O 资源或全局资源,例如入队或闩锁。
紧急监视:目标
运行紧急监视应该是退回数据库之前的最后手段。
Oracle University and Error : You are not a Valid Partner use only
1. 切换到紧急监视允许您:
– 在诊断模式下连接到实例
– 查看实时收集并刷新数据的紧急性能页
– 查看实时刷新的顶级阻塞和被阻塞会话及死锁的 ASH
数据和挂起分析表
2. 查看挂起分析数据有助于:
– 终止导致挂起或死锁的根源阻断器
– 关闭并启动实例
在关闭实例之前,您可以启动紧急监视。它允许您快速查看并执行性能分析,即使您无法
使用正常连接登录到实例。
紧急监视允许具有 SYSDBA 身份证明的 DBA 在诊断模式下连接并进行快速的轻量分析,
以确定谁阻塞了数据库以及为什么数据库会挂起。这种连接不需要 I/O 资源,也不需要全
局资源。
在 Enterprise Manager 11g 中,可以通过单击按钮显式启用和禁用“内存访问模式”。
这样做是为了启动/停止收集器进程,收集器进程负责从 SGA 读取性能数据。
在新方法中,没有收集器进程。您无需在模式之间切换。导航到“Emergency Monitoring
(紧急监视)”时,代理直接连接到 SGA 并绕过 SQL 检索层来获取性能统计信息以开
始收集 SGA 数据。返回常规性能监视之后,它将停止收集。
它显示实时刷新的数据,以及实时刷新的主要阻塞和被阻塞会话及死锁的 ASH 数据和挂
起分析表。
Oracle University and Error : You are not a Valid Partner use only
当紧急监视显示阻塞其他用户的会话时,您可以终止会话。否则,您可以关闭数据库实例
或尝试深入分析。
实时 ADDM:难题
• 发生故障的系统
• 响应缓慢的数据库
Oracle University and Error : You are not a Valid Partner use only
– 所有用户的查询速度仍非常慢。
– 性能屏幕的数据刷新速率仍很慢。
– 吞吐量仍明显降低。
• 由于其他资源争用数据库挂起
– 数据库仍无响应;可能允许也可能不允许登录。
– 用户查询仍在等待。
– 性能屏幕不能快速刷新。
– 您找不到任何要终止的阻塞会话。
– 紧急监视不提供根本原因。
您找不到任何阻塞会话,数据库仍运行缓慢。然而,在尝试其他分析之前,您不希望退回
数据库实例。
实时 ADDM 使您能够执行补充分析,即紧急监视未提供的根本原因分析。
实时 ADDM:目标
1. 在退回实例之前切换到实时 ADDM。
– 开始从所有数据库实例收集性能数据
Oracle University and Error : You are not a Valid Partner use only
– 分析因严重本地或全局资源争用而导致的瘫痪系统的
近期数据
– 对数据库活动异常活跃(尽管不严重)的系统进行整体
分析
– 检测近期活动(过去 10 分钟)的查找结果
– 提供可行的建议
2. 使用提供的建议解决问题。
3. 返回常规性能分析。
注:可以针对 RAC 环境进行调用
某个会话阻塞了其他用户时,“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 University and Error : You are not a Valid Partner use only
紧急监视 实时 ADDM 常规性能监视
查看 启动分析
• ASH 数据 • 挂起分析数据
• 挂起数据 • I/O 度量
• 主机度量
是 明显的 否
终止会话 查看
阻断器会话? • 查找结果
• 建议
• 挂起数据
是 • 顶级活动快照
其他阻断器?
否 遵从建议或关闭
是
系统 如果需要,通过创建用户
结束 定义的问题报告给 Oracle
正常运行?
否 技术支持部门
您可以组合使用紧急监视和实时 ADDM。
当系统变得非常慢或挂起,您必须找到快速解决方案时,请使用紧急监视获得要执行的快
速措施。查找要终止的导致阻塞的会话,或者关闭数据库实例再将其启动。
如果不希望立即关闭数据库实例,请执行更深入的实时 ADDM 分析。它将从 SGA 收集
数据,执行分析来向您提供报告,其中包括导致当前状况的根本原因以及建议和可能的措
施。如果提供了任何建议,请遵从。如果没有提供建议,请关闭数据库实例。
在任一情况下,您都可以创建用户定义的问题并使用支持工作台将您的问题报告给 My
Oracle Support。
使用 DBMS_ADDM 程序包
Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。
测验
Oracle University and Error : You are not a Valid Partner use only
不同。下面哪些说法是正确的?
a. 实时 ADDM 使用过去 10 分钟的 AWR 快照。
b. 实时 ADDM 使用 SGA 数据中的 ASH 近期活动。
c. 常规 ADDM 使用尚未清除的 AWR 快照。
答案:b、c
实时 ADDM 的工作方式与用于分析性能的常规 ADDM 非常相似;实时 ADDM 不访问
AWR 快照,而是从 SGA 数据访问 ASH 近期活动。
12c 之前版本
AWR 比较时段报告
生产性能不一致:
• 今天,它非常差。
Oracle University and Error : You are not a Valid Partner use only
• 昨天,它非常出色。
• 发生了哪些变化?(原因未知)
• 性能为什么会下降?
DBA 在性能方面遇到的难题是,当性能降低或提升时,查明什么发生了更改以及为何会
发生更改,哪些更改可能影响了两个时段之间的性能。
在下列情况下,这可能是正常的:执行的是不同的工作量;更改了存储设备;在最终用户
执行其平常工作的同时执行 ETL;或者仅仅是每周 ETL 执行比上周多运行了三个小时。
在分析性能变化时,DBA 需要对具有可比性的时段进行比较。
12c 之前版本
方法:保留的快照集
• 创建一个“昨天”保留快照集和一个“今天”保留
快照集。
Oracle University and Error : You are not a Valid Partner use only
昨天时段 今天时段
DBA
• 对两个保留快照集运行比较。
以前的方法可以为两个时段创建保留快照集并运行比较报告。您使用自己选择的快照为
基时段创建一个“昨天”保留快照集,同样使用自己选择的快照为比较时段创建一个“今
天”保留快照集。在创建保留快照集时,您确保快照在保留期过后不会被从 AWR 中清除。
“比较时段”操作对两个时段各自的 AWR 数据集进行比较。报告显示了一个对两个时段
进行比较的 HTML 报告,其中显示了在等待事件、OS 统计信息、服务、SQL 统计信息、
实例活动、I/O 统计信息和段统计信息等方面的差异。
当性能发生了降低或提升并且知道已完成的更改时,DBA 可以执行测试来检测:
• 数据库升级
• 方案更改
• 参数更改、是否使用了新的优化程序增强功能
• 系统或 I/O 统计信息收集、是否使用了新的存储类型(例如,使用了 ASM 而非文件
系统)
• 内存增加或减少带来的影响
• 添加的 CPU 或 RAC 环境中的新节点
12c 之前版本
缺少了什么
Oracle University and Error : You are not a Valid Partner use only
• 比较数据库重放的捕获和重放或者
两次重放
缺少带有分析的智能报告:
• 发生的更改
• 根本原因与性能下降结果之间的映射
AWR 比较时段报告提供了许多有用的信息,但是您仍必须对这些度量执行分析,才能发
现映射到性能下降或提高的根本原因的结果。
比较时段 ADDM:分析
Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。
工作量一致性
“当前”比较时段 与 “早期”基时段
Oracle University and Error : You are not a Valid Partner use only
• 测试时段 • 基线
• “当前”生产时段
• 数据库重放的捕获时段
• 第一次 RAT 重放
• 第二次 RAT 重放 • 修改之前的第一次 RAT 重放
工作量一致性
• 运行同一应用程序?
• 在考虑 SQL 语句和负载的情况下衡量工作量的相似性。
• 数据库重放的捕获和重放之间是否实现了理想中的完全一致。
比较模式
Oracle University and Error : You are not a Valid Partner use only
一个快照的偏移量
系统移动窗口
定制时段
1. 首先,选择您要检查的比较时段,即您发现性能下降的比较时段。
2. 将其与性能可接受并反映相似工作量的基时段进行比较。
因此,您可以通过三个选项定义基时段。
- 第一个选项允许您选择一个快照的偏移量。在本示例中,比较时段从 2 开始到
3 结束;因此,基时段从 1 开始到 2 结束。在此相同的选项中,您可以选择一
天的偏移量,以便它使用前一天的相同时间作为比较时段。您甚至可以选择将
特定一天中的性能与前一周中同一时间的性能进行比较。
- 第二个选项允许您选择一个基线,可以是现成的系统移动窗口基线,也可以是
您创建的反映您的正常应用的任何其他基线。
- 第三个选项允许您选择任何其他时段。
3. 在任何情况下,它都会自动将基时段调整为与所选时段尽可能接近的一系列 AWR
快照。
4. 运行报告。它应返回两个时段的差异详细信息。
报告:配置
100%
Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。
报告:查找结果
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(内存)”页面可以显示两个时
段中的交换。
使用 DBMS_ADDM 程序包
比较同一实例中的两个时段:
Oracle University and Error : You are not a Valid Partner use only
“当前”比较时段 “早期”基时段
与
Snap_ID 123 到 124 Snap_ID 121 到 122
使用 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
其他 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》文档。
答案:b
b. 错
a. 对
在输出格式上。
测验
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 快照
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%。
12c 之前版本
顶级活动页面
Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。
ASH 分析页面:活动
Oracle University and Error : You are not a Valid Partner use only
1
2 2
新的 ASH 分析页面克服了这些限制,允许用户执行以下任务:
1. 在页面的左中部显示的“Filters(筛选器)”中对维进行筛选。
2. 在页面的左下和右下部为左侧和右侧的表选择维。
3. 更改滑块宽度来为详细区域选择时段。
4. 进一步细化负载映射图以显示不同的等待,其中用块大小指示各个等待的重要性。
•
•
•
•
•
•
•
解释紧急监视
使用实时 ADDM
描述实时 ADDM
使用比较时段 ADDM
描述比较时段 ADDM
在本课中,您应该已经学会:
生成比较时段 ADDM 报告
小结
•
•
•
15-2:清理
15-1:使用紧急监视
练习 15:概览
15-3:使用比较时段 ADDM(可选演示)
ADR 和网络增强功能
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
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录
HA RMAN
内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速 12.1.0.2
缓存
SQL 优化 资源管理器 索引、表
数据泵、SQL*Loader 和外部表 分区
其他
12.1.0.2
JSON SQL
课程目标
学完本课后,应能完成以下工作:
Oracle University and Error : You are not a Valid Partner use only
• 描述新的 ADR DDL 和调试日志文件
• 使用 ADRCI 实用程序命令列出并查看日志文件
• 描述网络数据压缩的优点
• 说明 DEFAULT_SDU_SIZE 的更改
自动诊断资料档案库
DIAGNOSTIC_DEST
$ORACLE_BASE
Oracle University and Error : You are not a Valid Partner use only
$ORACLE_HOME/log
ADR
基目录
diag V$DIAG_INFO
数据库 ASM
主机名称
名称 名称
ADR 文件类型
• 日志:活动的概要信息
• 跟踪:
Oracle University and Error : You are not a Valid Partner use only
– 后台跟踪文件
– SQL 跟踪文件
• 转储:
– 特定类型的跟踪文件
– 意外事件的详细时间点信息
• 核心:
– 内存转储
– 特定于端口的全二进制格式
日志文件是包含概要信息的共享文件。RDBMS 预警日志是此类日志的一个很好的示例。
跟踪、转储和核心文件包含用来调查问题的诊断数据,它们都涉及向文件中写入消息。
• 跟踪文件包含相当详细的信息(例如,状态转换或正在处理的结构),它覆盖了较长
的时段。每个服务器和后台进程都可以向关联的跟踪文件写入信息。跟踪文件在进程
的生命周期内定期更新,并且可能包含关于进程环境、状态、活动和错误的信息。此
外,当进程检测到严重错误时,它会将有关错误的信息写入到其跟踪文件中。SQL
跟踪工具也会创建跟踪文件,这些文件提供关于各个 SQL 语句的性能信息。
• 转储文件包含关于某个状态或某个结构的非常详细的时间点信息。转储是一种特定
类型的跟踪文件,是为了响应事件(如意外事件)而一次性输出的诊断数据,而跟踪
通常是连续输出的诊断数据。当发生意外事件时,数据库会将一个或多个转储写入到
为该意外事件创建的意外事件目录中。意外事件转储还会在文件名中包含意外事件
编号。
• 核心文件包含内存转储,采用特定于端口的全二进制格式。核心文件名称中包括字符
串“core”和操作系统进程 ID。核心文件仅对 Oracle 技术支持部门的工程师有用。
并非在所有平台上都能找到核心文件。
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
Oracle University and Error : You are not a Valid Partner use only
SQL> ALTER SYSTEM SET enable_ddl_logging=TRUE;
DDL 日志文件
DROP USER u2
• 无 DDL 日志文件
• 不在预警日志中
记录 DDL
• 调试日志
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 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
~
网络性能:压缩
• 减少数据量
Oracle University and Error : You are not a Valid Partner use only
• 降低使用的带宽
• 对应用程序是透明的
• 压缩方案
网络性能通常受限于两个因素:带宽和数据量。简而言之,带宽是管道的大小。管道越
大,可以通过它推送的数据位越多。数据量是需要传输的位数。因此,要提高网络性能,
必须增大带宽或减少数据量。在许多情况下,增大带宽成本效益太低或者不可行。在这种
情况下,唯一的选择是减少数据量。
在网络层中压缩数据可减少传输的位数。这降低了所使用的带宽,因而可以传输更多的数
据。在网络层中执行压缩时,压缩对应用程序是透明的。
有多种可行的压缩方案。在高级压缩选件 (ACO) 中,可以使用 GZIP 和 LZO 压缩方案在
网络层中压缩数据,因为它们能够单独处理数据单元(SDU 大小)。
压缩会更改数据量的计算。因此,在网络带宽是瓶颈的情况下,压缩将有所帮助。如果运
行已受到 CPU 制约,则网络压缩将只会使问题变得更糟。
设置压缩
在 sqlnet.ora 文件中设置以下压缩操作参数:
Oracle University and Error : You are not a Valid Partner use only
• SQLNET.COMPRESSION
• SQLNET.COMPRESSION_LEVELS
• SQLNET.COMPRESSION_THRESHOLD
会话数据单元 (SDU) 大小
Oracle University and Error : You are not a Valid Partner use only
• 处于延迟较长的广域网 (WAN) 中时
• 数据包大小始终相同时
• 返回大量数据时
在以下情况下,不要修改 SDU 大小:
• 可以优化应用程序以降低网络使用时
• 对于高速网络,数据传输的影响可以忽略时
• 您的请求从服务器返回少量数据时
设置 SDU 大小
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
测验
Oracle University and Error : You are not a Valid Partner use only
文件中。
a. 对
b. 错
答案:b
DDL 命令可能会被记录,也可能不会被记录。如果 ENABLE_DDL_LOGGING 设置为
TRUE,则 DDL 命令将记录在 ADR 资料档案库中 log/ddl 目录中的 log.xml 文件中。
如果 ENABLE_DDL_LOGGING 设置为 FALSE,则根本不会记录 DDL 命令。
•
•
•
•
描述网络数据压缩的优点
在本课中,您应该已经学会:
小结
说明 DEFAULT_SDU_SIZE 的更改
描述新的 ADR DDL 和调试日志文件
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
内存中列存储
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
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录
HA RMAN
内存中列存储 整个数据库内存中高速缓存
性能
自动大表高速 12.1.0.2
缓存
SQL 优化 资源管理器 索引、表
数据泵、SQL*Loader 和外部表 分区
其他
12.1.0.2
JSON SQL
内存列存储功能提供了使数据库驱动的业务决策制定可以实时完成的解决方案。通过内存
列存储功能,可使用一种称为列格式的新格式在内存中存储对象。这种格式使得执行扫
描、联接和聚集时比传统磁盘上的格式快很多,从而为 OLTP 和 DW 环境提供快速的报
告性能。这对于针对少量列运行但返回许多行的分析应用程序特别有用,而对于针对少量
行运行但返回许多列的 OLTP 不太有用。DBA 必须定义哪些段填充到内存中列存储,例
如热表、分区,更准确地说,还有频繁访问的列。
Oracle Database 12c R1 PS1 中提供了一些其他新的内存中功能。
内存中列存储包含在 Oracle DB 内存中选件中。
•
•
•
•
•
学完本课后,应能完成以下工作:
描述与其他产品和功能的交互
在数据库中部署内存中列存储
课程目标
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 列存储
缓冲区
高速缓存
– 内存中列存储配置
– 段属性
使用内存中列存储,能以称为“列格式”的新格式将对象(表、分区及其他类型)存储在
内存中。这种格式使得扫描、联接和聚集执行起来比传统磁盘上的格式快很多,从而为
OLTP 和 DW 环境提供快速的报告和 DML 性能。这对于针对少量列运行但返回许多行的
分析应用程序特别有用,而对于针对少量行运行但返回许多列的 OLTP 不太有用。DBA
必须定义将哪些段填充到内存中列存储(IM 列存储),例如热表、分区以及更精确、更
频繁访问的列。
内存中的列格式不会替换磁盘上或缓冲区的高速缓存格式。它是表或表中某些列的一致副
本,转换为独立于磁盘格式且仅存在于内存中的新的列格式。由于这种独立性,应用程序
能够透明地使用该选项而不进行任何更改。要使数据转换为新的列格式,需要在 SGA 中
配置一个新池。该池即为 IM 列存储。
如果为 IM 列存储分配足够的空间,访问要填充到 IM 列存储中的候选对象的查询的执行
速度将明显加快。由于性能的提升,将直接对实时事务处理数据执行即席分析查询,而不
会影响现有工作量。
有三个主要优点:
• 查询运行速度明显加快:所有数据都能以压缩的列格式填充到内存中。不需要也不
使用任何索引。由于采用压缩的列格式,与从缓冲区高速缓存提取数据相比,查询
运行速度至少快 100 倍。
• DML 较快:可以消除分析索引,将其替换为表的 IM 列存储表示形式的扫描。
• 随机即席查询运行性能良好,因为表的行为就像所有列都已编制索引一样。
Oracle University and Error : You are not a Valid Partner use only
优点
• 内存中列存储中的活动数据
• 在 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 无限制
• 执行备份和恢复操作时无需更改
• 无需移植数据
除提高查询性能这一主要优点外,内存中列存储功能还带来许多其他优点。
• 可存入内存中的数据量大大增加。数据在填充到 IM 列存储中时将使用专门的压缩算
法自动压缩,根据数据类型和数据分布,实现 2 倍到 10 倍的压缩率。有三种不同类
型的压缩,而查询直接针对压缩的数据执行。
数据可存储在多层环境中,其中最热的数据在内存中,活动数据在闪存上,较旧或
较冷的数据在磁盘上。
• 所有 OLTP 操作在 RAC 上均受支持。
• 多租户体系结构可使用内存中列存储功能。
• 某些查询的响应速度非常快,以致在这些情况下不再需要 SQL 优化。然而,如果只
有某些列在列存储中,而查询要访问非内存中列,则可能需要优化。
• 对 SQL 语句不存在任何限制。
• 备份和恢复过程的运行方式仍与没有 IM 列存储时一样。
• 无需移植数据。
概览
• SGA 中的新池:内存中列存储
– 填充到 IM 列存储中的段将转换为列格式
Oracle University and Error : You are not a Valid Partner use only
– 内存中段与缓冲区高速缓存的事务处理一致
• 只有一个段在磁盘上并采用行格式
在 SGA 中 缓冲区高速缓存
EMP 表 ORDERS 表
ORDER
DML
行格式的段
ORDERS 表
双格式的表
内存中列存储
SELECT
列格式的段
内存中的列格式不会替换磁盘上或缓冲区的高速缓存格式。这意味着当段(例如表或分
区)填充到 IM 列存储中时,磁盘上格式的段将自动转换为列格式并选择性地进行压缩。
列格式是纯内存中格式。磁盘上没有列格式的存储。绝不会导致额外写入磁盘,因此无
需任何日志记录或撤消空间。
所有数据均以传统的行格式存储在磁盘上。
此外,列格式的段是磁盘上或缓冲区高速缓存中段的事务处理一致副本。将保持两个池
之间的事务处理一致性。
如果为 SGA 中的 IM 列存储分配足够的空间,访问填充到 IM 列存储中的对象的查询的
执行速度将明显加快。由于性能的提升,可以直接对实时事务处理数据执行更多即席分
析查询,而不会影响现有工作量。缺少 IM 列存储空间不会阻止针对本来应该填充到 IM
列存储中的表执行语句。
Oracle University and Error : You are not a Valid Partner use only
为非内存中列,则会将选择任何非内存中列的查询发送到缓冲区高速缓存,而将仅
选择内存中列的查询发送到 IM 列存储。所有对段的按行 ID 提取都通过缓冲区高速
缓存执行。
对这些对象执行的任何 DML 都通过缓冲区高速缓存执行。
行存储与列存储:2 维视角
SALES 表
order1 order2 order3 order4
Oracle University and Error : You are not a Valid Partner use only
col1: PRODID 123 357 50 243
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
行存储格式 列存储格式
内存中列单元
列格式
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
内存中列单元
从概念上讲,将表填充到 IM 列存储中时,会将段行分成大块(内存中列单元,即 IMCU),
在这些块中,每一列都单独存储在内存中的连续区域。这些块非常大,足可实现可能的最
大扫描速度。
内存数据结构以 IMCU 为基础。
与通常 8k 字节大小的常规数据库块不同,IMCU 要大几个数量级。每个 IMCU 的准确行数
会在运行时根据表大小和结构以及内存约束条件确定。
内存中压缩算法
在 IM 列存储中转换为列格式的数据使用新的专门压缩算法。有三种压缩级别。
内存中列存储高速缓存与缓冲区高速缓存
IM 列存储 缓冲区高速缓存
表空间
Oracle University and Error : You are not a Valid Partner use only
数据文件
区 IMCU
8KB 块
段 IM 段
SGA
内存中列存储
IM 列存储可以存储非分区表、表分区或表子分区转换的数据,位于一个实例中的单个内
存中区域内。
内存中数据段
内存中的段与磁盘上的段存在一对一的对应关系。永久堆表的每种现有磁盘上数据格式和
所有对象类型(分区、实体化视图、实体化联接视图、实体化视图日志和内嵌 LOB)都
受 IM 列存储支持。
内存中列存储段是已使用 IMCU 的集合。
内存中的双格式
UPDATE
SELECT
Oracle University and Error : You are not a Valid Partner use only
缓冲区高速缓存 IM 列存储 TX 日志
INMEMORY_SIZE
阈值 /内存不足
不再出现索引问题
对于 OLTP:1 到 3 个
Oracle University and Error : You are not a Valid Partner use only
对于分析:10 或 20 个
• 由于缺少索引导致性能较低
• DML 期间维护任务繁重
IM
使用 IM
使用
• 需要存储空间 列存储
列存储
• 不再有内存中表的分析索引
• 预定义的分析查询和即席分析查询均可快速运行
• OLTP 和批处理运行速度最多提高 300%
流程
IM 列存储初始化。
1. 查询内存中表:
Oracle University and Error : You are not a Valid Partner use only
SMCO
在 IM 列存储中
IM 列
存储中 Wnnn 将行格式
内存中的 填充表或
是否有 延迟? 转换为 压缩列
候选表? 部分列
足够的 列格式
IMCO
空间?
2. 结果的显示速度比采用行格式时快得多:
解压缩 将返回的
执行查询 显示结果
请求的列 列合并成行
对内存中表执行查询时有哪些不同步骤?
第一个先决条件是 DBA 在 SGA 中为 IM 列存储预分配了空间。
1. 如果将正在查询的表定义为要填充到 IM 列存储中的候选项,后台进程会将表行的磁盘
中行格式转换为列格式,并将其填充到 IM 列存储中。默认情况下,将内存中表填充到
IMCU 中的操作可能会延迟到有用时进行。
- 如果 IM 列存储中没有足够的空间来填充整个对象,则对象将部分填充。当查询
开始访问整个对象时,将从列存储中检索尽可能多的数据,从缓冲区高速缓存、
闪存高速缓存或磁盘中检索其余数据。DBA 可以为内存中对象设置优先级,以便
使用不同的延迟将表填充到 IM 列存储中。
- 如果为表或表中的部分列定义了内存压缩,可能会进行压缩。根据为表或列定义
的属性,可能只有部分列需要执行填充和压缩步骤。
2. 当 IM 列存储处于正确格式后,优化程序将发挥作用并生成计划。将对内存中列格式的
数据执行查询。执行完成后,列数据将进行解压缩,合并成行以将结果显示给用户。
这种类型的查询称为内存中查询。
部署 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
部署 IM 列存储:对象设置
3. 启用/禁用要填充到 IM 列存储中的对象。
– 启用/禁用整个段:
Oracle University and Error : You are not a Valid Partner use only
— IMCU 仅在查询访问时进行初始化和填充。
SQL> CREATE TABLE large_tab (c1 …) INMEMORY; 双格式
— IMCU 可以在打开数据库时进行初始化。
SQL> CREATE TABLE test (…) INMEMORY PRIORITY CRITICAL;
部署 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);
IM 列存储 缓冲区高速缓存
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;
• NO MEMCOMPRESS:
未压缩 • AUTO:Oracle 在 RAC 节点 • DUPLICATE ALL
• NONE:按需填充
• FOR QUERY / FOR 的 IM 列存储间分布对象 • DUPLICATE
• 其他值:根据优先级 • BY PARTITION:分区在 • NO DUPLICATE
CAPACITY:
填充 RAC 节点间分布对象
已压缩
为指明表、分区或子分区不是 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 University and Error : You are not a Valid Partner use only
每个实例上可用,请在 DUPLICATE 子句中指定 DUPLICATE ALL 选项。当表实际
在节点间分布时,DUPLICATE 子句有两个选项。
- 如果想要一个副本,请使用 NO DUPLICATE。
- 如果要在集群中拥有两个副本,请使用 DUPLICATE。
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;
内存中列
覆盖父表的压缩子句
内存中表中的非内存中列
当即使将表定义为内存中段查询也不通过 IM 列存储执行时,可以使用
V$IM_COLUMN_LEVEL 视图查找这些内存中表中是否存在非内存中列。查询该视图将显
示内存中表中存在的非内存中列和内存中列的列表。
请注意,只能为部分列指定压缩或 NO INMEMORY。列不能具有不同的优先级或分布,因
为它们将全部一起填充。
定义 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
默认情况下,内存中表、分区或子分区甚至列的填充取决于为表、分区、子分区或列定义
的 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 列存储中的语句,以便不会打断任何应用程序语义,并使用缓冲区高
速缓存。
填充到 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;
字节数 IM 列存储中的字节数
如果创建的内存中对象的优先级为 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 列存储没有自动内存管理,因而
可能会导致逐出不常使用的表。
定义 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;
Oracle University and Error : You are not a Valid Partner use only
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;
/
使用 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
该过程执行的结果可以是以下各项:
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
计算压缩率
使用 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;
越高越好:20 越低越差:1.06
对应于
1 字节 20 字节
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 University and Error : You are not a Valid Partner use only
INMEMORY_CLAUSE_DEFAULT = "INMEMORY MEMCOMPRESS FOR QUERY LOW"
缓冲区
高速缓存
更改内存中属性的影响
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);
IMTAB 表 IM 列存储
1 2
C1 C1 IMCO
IMCU IMCU SMCO
已创建 已刷新 Wnnn
延迟
移动或拆分内存中段
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
已重新创建
INMEMORY 继承
表空间:DEFAULT INMEMORY / COMPRESS / PRIORITY 属性
DBA_TABLESPACES
Oracle University and Error : You are not a Valid Partner use only
NO INMEMORY 表除外
DBA_TABLES
NO INMEMORY 列除外
对象设置之后
删除分析索引。
Oracle University and Error : You are not a Valid Partner use only
SQL> DROP INDEX i_sales_timeid PURGE;
内存中表不再需要分析索引,前提是所有相应的列都设置为内存中列。它们将替换为表的
内存中列式表示形式的扫描。可以将索引标记为不可见,前提是索引不用于保证唯一性或
引用完整性,例如主键、唯一索引和外键。
可以使用如下指导:
• 将分析样式的索引标记为不可见
• 确认工作量对索引不再有益
• 删除索引
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
答案:b
a. 存储任何类型的数据
内存中列存储的用途是什么?
测验
d. 像在磁盘上一样在内存中压缩数据
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. 可以将内存中对象的某些部分填充到内存中列存储中的
剩余空间。
答案:c、d
b 不正确。ADDM 无法识别内存中列存储。
查询获益
适用于:
Oracle University and Error : You are not a Valid Partner use only
• 扫描大量行并应用过滤器
• 查询表中的部分列
• 将小型表(维)与大型表(事实)联接
– 在事实表中利用重复的维值
• 聚集数据
内存中列存储功能非常适合用于执行如下操作的查询:
• 扫描大量行并应用过滤器,例如:=、<、>、in 列表
• 查询表中的部分列,例如,选择一个表 100 列中的 5 列
• 将小型表(维)与大型表(事实)联接
- 在事实表中利用重复的维值
• 聚集数据
测试和比较查询性能
• 测试在 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 高速缓存执行查询
优化程序必须知道表何时采用列格式并适当地估计查询成本。针对内存中对象的计划查询
可能与缓冲区高速缓存查询截然不同。
本幻灯片中的查询在两种情况下(第一个和第二个示例)执行都非常快,因为这是纯内存
中扫描。但是,针对内存中列存储的查询性能远远快于针对传统缓冲区高速缓存的性能,
因为 IM 列存储只必须扫描单个 LO_ORDTOTALPRICE 列,而缓冲区高速缓存的行存储格
式必须扫描每一行中的所有列,直至到达 LO_ORDTOTALPRICE 列为止。由于极高的压
缩率加上列格式无需额外的联接操作处理,也使查询受益。
在使用和不使用内存中功能的工作量的测试阶段,用户可以使用 INMEMORY_QUERY 参数
在会话级别甚至在系统级别启用或禁用内存中查询。默认值为“ENABLE”。当用户要测
试相同查询针对缓冲区高速缓存的性能时,可以将 INMEMORY_QUERY 设置为
“DISABLE”。
对内存中表的查询:简单谓词
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
使用简单谓词针对 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 值。
MINMAX 修剪统计信息
是否会发生 MINMAX 修剪?
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
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。
有两种方式可以查明是否针对 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 统计信息有关。
在 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)
对于单列上的简单谓词,优化程序将选择表扫描, 除非有单列索引可用。优化程序可能会
选择索引。如果没有索引或者只有多列索引可用,则优化程序将只选择使用 IM 列存储。
幻灯片 39 中所执行查询的执行计划显示操作执行了 TABLE ACCESS INMEMORY FULL。
将关键字“INMEMORY”添加到 TABLE ACCESS FULL 操作中与在 Exadata 系统上添加
“STORAGE”一词完全一样。
关键字“INMEMORY”表明该操作可以获取计划中该步骤从 IM 列存储返回的部分或全部
数据。
如果某个表因持续的填充操作已部分转换为列格式,或者如果 IM 列存储中缺少空间,则
查询能够使用部分内存中版本,然后转至磁盘使用其余部分,而不是等待转换完整个表。
对内存中表的查询:联接
查询多个内存中表:
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
当两个表通过散列联接进行联接时,将扫描第一个表(通常是较小的表),符合 WHERE
子句谓词的行(针对该表)用于创建散列表。在散列表创建期间,也会根据联接列创建
bloom 过滤器。Bloom 过滤器随后作为附加谓词被发送到第二个表扫描。将 WHERE 子句
谓词应用于第二个表扫描后,所生成行的联接列将经过散列处理,并与 bloom 过滤器中
的值进行比较。如果在 bloom 过滤器中找到匹配项,会将该行发送到散列联接。如果未
找到匹配项,则会忽视该行。
Oracle University and Error : You are not a Valid Partner use only
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
对内存中表和非内存中表进行查询
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 |
--------------------------------------------------------------------
在某些情况下,一个查询中只有部分段启用了 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 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
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 完全兼容。
建议
查询的性能提升如下:
• IM 列存储和并行化
Oracle University and Error : You are not a Valid Partner use only
可能无需优化
• 仅 IM 列存储
• 无 IM 列存储但有并行化
• 无 IM 列存储也无并行化
启用 IM 列存储意味着:
• 查找有多少内存可供 IM 列存储使用
• 计算要在 IM 列存储中加载的 ∑(对象的估计大小)
• 不在表空间级别设置 DEFAULT INMEMORY
PRIORITY xxx
启用 IM 列存储后,当 IM 列存储与并行化相结合时,查询性能会有所提升。如果启用了
自动 DOP,根据 CPU 数量,优化程序能够查找最佳并行查询执行计划。如果出于任何
原因禁用了自动 DOP,IM 列存储仍会提供非常高的性能。DBA 再也不必优化查询。禁
用 IM 列存储后,要查询的数据量会影响执行性能。并行化仍有助于提高查询性能。如果
IM 列存储和并行化都已禁用,则需要 SQL 优化。
当 DBA 必须决定是否启用 IM 列存储时,必须回答以下问题:
• 有多少可用内存可提供给 IM 列存储?
• 哪些对象将受益于列格式?
• 这些对象在压缩后将在 IM 列存储中占用多少空间?
• 为对象启用 IM 列存储后可以删除哪些索引?
注:如果指定了除 NONE 以外的 PRIORITY,强烈建议不要在表空间级别设置 DEFAULT
INMEMORY PRIORITY。这项 IM 列存储设置将应用于表空间中所有将来的表。所有此类
表将立即排入队列以便进行填充。
视图
• 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:每一行都包含有关特定列的内存中列
单元的信息(包括最小值和最大值)
PX 和数据泵。
数据泵
优化程序
RAC 环境
内存中并行执行
与其他产品的交互
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 列存储表有两个访问路径:全表扫描和另一个
访问路径(通常是索引)。执行时,将检索当前的内存中份额,将其与自适应计划模式中
存储的阈值内存中份额进行比较,以选择适当的访问路径。计划不断自适应。
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 列存储中。
初始加载过程完成后,依赖于该表的所有都将无效。
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;
冲区高速缓存和 IM 列存储之间的事务处理一致性。
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 列存储和数据泵
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
数据泵 TRANSFORM 名称
Oracle University and Error : You are not a Valid Partner use only
• 导入 INMEMORY 对象时可保留/不保留 INMEMORY 属性:
$ impdp … TRANSFORM=INMEMORY:Y|N
•
•
•
•
•
在本课中,您应该已经学会:
小结
描述与其他产品和功能的交互
在数据库中部署内存中列存储
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:导出和导入内存中对象(可选)
内存中高速缓存
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
ADO 和存储
数据库中归档和期间有效性 期间历史记录
HA RMAN
内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速
12.1.0.2
缓存
SQL 优化 资源管理器 索引、表
数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL
•
•
•
•
•
使用自动大表高速缓存
说明两种缓冲区替换算法
学完本课后,应能完成以下工作:
描述自动大表高速缓存的用途
课程目标
使用整个数据库内存中高速缓存
描述整个数据库内存中高速缓存的用途
12.1.0.2
整个数据库内存中高速缓存
传统缓冲区高速缓存使用情况 整个数据库内存中高速缓存
DB_CACHE_SIZE = 10g
将整个数据库加载到缓冲区高速缓存中:
Oracle University and Error : You are not a Valid Partner use only
扫描 + OLTP • 巨大的性能优势
LRU • 两种模式
算法 ‒ 整个数据库高速缓存
‒ 强制整个数据库高速缓存
无 LRU
加载到缓冲区高速缓存中 -
如果表大小 < 缓冲区
高速缓存大小的很小百分比
表 SH.SALES
仅当表大小小于缓冲区高速缓存大小的很小百分比时,用于表扫描的当前算法才会将表加
载到缓冲区高速缓存中。对于非常大的表,数据库使用直接路径读取,这种方法直接将块
加载到 PGA 中而绕过 SGA,以避免涌进缓冲区高速缓存。DBA 必须将频繁访问的较小
查找表显式声明为 CACHE,以将数据加载到内存中,并避免绕过 SGA。该子句表明执行
全表扫描时,为这些表检索的块将放在缓冲区高速缓存中最近最少使用 (least recently
used, LRU) 列表的最近最常使用一端。
使用整个数据库内存中高速缓存功能,当数据库大小(所有数据文件、SYSTEM 表空间、
LOB CACHE 文件的总和减去 SYSAUX、TEMP)小于缓冲区高速缓存大小时,会将整个数
据库高速缓存到内存中。在内存中高速缓存和运行数据库可实现巨大的性能优势。可以使
用两种模式:
• 整个数据库高速缓存:隐式默认和自动模式,在这种模式下,内部计算确定数据库是
否可以针对实例完全高速缓存。NOCACHE LOB 在整个数据库高速缓存模式下不进行
高速缓存,但是在强制整个数据库高速缓存模式下,即使 NOCACHE LOB 也会进行高
速缓存。
• 强制整个数据库高速缓存:整个数据库高速缓存和强制整个数据库高速缓存都不会
将数据强制存入/预取到内存中。工作量必须先访问数据,然后才能高速缓存数据。
它认为整个数据库符合整个高速缓存到缓冲区高速缓存的条件。这种模式要求 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
设置强制整个数据库高速缓存
实例 1 实例 2
Oracle University and Error : You are not a Valid Partner use only
SYSTEM EXAMPLE USERS
所用数据库空间 = 10g
不同的配置
• 在 RAC 环境中,如果符合以下任何条件,则 DBA 可以使用强制整个数据库高速
缓存:
- 逻辑数据库大小(实际使用的空间)小于每个实例的专用缓冲区高速缓存。
- 对于适当分区的工作量(通过实例访问),逻辑数据库大小小于所有实例的缓
冲区高速缓存总大小的 80%。
强制整个数据库高速缓存模式影响 RAC 数据库的所有实例或不影响任何实例。
• 主数据库和备用数据库在强制整个数据库高速缓存模式下相互独立。ALTER
DATABASE FORCE FULL DATABASE CACHING 命令不会生成重做,并且主数据
库不会触发备用数据库进入或退出这种模式。
• 在多租户配置中,强制整个数据库高速缓存模式适用于整个多租户容器数据库
(container database, CDB),包括它的所有可插入数据库 (pluggable database,
PDB)。
建议
在 ALTER DATABASE FORCE FULL DATABASE CACHING 命令完成后,不会自动备份
控制文件。因此,强烈建议备份控制文件,以防必须恢复控制文件的旧版本。
要在任何控制文件恢复后确定强制整个数据库高速缓存模式的状态,请查看
V$DATABASE 视图的 FORCE_FULL_DB_CACHING 列。
Oracle University and Error : You are not a Valid Partner use only
监视整个数据库内存中高速缓存
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
d. 重新启动实例。
监视整个数据库高速缓存意味着定期检查数据文件中的段中存储的数据是否可以全部加载
到缓冲区高速缓存中。
计算加载数据库数据所需的缓冲区高速缓存大小,包括数据文件中的所有数据,但
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 设置为适当的值,并重新
启动实例。
自动大表高速缓存之前的内存中并行查询
确定正在查看 表非常适合内存中 将表的碎片读取到每个
SQL 语句
的表的大小。 并行执行。 节点的缓冲区高速缓存。
Oracle University and Error : You are not a Valid Partner use only
表非常小。 表非常大。
读取到任意节点上的
缓冲区高速缓存。 只有同一 RAC 节点上的
并行服务器将访问每个
片段。
始终使用从磁盘直接读取。
如果尚未高速缓存目标数据,响应速度可能比直接路径读取要慢,因为将数据从磁盘加载
到缓冲区高速缓存而产生的开销会导致性能有些下降。分布并高速缓存目标数据之后,内
存中 PX 可以在不访问存储系统的情况下扫描所有数据,因而产生非常高的性能。
如果 PX 处理的数据量多于缓冲区大小的容量,它将在生成 SQL 执行计划期间自动检测到
该问题,并改为使用直接路径读取。
使用分区表时,数据更倾向于高速缓存到缓冲区高速缓存,因为分区修剪会减少要使用的
实际数据大小。无需扫描不相关的分区,从而提高数据在缓冲区高速缓存 80% 内的几率。
Oracle University and Error : You are not a Valid Partner use only
只有同一 RAC 节点上的 PX 服务器将访问对象的每个分片,所有分片分散在所有缓冲区高
速缓存中。不会在实例间复制缺少的分区。
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 基于温度 对象级别
配置自动大表高速缓存
配置数据库缓冲区高速缓存的一部分:
• 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 表将替换为
温度更高的新对象。
• 避免发生崩溃:高速缓存部分对象
通过以下途径改进了对大表进行查询的性能:
• 选择性地高速缓存“热”对象:每次访问一个对象,Oracle DB 都会提高该对象的
温度。大表高速缓存中的对象只能替换为温度高于自身的另一个对象。在幻灯片中
提供的示例中,当缓冲区高速缓存中或大表高速缓存中某个对象的温度高于
HR.EMPLOYEES 表且再也没有空间来加载这两个对象时,HR.EMPLOYEES 表将替
换为更热的对象。
• 避免发生崩溃:当对象无法整个高速缓存时,将高速缓存部分对象。例如,如果某
个常用表只有 95% 能够存入内存,则数据库可能选择将 5% 的块留在磁盘上,而不
是将块循环读入内存而逐出最近使用的块。
要使用自动大表高速缓存,必须启用大表高速缓存:
• 将 DB_BIG_TABLE_CACHE_PERCENT_TARGET 初始化参数设置为非零值。该值表
示缓冲区高速缓存的一定百分比。默认值为 0(禁用),上限为 90(%),为除表扫描
以外的用途保留至少 10% 的缓冲区高速缓存。
• 将 PARALLEL_DEGREE_POLICY 设置为 AUTO 或 ADAPTIVE。
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
设置 DB_BIG_TABLE_CACHE_PERCENT_TARGET 参数时,应该考虑工作量混合:多少
工作量针对 OLTP;插入、更新和随机访问;多少工作量涉及表扫描。由于数据仓库工作
量通常执行大表扫描,因此可能考虑对于数据仓库给予大表高速缓存部分较大百分比的缓
冲区高速缓存空间。
如果工作量更改,该参数会动态地更改。根据到达目标的当前工作量,更改会花费一些时
间,因为那时可能正在使用缓冲区高速缓存内存。
监视自动大表高速缓存
下面两个视图提供了有关自动大表高速缓存的详细信息:
Oracle University and Error : You are not a Valid Partner use only
• V$BT_SCAN_CACHE
• V$BT_SCAN_OBJ_TEMPS
添加了数据仓库加载和扫描缓冲区的对象级附加统计信息,表示特定实例上的对象上的并
行查询 (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
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
•
•
•
•
•
使用自动大表高速缓存
说明两种缓冲区替换算法
在本课中,您应该已经学会:
描述自动大表高速缓存功能
小结
使用整个数据库内存中高速缓存
描述整个数据库内存中高速缓存功能
练习 18:概览
• 18-1:使用自动大表高速缓存功能
Oracle University and Error : You are not a Valid Partner use only
• 18-2:设置和监视强制整个数据库高速缓存
这些练习未遵循所介绍的两项功能的顺序,原因是允许跳过大表的重新创建。之前有关内
存中列存储的练习创建了一个非常大的表,自动大表高速缓存可以重用该表。
SQL 优化增强功能
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
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录
HA RMAN
内存中列存储 整个数据库内存中高速缓存
性能 12.1.0.2
自动大表高速 SQL 优化 资源管理器 索引、表
缓存
数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL
课程目标
学完本课后,应能完成以下工作:
• 描述自适应 SQL 计划管理
Oracle University and Error : You are not a Valid Partner use only
• 描述 SQL 管理库的增强功能
• 使用动态计划改进查询性能
• 描述自适应执行计划的重新优化
• 使用 SQL 计划指令生成更好的计划
• 描述统计信息搜集性能的改进
• 使用新的直方图
• 描述扩展统计信息的增强功能并检测特定工作量的
有用列组
• 描述动态采样的增强功能
请参阅其他信息资源:
• Oracle 学习库中的“Oracle Database 12c New Features Demo Series”演示:
•
•
•
•
•
•
自适应执行计划
自适应 SQL 计划管理
本课由三个主要部分组成:
优化程序统计信息管理
自适应执行计划
自适应 SQL 计划管理
优化程序统计信息管理
主题安排
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
优化任务
在集成到基线前验证计划
Oracle University and Error : You are not a Valid Partner use only
管理(例如,定期清除未使用的计划)。可以对 SMB 进行配置,以更改计划保留策略和
设置空间大小限制。
注:如果数据库实例正常运行,但 SYSAUX 表空间为 OFFLINE,则优化程序将无法访问
SQL 管理对象。这可能会影响某些 SQL 工作量的性能。
12c 之前版本
SQL 计划管理:概览
SQL 计划管理可以确保运行时性能不因执行计划的更改而
下降。
Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。
• 新的演化自动任务在夜间维护窗口运行。
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 可查
看自动作业的结果。
Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。
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 提取计划数据。
• 无法复制计划时更易诊断。
答案:a
结果。
b. 错
a. 对
测验
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
• 所有自适应执行计划都依赖于在查询执行期间收集的统
计信息。
• 自适应计划技术有两个:
– 动态计划
– 重新优化
• 将 OPTIMIZER_FEATURES_ENABLE 设置为 12.1.0.1
或更高版本,并且将
OPTIMIZER_ADAPTIVE_REPORTING_ONLY 初始化参
数设置为默认值 FALSE 时,数据库会使用自适应执行
计划。
通过自适应执行计划功能,优化程序可以在运行时自动适应性能较差的执行计划,并防止
后续执行操作选择性能差的计划。优化程序会测量其所选计划,这样,如果在运行时优化
程序的估计值不是最佳值,则可以检测到该计划。然后,该计划可以自动适应实际条件。
自适应计划是指在证实优化程序估计值不准确时执行优化操作后进行更改的计划。
优化程序可根据语句执行过程中收集的统计信息来适应计划。所有自适应机制都可以执行
与最初在硬性语法分析过程中确定的计划不同的计划。该机制可以改进查询处理引擎(编
译和执行)的功能,以生成更好的执行计划。
自适应计划技术有两个:
• 动态计划:动态计划会在语句执行过程中从子计划中进行选择。对于动态计划,优
化程序必须确定要包含在动态计划中的子计划、选择某个子计划要收集的统计信息
以及此选项的阈值。
• 重新优化:与之相反,重新优化会在当前执行过程之后更改执行计划。对于重新优
化,优化程序必须确定在计划的某个点要收集的统计信息,以及可行的重新优化
时间。
注:OPTIMIZER_ADAPTIVE_REPORTING_ONLY 用于控制自适应优化的仅报告模式。
如果将其设置为 TRUE,则自适应优化会在仅报告模式下运行,该模式会搜集自适应优化
所需的信息,但不会执行任何操作来更改计划。
动态计划
• 最终决策基于在执行期间收集的统计信息。
Oracle University and Error : You are not a Valid Partner use only
• 替代子计划已预先计算并存储在游标中。
• 会在计划的关键点插入统计信息收集器。
• 如果统计信息证实超出范围,则可以交换子计划。
• 这要求在临近交换点时进行缓冲以避免将行返回给用户。
• 仅联接方法和分布方法可以更改。
动态计划是具有不同内置计划选项的执行计划。在第一次执行期间,优化程序会在特定
子计划生效前最终决策要使用的具体选项。优化程序根据执行过程中到目前为止所观察
到的结果做出选择。动态计划使得语句的最终计划不同于默认计划,因而可能提高查询
的性能。
子计划是计划的一部分,优化程序可在运行时切换到子计划作为替代。
在语句执行期间,统计信息收集器会缓冲部分行。统计信息收集器之前的计划部分可以
具有替代子计划,每一个子计划均对收集器所返回可能值的某个子集有效。
通常,子计划的值集是一个范围。如果统计信息是非默认计划的某个子计划中的有效值,
则优化程序会选择该替代子计划。优化程序选择子计划后,将禁用缓冲。统计信息收集
器会停止收集行,而改为传递这些行。当后续执行子游标时,优化程序将禁用缓冲并选
择相同的最终计划。
使用动态计划,执行计划将适应优化程序糟糕的计划选择,可以在第一次执行期间做出
正确的决策。
注:V$SQL IS_RESOLVED_ADAPTIVE_PLAN 中新增的列指示最终计划是否为默认计
划。通过动态计划发现的信息将作为 SQL 计划指令保存。
动态计划:自适应过程
Oracle University and Error : You are not a Valid Partner use only
行计数 统计信息
918843
扫描 sales 获取行计数缓冲行 收集器
动态部分
禁用缓冲
最终计划 默认计划
散列联接 子计划
行计数 > 10 行计数 < 10
散列联接 嵌套循环联接
执行后使用散列联接。此信息显示在计划输出表中。
动态计划:示例
执行计划的“注释”部分表明计划是否为动态计划:这是一个动态计划。
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 中引入的。
• 统计信息反馈对于要处理的数据卷在一段时间内处于稳
定状态的查询十分有用。
• 在查询执行期间,会将优化程序估计值与执行统计信息
进行比较:如果二者差异很大,将选择新的计划用于后
续执行。
统计信息反馈:监视查询执行
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;
初始基数估计值缩减了
十分之一还多。
谓词信息
监视代码框中给定查询的执行。该查询包含等式过滤谓词和非等式过滤谓词的组合,会导
致在应用这些过滤后错误估计 order_items 表的基数。优化程序选择了给定计划,您
可以从执行统计信息(计划的估计值列 E-Rows 和实际值列 A-Rows)中看出,低估了
order_items 的基数。
统计信息反馈:重新分析语句
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;
基数估计值现在正确,并将触发联接
方法更改。
统计信息反馈显示在计划的注释部分中。
执行统计信息用于在第二次执行代码框中的查询时重新分析语句。第二次执行期间,实际
基数将反馈给优化程序。
这次优化程序将获取正确的基数估计值,然后优化程序将显示一个不同的计划。
自动重新优化
Oracle University and Error : You are not a Valid Partner use only
• 联接统计信息也包括在内。
• 将持续监视语句以查看每次执行时统计信息是否有波动。
• 对于包含绑定变量的语句,将使用自适应游标共享。
• 在 V$SQL 中添加了 IS_REOPTIMIZABLE 列。
• 在执行时发现的信息将作为 SQL 计划指令保存。
在重新优化时,优化程序仅在执行后续语句时调整计划。延迟优化可以修复任何不太理想
的计划,这些计划是根据不正确的优化程序估计值选择的,例如不太理想的分布方法或错
误的并行度选项。在第一次执行结束时,优化程序获得一组更完整的统计信息,此信息可
以改善将来的计划选择。可能会多次重新优化某个查询,每次都会创建更大且更精确的
一组优化程序调整值。
重新优化可修复动态计划无法解决的计划问题。然而,动态计划有助于对计划进行相对局
部的更改,但不适合进行某些全局计划更改。例如,联接顺序低效的查询可能会导致性能
不太理想,但无法在执行期间调整联接顺序。在这种情况下,优化程序会自动考虑重新优
化。对于重新优化,优化程序必须决定要收集的具体统计信息以及收集时间。
自 Oracle Database 12c 起,也包括联接统计信息。不断监视语句,以验证统计信息在不
同的执行期间是否波动。对于包含绑定变量的语句,将使用自适应游标共享。该功能可以
改进查询处理引擎(编译和执行)的功能,以生成更好的执行计划。
优化程序将按以下方式使用统计信息:
• 统计信息收集器及其关联的优化程序估计值可确定能否选择自动重新优化。如果统
计信息与估计值之间的差异超过阈值,则优化程序将查找替换计划。
• 优化程序将某个查询标识为重新优化候选项后,数据库会将收集的所有统计信息提
交至优化程序。
注:IS_REOPTIMIZABLE 列显示与该子游标相匹配的下一次执行是否将触发重新优化,
或者子游标是否包含重新优化信息,但是不会触发重新优化,因为该游标是在报告模式下
Oracle University and Error : You are not a Valid Partner use only
编译的。
答案:a
b. 错
a. 对
程中查询计划会发生更改。
测验
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 计划指令
• SQL 计划指令是指优化程序可用于生成更好的计划的
其他信息和指令:
Oracle University and Error : You are not a Valid Partner use only
– 收集缺少的统计信息。
– 创建列组统计信息。
– 执行动态采样。
• 指令可用于多条语句:
– 指令在查询表达式中进行收集。
• 这些指令会永久保留在 SYSAUX 表空间的磁盘中。
• 指令是自动维护的:
– 在编译或执行过程中根据需要创建:
— 缺少统计信息,基数估计错误
– 如果在一年后未使用,则会清除。
在以前的发行版中,数据库将编译和执行统计信息存储在并非永久保留的共享 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 语句使用来提高计划准确性。
创建 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 指令
使用 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 …
SYSAUX 表空间
5 优化程序检查指令,
找到一条针对城市
和国家/地区列的 扩展 绑定 统计信息 Sqlid
指令。
SQL 指令
SQL 计划指令:示例
Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。
批量加载的联机统计信息搜集
Oracle University and Error : You are not a Valid Partner use only
加载期间自动搜集表统计信息:
– CREATE TABLE AS SELECT
– INSERT INTO ... SELECT 空表中 - 使用直接路径
插入。
• 加载后立即获得统计信息。
• 无需额外的表扫描即可搜集统计信息。
• 使用 CTAS(MV 刷新)的所有内部维护操作都将受益。
• 自动统计信息搜集作业使用并发操作。
Oracle University and Error : You are not a Valid Partner use only
• 通过仔细规划资源使用率上限可防止因并发搜集统计
信息而导致系统使用过度。
• 允许并发搜集索引统计信息。
• 允许并发搜集多个分区表的统计信息。
全局临时表的统计信息
Oracle University and Error : You are not a Valid Partner use only
可以有一组不同的优化程序统计信息。
• GLOBAL_TEMP_TABLE_STATSv 程序包的 DBMS_STATS
首选项控制是否为全局临时表搜集会话或共享统计信息。
• DBMS_STATS 将更改提交到特定于会话的全局临时表,
而不是特定于事务处理的全局临时表。
• 使用特定于会话的统计信息的游标不会由其他会话共享。
全局临时表是一个特殊的表,在特定持续时间内存储中间会话专用数据。在 Oracle
Database 12c 之前,与永久表一样,对于出现的所有全局临时表,只有一组统计信息
可用。
从 Oracle Database 12c 开始,可以为全局临时表维护会话专用统计信息。可以选择在
一个会话中搜集全局临时表的统计信息,并只将统计信息用于该会话。同时,可以继续
维护统计信息的共享版本,该版本可由尚未搜集会话专用统计信息的其他所有会话使用。
也为全局临时表提供了会话级 DML 监视。借助全局临时表的特定于会话的统计信息,
可以根据全局临时表中的数据更准确地优化查询。
特定于会话的统计信息具有以下特征:
• 跟踪统计信息的字典视图(例如 DBA_TAB_STATISTICS、
DBA_IND_STATISTICS、DBA_TAB_HISTOGRAMS 等)包含 SCOPE 列,该列指
明了统计信息是 SHARED 还是特定于 SESSION。
• 特定于会话的统计信息只在内存中,从不永久保留在磁盘上。退出会话时,数据库
将自动删除这些统计信息。
Oracle University and Error : You are not a Valid Partner use only
直方图增强功能
• 直方图是一个表示表中每列数据分布的结构。
Oracle University and Error : You are not a Valid Partner use only
• 优化程序使用直方图计算过滤器和联接谓词的选择性。
• 在 Oracle Database 12c 中,引入了两种新的直方图:
– 最高频率直方图
– 混合直方图
• 在将采样设置为 AUTO 的情况下,仅创建频率和混合
直方图。
直方图表示表列中的数据分布。Oracle DB 为有数据偏差的列创建直方图,以改进基数估
计值。
在 Oracle Database 12c 中,为包含超过 254 个相异值的列引入了两种新的直方图,以
改进通过直方图生成的基数估计值:
• 最高频率直方图
• 混合直方图
这些新直方图中端点值的频率更准确,可使优化程序选择更好的计划。
如果 Oracle Database 12c 创建新直方图,并且采样百分比为 AUTO,则它们是频率或混
合直方图,但不是高度平衡直方图。
注:如果将数据库从 Oracle Database11g 升级到 12c,在升级之前创建的任何基于高度
的直方图都仍在使用。
最高频率直方图
Oracle University and Error : You are not a Valid Partner use only
• 创建最高频率直方图的条件如下:
– 采样百分比设置为 AUTO
– 列包含超过 nb 个相异值
– 前 nb 个频繁值的百分比大于行的 p%
• 最高频率直方图可以提供更准确的基数估计值。
• 最高频率直方图由
DBA_TAB_COL_STATISTICS.HISTOGRAM 列中的
TOP-FREQUENCY 值指明。
混合直方图
• 混合直方图将基于高度的直方图和频率直方图的特征集
Oracle University and Error : You are not a Valid Partner use only
于一体。
• 在直方图中存储每个端点的端点重复计数值,该值是端
点值重复的次数。
• 在 Oracle Database 12c 中,数据库将在符合以下条件
时创建混合直方图:
– 采样百分比为 AUTO。
– 最高频率直方图的条件不适用。
– NDV 大于 nb,其中 nb 是用户指定的存储桶数量。如果
未指定任何数量,则 nb 默认为 254。
混合直方图将基于高度的直方图和频率直方图的特征集于一体。
基于高度的直方图有时会生成不准确的估计值。例如,如果一个值仅作为一个存储桶的端
点值出现,但是几乎占用两个存储桶,则不将其视为常见值。
为了解决该问题,混合直方图存储端点重复计数值以及小于直方图中每个存储桶的相应端
点值的值的累积频率。通过使用这两种信息,优化程序可以获得最常见值的准确估计值。
在 Oracle Database 12c 中,数据库将在符合以下条件时创建混合直方图:
• 采样百分比为 AUTO。
• 最高频率直方图的条件不适用。
• NDV 大于 nb,其中 nb 是用户指定的存储桶数量或默认数量 254。
混合直方图:示例
Oracle University and Error : You are not a Valid Partner use only
版权所有 © 2014,Oracle 和/或其附属公司。保留所有权利。
扩展统计信息增强功能
• 使用 DBMS_STATS 可以识别和创建扩展统计信息。
Oracle University and Error : You are not a Valid Partner use only
• 有两种类型的扩展统计信息:
– 列组统计信息
– 表达式统计信息
• 在表上搜集统计信息时,将自动维护扩展统计信息。
• Oracle Database 12c 可以根据工作量为您检测和创建
必要的列组。
捕获列组使用情况
启用工作量监视
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.
捕获列组使用情况:运行工作量
Oracle University and Error : You are not a Valid Partner use only
第一个查询返回的实际行数
为 932。优化程序低估了该值,
因为它假设每个谓词都将减少
行数。
第二个查询返回的实际行数
为 145。优化程序高估了该
值,因为它假设国家/地区和
省/市/自治区之间没有关系。
接着前面的示例,数据库必须观察有代表性的工作量以确定适当的列组。在监视期间无需
运行查询本身,而是可以为工作量中运行时间较长的某些查询运行 EXPLAIN PLAN,以
确保数据库记录这些查询的列组信息。
幻灯片中的示例显示了对客户表的两个查询的解释计划。
复查列组使用情况
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。
新的 REPORT_COL_USAGE 过程可以报告记录的列组使用信息。
幻灯片中的示例复查了为 CUSTOMERS 表记录的列组使用信息。
全部三列出现在同一个 WHERE 子句中,所以报告将其显示为一个组过滤器。
在第二个查询中,两列出现在 GROUP BY 子句中,所以报告将其标记为 GROUP_BY。
FILTER 和 GROUP_BY 报告中的一组列是列组的候选项。
创建在工作量监视期间检测到的列组
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
####################################################
自动动态采样
Oracle University and Error : You are not a Valid Partner use only
SQL 语句。
• OPTIMIZER_DYNAMIC_SAMPLING 初始化参数设置为
值 11 时,将启用自动动态采样。
• 将范围扩大到非并行语句。
• 扩展功能以包括联接和分组方式。
• 使动态采样查询的结果永久保留在高速缓存中,以消除
重复采样的开销。
• 附加统计信息来源(例如,区映射)可以弥补易失表上
的过时统计信息。
答案:a
b. 错
a. 对
数据库将创建混合直方图。
测验
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 计划指令生成更好的计划
• 统计信息搜集性能的改进
• 如何使用新的直方图
• 扩展统计信息的增强功能以及如何检测特定工作量的
有用列组
• 动态采样的增强功能
•
•
•
19-2:使用重新优化
19-1:使用动态计划
练习
19-2:使用并发统计信息搜集
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
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录
HA RMAN
内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速
12.1.0.2
SQL 优化 资源管理器 索引、表
缓存
数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL
课程目标
学完本课后,应能完成以下工作:
Oracle University and Error : You are not a Valid Partner use only
• 在 CDB 环境中使用资源管理器
• 控制由 IM 列存储填充操作消耗的资源
• 描述多进程多线程 Oracle 体系结构
• 描述数据库智能闪存高速缓存增强功能
• 将临时还原用于临时表
• 限制 PGA 的大小
资源管理器和可插入数据库
在 CDB 中,资源管理器可以管理:
Oracle University and Error : You are not a Valid Partner use only
• PDB 之间的资源
• 每个 PDB 中的资源
CDB 系统资源 争用会话
PDB1
PDB2 PDB3
分配的资源
在非 CDB 中,可以使用资源管理器管理争夺系统和数据库资源的多个工作量。但是,在
CDB 中,多个 PDB 中会有多个工作量争用系统和 CDB 资源。
在 CDB 中,资源管理器可以在两个基本级别管理资源:
• CDB 级别:资源管理器可以管理争用系统和 CDB 资源的多个 PDB 的工作量。可以
指定如何将资源分配给 PDB,也可以限制特定 PDB 的资源利用率。
• PDB 级别:资源管理器可以管理每个 PDB 中的工作量。
资源管理器采用两个步骤分配资源:
1. 将一部分系统资源分配给每个 PDB。
2. 在特定 PDB 中,将在第 1 步中获得的一部分系统资源分配给连接到该 PDB 的每个
会话。
在 PDB 之间协调资源
Oracle University and Error : You are not a Valid Partner use only
– 系统份额用于为每个 PDB 分配资源。
– 限制用于限定每个 PDB 的资源利用率。
• 插入新的 PDB 时,CDB DBA 可以指定默认分配或
显式分配。
CDB
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%。
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,它将自动获得默认份额值,即一份。
在幻灯片中的第一个示例中,总共四份,每个 PDB 保证获得系统资源的 25%。
注:CDB 资源计划中添加的每个 PDB 都将使用 PDB 的默认指令。如果默认值不适合计
划,可以更改该默认指令。
但是,如果认为 PDB4 的优先级高于其他 PDB,则可以显式为其分配更多份额。在幻灯
片中的第二个示例中,PDB4 获得两份,而其他 PDB 获得一份。总共五份,PDB1、
PDB2 和 PDB3 保证获得系统资源的五分之一 (20%),因为它们每个分配有一份。由于
PDB4 分配有两份,因此它保证获得系统资源的五分之二 (40%)。
CDB 资源计划基础:限制
Oracle University and Error : You are not a Valid Partner use only
– 要覆盖利用率限制的并行服务器限制
• 默认值:100%
• 可以更改默认值。
PDB1
utilization_limit = 30
Parallel_server_limit = 50
100%)。这些值对应于自动添加到计划中的默认指令。
注:也可以使用 DBMS_RESOURCE_MANAGER 程序包中的
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%
器
容
根
创建 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)
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 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 资源计划指令
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
维护 CDB 资源计划
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_DIRECTIVE DELETE_CDB_PLAN_DIRECTIVE
管理 PDB 中的资源
• 在非 CDB 数据库中,使用资源计划管理数据库中的工
作量。
Oracle University and Error : You are not a Valid Partner use only
• 在 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 资源计划。
结合使用
• 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%
注意事项
• 设置 PDB 资源计划是可选操作。如果未指定,PDB
Oracle University and Error : You are not a Valid Partner use only
中的所有会话将得到同等对待。
• 将非 CDB 插入带有计划的 CDB:
– 如果满足以下条件,则计划在 PDB 上的运行方式完全
一样:
— 使用者组 <= 8
— 无子计划
— 所有分配都在级别 1
– 计划将进行转换。
— 原始计划以 LEGACY 状态存储在字典中。
失控查询和资源管理器
• 用于触发使用者组切换的新参数:
– 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
为了更好地跟踪失控查询,资源管理器经过增强,包括以下新功能:
• 除现有切换条件(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 University and Error : You are not a Valid Partner use only
控制 IM 列存储重新填充资源消耗
• IM 列存储填充会占用大量 CPU。
• 存在不同类型的 IM 列存储填充:
Oracle University and Error : You are not a Valid Partner use only
说明 默认使用者组
按需填充(例如:当用户访问优先级为 NONE 的
用户的使用者组
内存中段时)
默认 UNIX/Linux 体系结构
Oracle University and Error : You are not a Valid Partner use only
DBW0..j
(数据库 …
写进程)
系统全局区 (SGA)
VKTM 服务器
(虚拟 进程
计时器)
OS 进程
Oracle 进程
Oracle University and Error : You are not a Valid Partner use only
(进程 (系统 (恢复过程)
监视器) 监视器) 分配器) 资源管理器)
DBW0..j
(数据库 …
写进程)
系统全局区 (SGA)
VKTM 服务器
(虚拟 进程
计时器)
多进程多线程体系结构:优点和设置
• 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>
注释
在某些测试中,使用多进程多线程功能时,内存使用量几乎要减少一半。
要为使用多进程多线程体系结构而设置 Oracle DB 实例,方法是在将初始化参数
THREADED_EXECUTION 设置为 TRUE 的情况下启动 Oracle DB 实例。
要能够在将 THREADED_EXECUTION 设置为 TRUE 的情况下启动 Oracle DB 实例,需要
使用通过口令文件验证的 SYSDBA 连接。
多进程多线程体系结构:注意事项
Oracle University and Error : You are not a Valid Partner use only
• 线程仍然将 SGA 内存用于进程间通信。
• 监听程序不会衍生线程。
• 需要用于 SYSDBA 验证的口令文件。
• 作为最佳实践,设置以下参数:
DEDICATED_THROUGH_BROKER_LISTENER = on
多进程多线程体系结构:监视
SQL> select spid, stid, pname from v$process order by spid;
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
$
数据库智能闪存高速缓存增强功能
• 闪存高速缓存中有多个闪存驱动器
Oracle University and Error : You are not a Valid Partner use only
– 闪存高速缓存设备动态启用/禁用
• 更改为内存中并行查询 (parallel query, PQ) 算法
– 启用了自动 DOP 时
– 缓冲区高速缓存分成 OLTP 和 DW 部分
– 单独的高速缓存替换算法用于 DW 部分
启用和禁用闪存设备
• 在实例启动时指定闪存设备。
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
• 启用闪存设备。
内存中 PQ 算法:优点
• 允许并行查询利用智能闪存高速缓存
Oracle University and Error : You are not a Valid Partner use only
• 允许并行读取智能闪存高速缓存和磁盘
• 不会使缓冲区高速缓存或闪存高速缓存发生崩溃
• 在 I/O 与 CPU 资源之间寻求最佳平衡
内存中 PQ 对象替换算法用于通过在大集群中的计算节点上使用闪存高速缓存来支持数
据仓库可伸缩性。在运行混合工作量或者有时从 OLTP 更改为 DSS 的工作量的较小实
例中,这种算法的优点也显而易见。这种算法不会替换 LRU 算法,而是存在于同一实
例中。
这种算法:
• 允许并行查询利用智能闪存高速缓存
• 并行读取智能闪存高速缓存和磁盘
• 不会为了存储某个对象的更多部分而强制该对象已高速缓存的部分退出高速缓存
• 不会强制主要 LRU 算法使用的缓冲区块退出缓冲区高速缓存或闪存高速缓存
• 在 I/O 与 CPU 资源之间寻求最佳平衡
智能闪存高速缓存:新统计信息
用于衡量对象替换算法使用情况的几种新统计信息包括:
Oracle University and Error : You are not a Valid Partner use only
• 数据仓库扫描的块数
• 数据仓库扫描的块数 - 磁盘
• 数据仓库扫描的块数 - 闪存
• 数据仓库扫描的块数 - 内存
• 数据仓库扫描的对象数
临时还原:概览
存储在 存储在
临时表空间 用户表空间
Oracle University and Error : You are not a Valid Partner use only
如果使用 如果未使用
临时还原 临时还原
临时表 永久表
临时 永久
重做
还原 还原
系统会广泛使用临时表作为暂存区来存放中间结果。这是因为更改这些表的速度远远超过
更改非临时表的速度。性能之所以会改进,主要是因为不会为临时表中的更改直接生成重
做条目。但是,对临时表(和索引)的操作的还原数据仍会记录在重做日志中。
临时表的还原数据对于在临时对象生存期中实现读取一致性和事务处理回退非常有用。除
此之外,不需要该还原数据。因此,它无需保存在重做流中。例如,事务处理恢复将放弃
临时对象的还原数据。
从 Oracle Database 12c 开始,可以将由临时表的事务处理生成的还原数据直接存储在临
时表空间的一个单独还原流中,以避免将该还原数据记录在重做流中。这种新模式称为临
时还原。
注:临时还原段是会话专用的。它将存储对属于相应会话的临时表(一般为临时对象)所
做的更改的还原数据。
临时还原:优点和设置
• 临时还原可减少还原表空间中存储的还原数据量。
Oracle University and Error : You are not a Valid Partner use only
• 临时还原可减小重做日志的大小。
• 临时还原支持在具有 Oracle Active Data Guard 选件的
物理备用数据库中对临时表执行 DML 操作。
• 会话首次使用临时对象时会选择临时还原模式。
启用临时还原具有以下优点:
• 临时还原可减少还原表空间中存储的还原数据量。还原表空间中的还原数据越少,还
原记录所需要的还原保留期越实际。
• 临时还原可减小重做日志的大小。由于写入重做日志的数据较少,因此性能会有所提
高,并且由于要进行语法分析的重做数据较少,因此,用于对重做日志记录进行语法
分析的组件(如 LogMiner)性能也会有所提高。
• 临时还原支持在具有 Oracle Active Data Guard 选件的物理备用数据库中对临时表执
行数据操纵语言 (DML) 操作。但是,必须在主数据库上发出创建临时表的数据操纵语
言 (DDL) 操作。
可以为特定会话或整个系统启用临时还原。为某个会话启用临时还原时,该会话将创建临
时还原,而不影响其他会话。当会话首次使用临时对象时,系统将为该会话的其余部分设
置 TEMP_UNDO_ENABLED 初始化参数的当前值。因此,如果为某个会话启用了临时还原,
并且该会话使用临时对象,则无法为该会话禁用临时还原。同样,如果为某个会话禁用了
临时还原,并且该会话使用临时对象,则无法为该会话启用临时还原。为系统启用临时还
原时,所有现有会话和新会话都将创建临时还原。
临时还原监视
Oracle University and Error : You are not a Valid Partner use only
NOSPACEERRCNT
FROM V$TEMPUNDOSTAT;
SQL>
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》指南。
限制程序全局区的大小
• 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 总内存使用量仍然超过限制,则使用最多不可
优化内存的会话将被终止。
•
•
•
•
•
•
限制 PGA 的大小
将临时还原用于临时表
在本课中,您应该已经学会:
小结
在 CDB 环境中使用资源管理器
描述数据库智能闪存高速缓存增强功能
•
•
的资源
练习 20:概览
20-2:设置和监视多进程多线程体系结构
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
Oracle University and Error : You are not a Valid Partner use only
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录
HA RMAN
内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速
12.1.0.2
SQL 优化 资源管理器 索引、表
缓存
数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL
课程目标
学完本课后,应能完成以下工作:
Oracle University and Error : You are not a Valid Partner use only
• 说明同一组列多个索引
• 描述对不可见列和隐藏列的支持
• 描述联机重新定义增强功能
• 描述高级行压缩
• 使更多 DDL 语句无阻塞
为什么同一组列有多个索引
• 执行应用程序移植而不删除现有索引,而使用其他属性
Oracle University and Error : You are not a Valid Partner use only
重新创建索引。
• 多个不同索引:
– 唯一索引和非唯一索引
c1 c2 c3 c4 c5
– 不同分区:本地分区和全局分区
当以下索引特性至少有一个不同时,可以对同一组列创建多个索引:
• 索引类型不同。不过,请注意以下例外情况:
- 无法对同一组列创建 B 树索引和 B 树簇索引。
- 无法对同一组列创建 B 树索引和按索引组织的表。
• 索引使用不同分区:
- 未分区的索引和分区的索引
- 本地分区的索引和全局分区的索引
- 分区类型不同(范围或散列)的索引
• 索引具有不同的唯一属性:可以对同一组列创建唯一索引和非唯一索引。
当同一组列有多个索引时,一次只有一个索引可见。
对同一组列创建多个索引
一次只有一个索引可见。
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,
优化程序会使用不可见索引。
同一组列有多个索引时,一次只有一个索引可见。
如果要创建一个可见索引,则该组列的任何现有索引都必须不可见。也可以使同一组列的
其他索引不可见,或对该组列创建不可见的索引。
如果 OPTIMIZER_USE_INVISIBLE_INDEXES 设置为 True,则优化程序可使用不可见
索引来创建计划。
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 |
------------------------------------------------------------------
答案:b
b. 错
a. 对
查询性能。
而只能决定是否使用可见索引。
测验
同一组列有多个索引时,只有一个索引可见。因此,优化程序没有多个索引可供选择,
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> INSERT INTO mytab (col1, col2) values ('A',1);
引入不可见列是为了让开发人员能增强应用程序,以满足业务规则和要求的不断变化。不
可见列是用户指定的隐藏列。使用不可见列,在开发人员增强应用程序以满足新的业务要
求的同时,用户也可以访问该应用程序。在将新业务要求合并到应用程序中后,可以公开
不可见列。可以在表中添加一个隐藏列,稍后再使用 ALTER TABLE MODIFY 语句将其
设为可见。
用户可以无缝地在表中添加隐藏列,而不会影响访问该表的现有应用程序。在将
INVISIBLE 列指定为 CREATE TABLE 的一部分时,可以将其用作分区键。可以将不可
见列指定为虚拟列。无法在 INSERT 语句的 VALUES 子句中为 INVISIBLE 列隐式指定
值。必须在列的列表中指定 INVISIBLE 列。只有通过在查询和其他操作中显式引用隐藏
列的名称,才能访问隐藏列。
注:不可见列与系统生成的隐藏列不同。
您可以将不可见列设为可见,但无法将隐藏列设为可见。
SQL> ALTER TABLE mytab MODIFY (col2 VISIBLE);
Oracle University and Error : You are not a Valid Partner use only
不可见的列。
SQL> SET COLINVISIBLE ON
答案:b
b. 错
a. 对
显示不可见列定义。
测验
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. 完成重新定义过程。
联机重新定义: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)
高级行压缩:新功能名称和语法
Oracle University and Error : You are not a Valid Partner use only
方法 CREATE 和 典型应用 方法 CREATE 和 典型应用
ALTER TABLE ALTER TABLE
LOB 压缩:新名称
11g 12c
Oracle University and Error : You are not a Valid Partner use only
SecureFile 压缩 高级 LOB 压缩
SecureFile LOB
在 Oracle Database 12c 中,高级压缩选项中与 SecureFile 相关的两个功能的名称已
更改:
• SecureFile 压缩现在称为高级 LOB 压缩。
• SecureFile 取消重复现在称为高级 LOB 取消重复。
使用压缩指导
• 压缩指导有助于确定最佳压缩率。
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;
压缩指导进行了增强,以显示新的高级压缩类型。
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.
增强的联机 DDL 功能
Oracle University and Error : You are not a Valid Partner use only
执行 DML 语句:
• DROP INDEX
• DROP CONSTRAINT
• ALTER INDEX UNUSABLE
• SET COLUMN UNUSED
Oracle University and Error : You are not a Valid Partner use only
操作。
• 分区索引和非分区索引都支持联机 DROP INDEX。
SQL> DROP INDEX schema.index ONLINE FORCE;
索引 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;
INDEX_NAME STATUS
------------------------ ------------
I_EMP_IX UNUSABLE
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;
drop_column_clause 可以是释放数据库空间的第一步,方法是删除不再需要的列或在系
统资源的需求变低时将其标记为在以后删除。
可指定 SET UNUSED 关键字以将一个或多个列标记为未使用列。为外部表中的列指定该
子句时,该子句会透明地转换为 ALTER TABLE ... DROP COLUMN 语句。因为对外部表
执行的任何操作都仅针对元数据进行,所以这两个指令的性能并没有差别。未使用列被视
为已删除列,即使其列数据仍保留在表行中。将某列标记为 UNUSED 之后,您将无法访
问该列。执行 SELECT * 查询时不会检索未使用列中的数据。另外,执行 DESCRIBE 时
不会显示标记为 UNUSED 的列的名称和类型,因此您可以在表中添加一个与未使用列同
名的新列。
指定 ONLINE 关键字以表示在将一个或多个列标记为 UNUSED 时允许对表执行 DML
操作。
在将具有 DEFERRABLE 约束条件的列标记为未使用列时,无法指定 ONLINE 子句。后续
DROP UNUSED COLUMNS 会以物理方式从表中删除所有未使用列,如同 DROP COLUMN
一样。
•
•
•
•
•
描述高级行压缩
说明同一组列多个索引
描述联机重新定义增强功能
小结
描述对不可见列和隐藏列的支持
•
•
21-2:使用高级行压缩
21-1:使用不可见/可见列
练习 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
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
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录
HA RMAN
内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速
12.1.0.2
SQL 优化 资源管理器 索引、表
缓存
数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL
课程目标
学完本课后,应能完成以下工作:
Oracle University and Error : You are not a Valid Partner use only
• 描述 Oracle 数据泵的完全可移动功能
• 描述 Oracle Database 12c 中数据泵、SQL*Loader 和
外部表的各项新功能
• 描述 Oracle 数据泵和 SQL*Loader 新功能的适用使用
情形和配置详细信息
• 描述 SQL*Loader 快速模式
完全可移动导出/导入:概览
升级至新发行版 Oracle DB
Oracle University and Error : You are not a Valid Partner use only
将数据库移动到新计算机系统
完全可移动导出/导入功能可用于多种情形:
• 升级至新发行版 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 University and Error : You are not a Valid Partner use only
• TRANSPORTABLE=ALWAYS 参数
• FULL 参数
仅当在导出期间使用可移动选项创建转储文件时,完全可移
动导入才会导入该文件。
• TRANSPORT_DATAFILES
• 如果使用了 NETWORK_LINK,则需要:
– TRANSPORTABLE=ALWAYS 参数
完全可移动导出功能会导出所有必要对象和数据,以创建数据库的完整副本。将混合使用
多种数据移动方法:
• 位于可移动表空间中的对象仅会将其元数据卸载到转储文件集中。数据本身会在您
将数据文件复制到目标数据库中时进行移动。必须复制的数据文件将列在日志文件
末尾,以供导出操作使用。
• 位于不可移动表空间(例如 SYSTEM 和 SYSAUX)中的对象会使用直接路径卸载和
外部表,将其元数据和数据都卸载到转储文件集中。
示例显示了使用 VERSION 参数的完全可移动导出。如果源数据库是 11.2.0.3 或更高的
Oracle Database 11g 发行版,则需要 VERSION 参数。
执行完全可移动导出时有以下限制:
• 如果要导出的数据库包含加密表空间或具有加密列(透明数据加密 (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)中的
表启用审计。
完全可移动导出/导入:示例
目标
源数据库 数据库
在必要时进行 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
要执行完全可移动操作,请执行下列步骤:
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 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
禁用 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
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 相同结果的不同方法。
将视图导出成表
• 使用 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
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 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 会被禁止并生成一个
错误。
在导入期间压缩表
• 现在,可以在导入时指定压缩方法。
– 该方法与导出时显示的压缩设置无关。
Oracle University and Error : You are not a Valid Partner use only
• 命令行语法和示例:
$ impdp ... TRANSFORM = TABLE_COMPRESSION_CLAUSE:NONE|"<comp-clause>" ...
• 语法注释:
– NONE => 在 CREATE TABLE 中忽略压缩子句
– <comp-clause> => 有效的表压缩子句
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 => 在转储文件中指定设置
答案:b
b. 错
a. 对
impdp 命令上的
测验
导入的表将采用与表空间关联的默认压缩设置。
会导致 impdp 会话创建的所有表被解压缩。
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 的新功能始于支持标识列的直接路径加载。
标识列是一个数值列,其中包含序列生成器为在关联表中执行的每个 INSERT 语句分配
的递增或递减整数值。可以将 GENERATED ... AS IDENTITY 子句和 CREATE
TABLE 或 ALTER TABLE 语句结合使用来指定标识列。标识列是 Oracle Database 12c
中的新功能。
SQL*Loader 与该新功能结合使用可支持标识列的直接路径加载。幻灯片中的表描述
SQL*Loader 针对不同类型的标识列执行的操作。这些操作会自动发生,且与标识列的正
常行为一致。
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
‒ 列的默认属性
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 表
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 University and Error : You are not a Valid Partner use only
• 描述 Oracle 数据泵的完全可移动功能
• 描述 Oracle Database 12c 中 Oracle 数据泵、
SQL*Loader 和外部表的各项新功能
• 描述 Oracle 数据泵和 SQL*Loader 新功能的适用使用
情形和配置详细信息
• 描述 SQL*Loader 快速模式
•
•
练习 22:概览
22-1:使用完全可移动模式移动数据库
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
Oracle University and Error : You are not a Valid Partner use only
热图和自动数据优化 联机数据文件移动
ADO 和存储
数据库中归档和期间有效性 期间历史记录
HA RMAN
内存中列存储 整个数据库内存中高速缓存
性能 自动大表高速
12.1.0.2
缓存
SQL 优化 资源管理器 索引、表
数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL
有多个分区增强功能。
课程目标
学完本课后,应能完成以下工作:
Oracle University and Error : You are not a Valid Partner use only
• 说明间隔引用分区
• 在单个操作中维护多个分区
• 描述本地和全局部分索引
• 创建和维护本地和全局部分索引
• 描述异步全局索引维护
引用分区增强功能
• 支持间隔引用分区
…
• 为 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 关系继承的分区键
间隔引用分区
• 间隔分区表可用作引用分区的
…
父表。
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 关系继承的分区键
间隔分区表可用作引用分区的父表。在间隔引用分区表(子表)中插入行时,就会创建该
子表的间隔段分区。因此,有可能发生间隔分区存在于父表中但不存在于子表中的情况,
因为没有人在子表的这个分区中插入任何行。在父表中创建一个间隔分区时,子表会继承
关联父表中的分区名称。
如果子表有表级默认表空间,则将该表空间用作新间隔分区的表空间。否则,将从父表分
区继承表空间。
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,则会成功。
…
多分区维护操作
• 通过添加/截断/删除分区,可以在单个操作中添加/截断/
Oracle University and Error : You are not a Valid Partner use only
删除多个分区。
• 拆分分区和合并分区操作可将数据拆分为较小分区或将
数据合并为较大分区
• 在 Oracle Database 12c 之前,Oracle 允许使用
ALTER TABLE 拆分和合并分区 DDL 仅对两个分区执
行拆分和合并操作。
拆分分区和合并分区操作可将数据拆分为较小分区或将数据合并为较大分区。
在 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 University and Error : You are not a Valid Partner use only
加多个新分区。
• 本地和全局索引操作与添加单个分区时的操作相同。
• 将以上限值升序列出的多个范围分区添加到范围分区表
或组合范围分区表的高端。
• 如果 DEFAULT 分区不存在,则使用新分区值集将多个
列表分区添加到一个表中。
创建范围分区表
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 );
添加多个分区
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'));
截断多个分区
Oracle University and Error : You are not a Valid Partner use only
句,截断范围分区表或列表分区表中的多个分区。
• 该操作将截断本地索引的对应分区。
• 除非指定了 UPDATE INDEXES 子句,否则必须重新构
建全局索引。
删除多个分区
Oracle University and Error : You are not a Valid Partner use only
或列表分区表中的多个分区或子分区:
– DROP PARTITION
– DROP SUBPARTITION
• 本地和全局索引操作与删除单个分区时的操作相同。
拆分成多个分区
• 将一个分区的内容重新分发到多个分区中。
• 每个新分区将获得一个新段并从当前源分区继承所有未
Oracle University and Error : You are not a Valid Partner use only
指定的物理属性。
• 指定与创建分区表的 SQL 语句相似的一系列新分区说
明,而不是使用 AT 或 VALUES 子句。
当一个分区太大而导致备份、恢复或维护操作需要很长时间才能完成,或感觉分区中的数
据过多而影响性能时,可以使用 ALTER TABLE 语句的 SPLIT PARTITION 子句将一个
分区的内容重新分发到多个分区中。
在拆分多个分区时,会保留与当前分区关联的段并创建新(空)段。每个新分区会获得新
段并从当前源分区继承所有未指定的物理属性。
可以使用扩展的拆分语法,指定与创建分区表的 SQL 语句相似的一系列新分区说明,而
不是使用 AT 或 VALUES 子句。此外,最后一个新分区说明的范围或列表值来自于源分区
的上限以及为拆分生成的前 (N-1) 个新分区指定的界限值。
第一个幻灯片示例演示将分区 p0 拆分成多个分区,即 p01、p02、p03 和 p04。
在幻灯片的第二个示例中,分区 p02 采用原始分区 p0 的上限。
拆分成多个分区的规则
• 将一个范围分区拆分成 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。
拆分成多个分区:示例
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);
合并多个范围分区
• 将两个或多个分区或子分区的内容合并到一个新的分区
或子分区中。
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;
12
20
Q1
20
12 Y ea r
Q2 20
12 20 12
Q3
• 新分区会继承最高原始分区的分区上限。
合并列表分区和系统分区
• 合并多个列表分区时,生成的分区值列表是要合并的
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
合并多个列表分区时,生成的分区值列表是要合并的所有分区的分区值列表集的并集。
将 DEFAULT 列表分区与其他列表分区合并会生成 DEFAULT 分区。
答案:a
b. 错
a. 对
测验
将一个分区的内容重新分发到多个分区。
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
• 分区索引可存在于非分区表中。
• 全局分区索引使用和表不同的分区策略。
• 本地分区索引遵循表的策略。
全局 本地
分区索引可以获得与分区表相同的管理优势和性能提升。对索引进行分区后,每个分区
是一个完整的独立索引。没有主索引来确定要使用的索引,因为分区信息本身就提供这
部分信息。用于指定索引分区的语法与用于分区表的语法非常相似。
全局索引可以在非分区表和分区表中定义,且不遵循分区表的分区键。本地索引只能在
分区表中定义。本地索引分区键与表分区键相同。只能对全局索引使用范围分区和散列
分区。
本地索引自动进行维护,即对表上的分区所做的更改会自动对本地索引重复;但是,可
能需要在分区维护操作期间使用更新索引子句维护关联的本地索引,具体视 DDL 而定。
始终会为对等数据(表)段构建一个本地索引段。因此,对于组合分区表,只有本地子
分区索引段,而逻辑分区顶级中却没有任何内容。
分区表的部分索引
• 可以对表的分区子集创建本地和全局索引,提高了索引
Oracle University and Error : You are not a Valid Partner use only
创建的灵活性。
• 此功能支持以下全局索引:为特定的表分区或子分区子
集编制索引,而排除其他分区或子分区。
• 使用默认表索引属性即可支持此功能。
• 创建或变更表时,可以为该表或其分区指定一个默认索
引属性。
索引通常会占用大量空间,因为数据库中的每个表可能都定义了许多索引。
全局索引会为所有表分区编制索引,且索引结构与表分区没有关联。在 Oracle Database
12c 之前,Oracle 不允许对分区子集编制索引而排除其他分区。在 Oracle Database 12c
之前,DBA 无法使用任何操作从全局索引中排除非活动分区。
在 Oracle Database 12c 中,全局部分索引可节省空间并提高加载和查询时的性能。
可以对表的分区子集创建本地和全局索引,提高了索引创建的灵活性。
此功能支持以下全局索引:包括特定的表分区或子分区子集或为其编制索引,而排除其他
分区或子分区。使用默认表索引属性即可支持此操作。创建或变更表时,可以为该表或其
分区指定一个默认索引属性。
对表创建部分索引
Oracle University and Error : You are not a Valid Partner use only
– 本地索引:如果为表分区打开索引功能则会创建可用的索
引分区,否则会创建不可用的索引分区
– 全局索引:仅包括已打开索引功能的分区而排除其他分区
• 如果在创建索引时未指定 FULL 或 PARTIAL,则默认
为 FULL。
在分区和子分区级别指定 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')));
创建本地或全局部分索引
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;
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) ;
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) ;
受影响的数据字典视图:概览
数据字典视图/新列 说明
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
下面是一些受影响视图的快速概览:
• 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。
• 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
异步全局索引维护
• 在维护全局索引时,使用 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 过程
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;
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 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
答案:a、e
d. NA
c. ON
b. NO
e. FULL
a. PARTIAL
值?(请选择所有适用项):
测验
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:概览
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
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
ADO 和存储
数据库中归档和期间有效性 期间历史记录
HA RMAN
内存中列存储 整个数据库内存中高速缓存
性能 12.1.0.2
自动大表高速
SQL 优化 资源管理器 索引、表
缓存
数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2 SQL
课程目标
学完本课后,应能完成以下工作:
Oracle University and Error : You are not a Valid Partner use only
• 描述 JavaScript 对象表示法 (JavaScript Object Notation,
JSON) 的用途 12.1.0.2
JSON:概览
• Web 体系结构中信息交换的主要数据格式
Oracle University and Error : You are not a Valid Partner use only
• NoSQL 存储中半结构化和非结构化无方案或动态方案
数据的格式
• 开发过程更快:
– 方案不是插入数据的先决条件。
– 与自然静态关系方案中的更改相比,无方案的数据结构
中的更改更加灵活。
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。
JSON 对象实例必须遵循定义的编码。
幻灯片中的示例显示了由 { 和 } 括号定义的一个 JSON 对象。该对象不与任何名称关联,
而是独立存在。
该对象包含九个成员。每个成员由一个键(每个对象的键是唯一的)进行标识。
每个键与一个值关联。值可以是以下几项之一:
• 其他对象
• 一个数组:由包含值的 [ 和 ] 方括号指示(例如第 9 行和第 13 行中)
• 一个标量值:标量值是文本和数字(例如,第 2 行、第 3 行、第 4 行、第 5 行中)、
布尔值(例如,第 12 行中)或 NULL(例如,第 11 行中)
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 交互
• 支持以下列类型的文本 JSON:
Oracle University and Error : You are not a Valid Partner use only
– VARCHAR2(32767) 自动字符集转换
– CLOB 自动字符集转换
– BLOB
– RAW
– NCLOB
– NVARCHAR2
• 支持 BFILE 访问文件系统中的文件
• 通过将数据库字符集设置为 AL32UTF8 避免字符集转换
创建 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 数据
• 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 对象成员的键
JSON_VALUE(po_document,'$.PONumber')
---------------------------------------------------------------
1600
使用其他运算符查询 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
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;
链接列
一个 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。这通常会加快嵌套列的速度。
为 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));
• 创建 JSON 搜索索引:
SQL> CREATE INDEX po_document_idx
ON j_purchaseorder (PO_DOCUMENT)
indextype is ctxsys.context
parameters('section group CTXSYS.JSON_SECTION_GROUP');
INDEX_NAME INDEX_TYPE
--------------------------- ----------------------------
PO_NUMBER_IDX FUNCTION-BASED NORMAL
COSTCENTER_IDX FUNCTION-BASED BITMAP
PO_DOCUMENT_IDX DOMAIN
使用索引查询
• 使用 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 |
--------------------------------------------------------------------------------------
使用 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
视图
Oracle University and Error : You are not a Valid Partner use only
• DBA_JSON_COLUMNS
• DBA_CONSTRAINTS
SEARCH_CONDITION
---------------------------------------------------------------------
"ID" IS NOT NULL
po_document IS JSON (STRICT)
小结
在本课中,您应该已经学会:
Oracle University and Error : You are not a Valid Partner use only
• 描述 JavaScript 对象表示法 (JavaScript Object Notation,
JSON) 的用途
• 将 JSON 数据存储在 Oracle RDBMS 中
• 使用 JSON 运算符查询 JSON 数据
• 为 JSON 数据编制索引
•
•
•
•
24-2:查询 JSON 数据
24-1:存储 JSON 数据
练习 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
SQL 增强功能
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
ADO 和存储
数据库中归档和期间有效性 期间历史记录
HA RMAN
内存中列存储 整个数据库内存中高速缓存
性能 12.1.0.2
自动大表高速
SQL 优化 资源管理器 索引、表
缓存
数据泵、SQL*Loader 和外部表 分区
其他
JSON 12.1.0.2
SQL
课程目标
学完本课后,应能完成以下工作:
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 行限制子句
放宽了数据类型的长度限制
Oracle University and Error : You are not a Valid Partner use only
增加到 32767 字节。
声明列长度大于 4000 字节的
声明列长度为 4000 字节或更少的
VARCHAR2 和 NVARCHAR2 列
VARCHAR2 和 NVARCHAR2 列
以及声明列长度大于 2000 字节
以及声明列长度为 2000 字节或更
的 RAW 列称为扩展字符数据类型
少的 RAW 列在行内存储。
列,它们在行外存储。
针对扩展数据类型配置数据库
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 环境中,要关闭所有实例。
• 可以创建包含扩展字符数据类型列的表:
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));
可以按幻灯片中所述创建包含扩展字符数据类型列的表。
可以使用 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
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
SecureFile
Oracle University and Error : You are not a Valid Partner use only
• 将 init.ora 参数 COMPATIBLE 设置为 12.0.0.0.0 或更高
时,DB_SECUREFILE 的默认值为 PREFERRED。
• 要更改该行为,请将该值设置为 PERMITTED。
SQL 行限制子句
使用行限制子句可以限制查询返回的行数。
Oracle University and Error : You are not a Valid Partner use only
• 使用 FETCH FIRST/NEXT 关键字指定要返回的行数。
• 使用 PERCENT 关键字指定要返回的行数的百分比。
• 使用 OFFSET 关键字指定返回的行以整个结果集的第一
行后面的某一行开头。
将数据排序且限制行输出的查询得到广泛使用,通常称为
Top-N 查询。
SQL 行限制子句:示例
Oracle University and Error : You are not a Valid Partner use only
ORDER BY employee_id
FETCH FIRST 5 ROWS ONLY ;
返回接下来 employee_id
值最小的 5 个雇员
答案:a
b. 错
a. 对
为 EXTENDED。
测验
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
可以使用哪一项限制查询返回的行数:
小结
在本课中,您应该已经学会:
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 行限制子句
•
•
练习 25:概览
Oracle University and Error : You are not a Valid Partner use only
新进程、视图、参数、程序包和权限
注
有关 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 进程协调
程序)
虚拟调度程序) (易管理性监视器) 管理器)
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) 服务器)
数据库区
ges 进程数组 gcs 影子
快速恢复区
ges 保留消息缓冲区 gcs 关联性 数据文件和临时文件
LMHB 归档
组
归档 RPnn
系统
闪回日志
还原
(全局高速缓存/ ges 入队 重做日志文件 重做日志
入队脉动监视器) 归档
重做日志
控制文件 CTWR 文件
重做日志文件
文件
(捕获处理
Worker)
(更改跟踪
闪回线程 写进程)
重做线程
Amazon S3 云
LMS0-Z
预警日志
(全局高速缓存服务)
备份集 文件
Onnn
(ASM 连接池)
说明文字:
1. 圆圈中的元素表示 Oracle 进程。如果这些元素周围是虚线(均匀虚线圈起的元素),
表示它们可以作为线程或 OS 进程运行。如果这些元素周围是实线,表示它们只能作
为 OS 进程运行。SCMN 是一个例外。使用多进程多线程体系结构时,运行多个
Oracle 进程的每个 OS 进程也运行一个称为 SCMN 的特殊线程,该线程从根本上讲
是内部监听程序线程。所有线程创建均通过该线程进行路由。
2. 黑色圆圈中的元素是 DB 12c 的新元素。
3. 圆圈中的元素有两个主要不同颜色的细微差别,这是为了区分 RAC 进程和非 RAC
进程。
4. 文件由圆柱体表示。
5. 这些文件的存储位置分成三个主要区域:快速恢复区、数据库区和自动诊断资料档案
库。使用三种不同颜色的背景矩形指定这些区域。服务器参数文件是一个例外。如果
发现某个文件类型属于两个区域,表示某些相应的文件可以在这两个区域内。
6. 在一个圆圈中的元素内,您可能会看到两个名称。这是为了指明第二个名称(较小的
文字)从属于第一个名称。
多租户体系结构:一般体系结构图示
监听程序 listener.ora
多租户容器数据库
根容器 字典对象定义(元数据)
字典 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
跟踪文件
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 备份的目录视图
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
热图和 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:激活活动跟踪和统计信息收集
热图和 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
新列
程序包
– SET_CONTEXT_LEVEL
– ENABLE_AT_VALID_TIME
• DBMS_FLASHBACK_ARCHIVE
• 应用程序表中的 ORA_ARCHIVE_STATE
安全性:审计
视图
• 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
安全性:权限分析
视图
• 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
安全性:权限分析和新增权限
程序包
• 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
安全性: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
•
程序包
HA:闪回数据归档
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
易管理性:数据库操作
程序包
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
易管理性: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
性能:内存中列存储
程序包
• 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
性能:内存中列存储
视图
• 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
新列
• 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
性能:自动大表高速缓存
性能: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
性能:资源管理器
视图
• 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
参数
• THREADED_EXECUTION=TRUE
性能:多进程多线程
•
参数更改
参数
视图
• V$TEMPUNDOSTAT
• TEMP_UNDO_ENABLED=TRUE
性能:临时还原
性能:联机操作
程序包
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);
其他:分区
新列
• 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
视图
• DBA_JSON_COLUMNS
其他:JSON
•
参数
DB_SECUREFILE=preferred
其他:SQL
程序包
• DBMS_COMPARISON
附录 C:数据比较
Oracle University and Error : You are not a Valid Partner use only
可插入数据库:其他创建方法
本附录介绍如何使用未在名为“创建容器数据库和可插入数据库”一课中详细介绍的方法
创建可插入数据库。
注:要全面了解 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
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
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
如果选择复制方法,步骤如下所示:
1. 以具有 CREATE PLUGGABLE DATABASE 权限的公用用户身份连接到根。
2. 使用前面所述的方法 1 创建将作为 ORCL 数据的容器的新 PDB2。
3. 在读/写模式下打开 PDB2。
4. 配置 Oracle GoldenGate 单向复制环境,使非 CDB ORCL 作为源数据库,PDB2 作
为目标数据库。
5. 当 PDB2 中的数据跟上非 CDB ORCL 中的数据时,故障转移到 PDB2。
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。
2. 单击“Unplug
Oracle University and Error : You are not a Valid Partner use only
(移走)”。
3. 提供 xml 文件名。
5. 单击“Apply(应用)”按钮。 7. 单击“Plug(插入)”。
Oracle University and Error : You are not a Valid Partner use only
9. 提供源 xml 文件名。
11. 单击“Apply(应用)”按钮。
方案和数据更改管理
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 文档中的以下指南:
• 《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 中执行。
12c
数据库生命周期管理包:新增功能
方案更改计划:
• 将方案更改保存到更改计划中。
Oracle University and Error : You are not a Valid Partner use only
• 将更改应用于多个目标。
数据比较:
• 跨环境比较参考数据。
• 确定测试和生产环境之间的差异。
数据库生命周期管理包用于确保企业可以管理所有更改,无论是在将数据库从开发测试环
境提升到生产环境时主动执行,还是在生产环境中发生导致问题的任何意外更改时被动执
行。Enterprise Manager 提供此功能是为了自动识别和检测这些更改,以便组织可以立即
采取措施并在无脚本和手动干预的情况下自动完成应用更正操作的过程。
数据库生命周期管理包允许您:
• 基于两个数据库之间的比较将方案更改组合到方案更改计划中,然后将这些更改计划
从一个环境传播到另一个环境
• 执行允许跨环境比较数据的数据比较,并确定测试和生产环境之间的数据差异
12c 之前版本
方案更改计划
方案更改计划
Change Management Pack 功能 数据比较
数据比较
Oracle University and Error : You are not a Valid Partner use only
自动将开发环境中的计划更改
同步到生产环境。
开发 生产
在生产环境中检测意外更改
并修复它们。
生产 生产
HR HR
Appli 分析应用程序升级 Appli
V1 V2
对定制设置的影响。
生产 生产
12c 之前版本
1. 创建字典基线:
Oracle University and Error : You are not a Valid Partner use only
– 包含特定时间捕获的一组对象的定义
– 可用于比较
2. 执行字典比较:
– 检测两个版本的对象定义之间的差异
3. 执行字典同步:
– 使目标数据库中一组对象的定义与源中的相同
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
• 基线范围规范可以包括:
- 要捕获的方案和对象类型
例如,您可以捕获所有表、索引以及方案 HR 和 SH 的视图。
- 非方案对象,例如,用户、角色、表空间以及授予用户和角色的权限
您可以指定要排除的方案和对象类型。
- 单个方案对象(通过指定每个对象的类型、方案和名称)
- init.ora 参数
Oracle University and Error : You are not a Valid Partner use only
基线是用于与其他基线或数据库进行比较的不错的参考。
开发人员如何使用基线?
一些开发人员使用同一测试数据库,并在同一应用程序中做出更改。在不同的时间点,自
动作业定期创建基线的新版本,其中包括随着时间的推移不同开发人员做出的更改。报告
的更改存储在数据库外的 Enterprise Manager 资料档案库中。它是可审计的。
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
目标数据库
将识别的更改传播到另一数据库过程的下一步是将参考数据库或基线与目标数据库进行
比较。
您将执行字典比较,字典比较可以识别开发数据库的基线与生产数据库之间、测试数据
库与生产数据库之间或者单个数据库/基线中两个方案之间数据库对象定义的差异。
比较规范由源和目标、范围以及所有者定义。范围规范描述比较中包含的数据库对象定
义的名称和类型以及包含这些对象定义的方案。
比较识别任意类型的对象之间任意属性的差异。例如,比较显示应用程序的原始基线中
的定义与当前数据库中的定义之间的差异。创建新的比较版本之后,它识别开发周期开
始时的原始定义与目前的相同定义之间的差异。
源中的方案对象与目标中相同方案的对象进行比较。例如,开发源数据中的 HR.EMP 表
与生产目标数据库中的 HR.EMP 进行比较。
将报告源数据库和目标数据库之间的所有差异:
• 在源数据库或目标数据库两者任何一个中向表添加了新列或从表中删除了列。
• 在源数据库中创建了新索引但未在目标数据库中创建,或者反之。
12c 之前版本
字典同步
将源数据库或基线与目标数据库进行比较之后的字典同步
操作分三个阶段执行:
1. 在应用之前查看并编辑验证的更改。
Oracle University and Error : You are not a Valid Partner use only
2. 生成影响报告和脚本。
生成脚本
3. 执行脚本。 脚本
表空间 TAB:
另需 50M
最后一步是字典同步,字典同步将同步两个数据库之间或者基线与数据库之间数据库对象
定义的差异。数据库同步的基本操作是在数据库中创建或修改选定的对象定义,以便与另
一数据库或基线中的对象定义相匹配。
同步分三个步骤执行:
1. 在生成脚本之前查看建议的更改列表,以便有选择地从同步中排除对象。交互同步
模式允许您在第二步中执行此操作,以检查比较结果。
2. 验证建议的更改。生成 SQL 脚本。您仍可以查看 SQL 脚本以消除某些 SQL 语句并
要求重新生成脚本。
3. 继续执行脚本。
类别 更改传播 SQL 脚本
Oracle University and Error : You are not a Valid Partner use only
智能更改验证 是 否
在应用之前预览并编辑更改 是 否
自动保存和通过版本处理更改 是 否
显示应用的更改的日志 是 是
维护更改日志的历史记录 是 否
(或者手动)
集中管理 是 否
允许在不显示数据库口令的情况下执行 是 否
设计用于跨多个数据库环境处理数据库 是 否
更改
12c
数据库生命周期管理包方案更改计划
更改计划允许用户指定对象元数据更改并将其分组和打包。
基于以下对象创建更改计划:
Oracle University and Error : You are not a Valid Partner use only
• 即席更改
• 基于比较的差异
• 开发人员工具
将更改应用于多个目标。
基于角色的工作流
• 开发人员:通过 SQL Developer 创建/存储更改计划
• DBA:复查/应用更改计划
应用程序开发人员需要自动机制来捕获开发更改以移交给 DBA,而不是来回发送脚本,
来回发送脚本非常耗时并且可能容易出错。方案更改计划为开发人员和 DBA 提供了通过
单个通用对象(即更改计划)处理应用程序方案更改的自动化方法。
此对象由开发人员创建,用于收集并存储应用程序方案更改,DBA 将复查这些更改并将
它们应用于所有目标系统。因此,这是存放更改请求的容器对象。
根据您在企业中的角色,您可以使用不同的工具来管理更改计划。
1. 开发人员使用 SQL Developer 工具创建更改计划并将更改计划存储在 Enterprise
Manager 资料档案库中。这些更改可以是即席更改,例如,新创建的表和索引、在
表中添加或删除的列、修改的过程、添加的触发器、修改的视图。DBA 还可以依靠
基于比较的更改来创建更改计划。例如,如果您比较具有一个共同表的两个数据库,
但是一个数据库中的表比另一数据库中的相同表多一列,则这项更改可以包含在更改
计划中。过去,这些更改通过脚本手动收集。Enterprise Manager 12c 数据库生命周
期管理引入了更改计划这个新对象,开发人员或 DBA 可以在其中存储所有应用程序
更改。更改计划与源数据库无关联。
Oracle University and Error : You are not a Valid Partner use only
然后,DBA 使用 Enterprise Manager 复查并编辑方案更改计划。他们验证更改后,请求
生成 SQL 脚本并在预定的时间执行以将更改应用于多个目标。
更改请求
• 更改计划包含针对一个或多个元数据对象的更改请求。
Oracle University and Error : You are not a Valid Partner use only
• 更改请求可以请求:
– 创建对象
– 删除对象
– 修改对象的一个或多个属性
• 部署更改计划以同步目标时:
– 在所部署数据库的上下文中分析更改
– 基于目标数据库中的元数据生成相关 PL/SQL 脚本
方案更改计划包含针对一个或多个元数据对象的更改请求。更改请求有三种形式:
• 创建数据库对象:它包含数据库对象的完整定义。例如,在开发数据库中创建了一个
新表,需要在目标数据库应用程序中添加此表。
• 删除数据库对象:它包含对象的类型、方案和名称,以及用于删除该对象的说明。例
如,目标数据库中无需再包含某个表或索引,因为开发人员已将其从应用程序中删除。
• 修改数据库对象:它包含与特定对象属性相关的一个或多个说明。可以采用各种形式:
- 修改属性的值:例如,将表的表空间更改为 USERS 或者将列 C1 的数据类型从
VARCHAR2(50) 更改为 VARCHAR2(100)。
- 添加或删除子对象,如表列或分区。例如,如果需要在目标数据库的表中添加或
删除一些列,则修改对象的一个或多个属性。
- 更改初始化参数的值。
可以监视某个对象,以便此对象发生任何更改时,可以向更改计划通知应用于此监视对象的
更改类型。
Oracle University and Error : You are not a Valid Partner use only
则约束条件无法添加到表中。
它确定更改是否具有不良后果。例如,如果某个表列的数据类型为 VARCHAR2(200),则
请求将数据类型更改为 VARCHAR2(100) 可能会导致脚本执行失败或者截断现有数据。
它创建执行更改请求所需的 DDL 语句。
它确定受方案更改计划部署影响的对象之间的依赖关系并对 DDL 语句进行相应的排序。
这是智能分析,用于对照目标数据库中的实际定义验证在测试数据库中所做的更改,以检
查是否可以成功应用更改。
它生成影响报告,指明何时无法执行更改请求或者可能会导致问题。DBA 可以在执行生成
的脚本之前检查影响报告与脚本。
PL/SQL 脚本根据目标数据库的元数据针对特定目标数据库生成,此步骤仍允许 DBA 在
执行脚本之前排除要对目标数据库执行的某些操作。
方案同步
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(从更改计划创建同步)”。
由于方案更改计划是新增的同步源,因此用于补充现有的更改管理字典同步组件。
方案同步操作使目标数据库中一组对象的定义与源中的定义相同,并且仍分三步执行。
同步之前的步骤仍然是将源与目标数据库进行比较,但是此源可以是数据库、基线或者更
改计划。在之前的 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 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
目标数据库
同步之前的步骤仍然是将源与目标数据库进行比较,现在源可以是更改计划。DBA 复查比
较之后发出的所有更改,并在请求生成脚本之前验证它们。
执行“Create Synchronization from a Change Plan(从更改计划创建同步)”分析之后,
将显示更改请求中的不一致。在生成脚本的过程中,仍允许您在执行脚本之前排除要对目
标数据库执行的某些操作。
12c
方案更改计划
方案更改计划
数据库生命周期管理包数据比较 数据比较
数据比较
数据比较弥补了重要不足,允许:
Oracle University and Error : You are not a Valid Partner use only
• 应用程序供应商比较种子数据
• 应用程序客户比较不同站点的配置数据
• DBA 确定应用程序升级对种子数据定制设置有何影响
数据库 A 数据库 B
DBMS_COMPARISON
Oracle University and Error : You are not a Valid Partner use only
• 比较参考数据库和候选数据库的数据
– 要求在两个数据库之间创建数据库链接
– 参考数据库和候选数据库可以是同一数据库
• 可用于不同类型的数据:
– 种子数据 - 安装时随应用程序提供
– 配置数据 - 用户设置的应用程序参数
– 主数据 - 与业务相关的数据系列(例如,客户、供应商、
产品、员工等)
– 事务处理数据 - 记录业务流程的操作
• 应用程序正常运行所需的种子数据是安装时随应用程序提供的数据。它可以随系统
提供,以用于培训或测试,或者用作用户输入数据的模板。例如,Siebel 在值列表
(LOV) 定义、视图与职责的默认映射和预定义的查询中提供了种子数据。
• 配置数据包含用户设置的应用程序参数。根据应用程序类型,配置数据可能包含科
目表、供应商的付款条件或者诊断代码列表。
• 主数据是指与业务相关的数据系列(客户、供应商、产品、员工)。这些通常是业
务资源,属于不同的主题类别。所有业务,无论属于哪种业务类型,都存储有关其
Oracle University and Error : You are not a Valid Partner use only
人员、产品、财务、信息和物理资源的数据。
• 事务处理数据记录业务流程的操作。事务处理的示例包括订单、发票或付款记录。
这种类型的数据增长较快,会在事务处理数据库中形成大量数据。
流程
Oracle University and Error : You are not a Valid Partner use only
DBMS_COMPARISON
流非常简单。
1. 在两个数据库之间或同一数据库中创建数据比较。
2. 定义需要进行数据比较的对象。
3. 提交作业以执行比较。
4. 查看结果以验证所比较对象的数据是否存在任何差异。
准则
Oracle University and Error : You are not a Valid Partner use only
高版本,候选数据库必须为 Oracle Database 10g 发行
版 1 或更高版本。
• 数据库字符集必须相同。
• 可以比较表、单表视图、实体化视图和同义词的数据。
• 索引必须唯一标识两个对象中的行。
• 无法比较某些数据类型的数据(例如,LONG、LONG
RAW、ROWID、CLOB 和 BLOB)。
– 然而,可以从比较中排除这些列。
如果表中不存在这些约束条件,则用户需要创建列满足此要求的索引。如果不满足此要求,
您将在查看结果时收到一条错误消息,例如:
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)。然而,可以从比较中排除这些列。
创建数据比较
1. 创建数据比较。
– 参考数据库
Oracle University and Error : You are not a Valid Partner use only
– 候选数据库
2. 选择对象对或者将多个对象添加到列表中。
3. 提交比较作业。
4. 查看比较结果。
从“Enterprise(企业)”菜单中选择目标数据库,然后在数据库上下文中,从“Schema
(方案)”菜单中依次单击“Change Management(更改管理)”和“Data
Comparisons(数据比较)”。
1. 创建数据比较:提供参考数据库和候选数据库的名称,它们可以是不同的数据库,也
可以是相同的数据库。参考数据库是包含参考对象的数据库。
2. 使用“Actions(操作)”菜单,通过指定参考对象和候选对象来定义对象对。如果
参考数据库与候选数据库相同,则对象来自同一数据库。在幻灯片所示的示例中,比
较在 HR 数据库的 HR.DEPARTMENTS 表与 SALES 数据库的
HR_BIS.DEPARTMENTS 表之间定义。选择参考或候选对象的一个或多个列,使两个
对象的比较内容相同。(可选)存在多个索引时选择用于比较的索引,为比较的每个
对象对指定一个 where 子句,为比较配置一个时间点。您声明用于比较的对象对或
多个对象。通过添加多个对象,可以将参考数据库中的多个对象批量包含在规范中。
您可以搜索并选择多个对象,例如参考数据库中的表和视图,然后根据需要编辑每个
项目。
3. 提交比较作业。
4. 完成比较作业之后,查看比较结果。
比较作业和结果
提交比较作业。
比较作业
Oracle University and Error : You are not a Valid Partner use only
存在差异。
存在差异
查看两者之间的行差异 仅参考行
仅候选行
不相同的行
第一个屏幕截图显示已提交的比较作业。三个比较使用不同的配置执行。
第二个屏幕截图显示其中一个已完成比较(即 My_Compare_3)的结果。数据比较尝试
比较所有表。查找“Result(结果)”列中具有 ≠ 符号的行,该符号表示参考行和候选
行数据之间存在差异。如果符号为 =,则表示选定比较列的所有行都相同。如果出于任何
原因(例如,任何相关的列缺少唯一索引)比较失败,则可以通过选择“Messages(消
息)”选项卡(显示在窗口底部,但是在此窗口中未显示)来查看错误消息。错误消息使
用红色 X 指示,而非 ≠ 符号。
您还可以通过单击“Executed Statements(已执行语句)”选项卡查看执行比较时执行
的 SQL 语句。您将看到以下详细语句,例如:
• create database link 在参考数据库与候选数据库之间创建链接
• dbms_comparison.create_comparison 创建具有比较对象列表的命名比较
• dbms_comparison.compare 执行比较
如果您想要查看两个对象之间差异的详细信息,请单击“View Row Differences(查看行
差异)”。
结果:仅参考行
• 仅参考行
• 仅候选行
•
Oracle University and Error : You are not a Valid Partner use only
不相同的行
仅参考行
存在于参考对象中
参考对象 但未存在于候选对象
中的所有行
结果:仅候选行
• 仅参考行
• 仅候选行
Oracle University and Error : You are not a Valid Partner use only
• 不相同的行
仅候选行
存在于候选对象中
但是未存在于参考
对象中的所有行
在幻灯片所示的示例中,您选择查看仅候选行,即具有仅存在于候选对象中但未存在于参
考对象中的索引列值的行。例如,DEPARTMENT_ID 为 280 的行未存在于参考对象
HR.DEPARTMENTS 中,但是存在于候选对象 HR_BIS.DEPARTMENTS 中。
结果:不相同的行
• 仅参考行
• 仅候选行
Oracle University and Error : You are not a Valid Partner use only
• 参考对象和候选对象之间不相同的行
不相同的行
同时存在于参考对象和
候选对象中但具有不同值
的所有行
在幻灯片所示的示例中,您选择查看不相同的行。这是指索引列值存在于两个对象中,但
是其他(非索引)列值存在一处或多处差异的行。在此示例中,DEPARTMENT_ID 为 240
的行同时存在于 HR.DEPARTMENTS 和 HR_BIS.DEPARTMENTS 对象中,但是
LOCATION_ID 在参考对象中为 1700,在候选对象中为 1800。
答案:d
c. 删除对象
d. 以上所有项
b. 创建缺失的对象
a. 修改对象的一个或多个属性
测验
目标数据库中的方案更改计划用于:
答案:d
b. 仅候选行
a. 仅参考行
d. 以上所有项
测验
c. 参考对象和候选对象之间不相同的行
•
•
•
•
如何使用数据比较
如何使用方案更改计划
小结
在本课中,您应该已经学会如何说明:
为什么以及何时使用新增的数据比较功能
练习
C-1:使用方案更改计划(可选演示)
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
更多信息
有关本课程中未涉及的主题的详细信息,请参考以下课程:
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
有关本课程中未涉及的主题的详细信息,请参考以下课程:
• Oracle University Oracle Database 12c 教师指导课程
• Oracle Database 12c: New Features 自定进度联机课程
• Oracle By Example 系列和演示:Oracle Database 12c
- Oracle by Example (OBE) 教程就如何针对业务问题实施各种技术解决方案提
供了实践性分步指导。除以下 OBE 教程外,也可以在 Oracle University 知识
中心获得更多产品培训。
- 演示提供了特定任务的自动演示,并解释了如何执行任务。
- 教程提供了特定产品或主题的概念解释、演示和分步指导。
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:安全性
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