Upload
lydien
View
337
Download
0
Embed Size (px)
Citation preview
<在此处插入图片>
Oracle Database 11g — 数据库应用程序开发
韩锷春
甲骨文大中华区开发者计划 高级经理
2
以下内容旨在概述产品的总体发展方向。该内容仅供
参考,不可纳入任何合同。该内容不构成提供任何材料、代码或功能的承诺,并且不应该作为制定购买决策的依据。
所描述的有关 Oracle 产品的任何特性或功能的开发、
发布和时间安排均由 Oracle 自行决定。
3
议题
数据库开发特性
数据库缓存技术
数据管理
部署
应用程序开发
工具和框架
4
SQL 关系数据库语言
• 高效
– 简单的语法:SELECT、INSERT、UPDATE、DELETE、DROP、ALTER、GRANT
– 基于集的语言 — 无需编写迭代代码
– 可使用联接轻松实现数据集关联
• 分离逻辑部分与物理部分
– 数据独立性 — 无需对物理引用进行编码
– 优化器 — 无需指定访问方法
• 功能
– 事务隔离和控制
– 行级锁定和并发性
– 多版本读取一致性
– 引用完整性
– 存储过程和触发器
5
PL/SQL Oracle 数据库存储过程语言
• 用于触发器、函数、过程、程序包、匿名块
• 强健的 4GL 语言, SQL 原生支持
• 对实现中的不同规格进行打包,以便于开发 API
• 在所有操作系统上以相同的方式运行
• 可以从 SQL 查询调用 PL/SQL 函数
• 易于学习:If then else、variables、cursor
loops……
• 原生编译
6
PL/SQL 使用 PL/SQL 程序包开发数据 API
7
PL/SQL 使用PL/SQL 层级分析器找出热点
• 查看哪些对象占用了 CPU 时间
• 层级分析器显示上下文
• 使用 DBMS_HPROF.START_PROFILING 调用
被调用者 占用时间 合计
OE_API 3,011 595,781
get_order 8,605 592,712
get_order static SQL line 12 7,159 7,159
get_order static SQL line 57 576,948 576,948
place_order 58 58
place_order static SQL line 207 0 0
8
基于版本的重新定义 联机应用程序升级
• 允许多个版本同时可用
• 以对应用程序透明的方式编译版本对象
• 可以对视图、同义词和 PL/SQL 对象进行版本操作
9
基于版本的重新定义 联机应用程序升级
在新版本中编译对象,而不影响在线用户
部署将引用新版本的新应用程序版本
当前用户不受影响,他们引用基础版本
逐步引入新应用程序版本
1
2
3
4
10
XML DB 在 Oracle 数据库中管理 XML 内容
• 在 Oracle 11g 中整合关系数据和 XML 数据的存储
• 本地存储 XML 内容
– XMLTYPE 列
– XML 表
– 用于快速访问的 XML 索引
• 卸载关系数据到 XML
• 使用 XML 标准,包括 XQuery
和 XML 模式
11
XML DB — 示例 查询 XMLType 列中的 XML 数据
select xtab.year, d.dname, xtab.actual, xtab.estimate
from WWV_DEMO_DEPT d,
XMLTable ('/Budget/History/Budget'
passing BUDGET COLUMNS
YEAR VARCHAR2(4) PATH 'Year',
ESTIMATE NUMBER(20) PATH 'Estimate',
ACTUAL NUMBER(20) PATH 'Actual') xtab
Year Department Estimate Actual
2010 Accounting 570,000 560,000
2010 Operations 255,000 265,000
2009 Accounting 540,000 555,000
2009 Operations 240,000 242,000
12
SQL 分析 业界内最完整的实施方案
• 排名函数
• 窗口聚合
函数
• LAG/LEAD 函数
• 报告聚合
函数
• 统计聚合
• 线性回归
SQL 分析
• 描述统计
• 相关性
• 交叉表
• 假设检验
• 分布拟合
统计
13
SQL 分析 — 示例 列举 Group By 列的值
select deptno,
listagg( ename, '; ' )
within group(order by ename)
as department_employees
from emp
group by deptno
DEPTNO DEPARTMENT EMPLOYEES
10 CLARK; KING; MILLER
20 ADAMS; FORD; JONES; SCOTT; SMITH
30 ALLEN; BLAKE; JAMES; MARTIN; TURNER;
WARD
14
SQL 分析 — 示例 引用前面行的值
select application,
to_char(run_date,’day’) run_date,
rows_processed,
rows_processed - lag(rows_processed, 1, 0)
over(order by rows_processed )as difference
from application_log
order by run_date
Application Run Date Rows Processed Difference
Daily Load Monday 850 0
Daily Load Tuesday 875 25
Daily Load Wednesday 860 -15
Daily Load Thursday 890 30
Daily Load Friday 900 10
15
SQL Pivot 将行旋转为列,反之亦然
• 创建聚合的交叉表格结果集
• 将多列计算为一列的筛选汇总
• 新语法 PIVOT 和 UNPIVOT
PROD QUARTER AMOUNT
Shoes Q1 2000
Shoes Q2 1000
Jeans Q1 1000
Jeans Q3 500
Jeans Q3 100
Jeans Q4 1000
PROD Q1 Q2 Q3 Q4
Shoes 2000 1000 Null Null
Jeans 1000 Null 600 1000
select * from sales
pivot
(sum(amount)
for quarter in
‘Q1’,’Q2’,’Q3’,’Q4’);
16
Oracle Database JVM 用 Java 编写数据库存储过程
• 加载数据库中的 Java 并通过 PL/SQL 提供
– 利用原生和开源 Java 功能
– 在最有用的位置运行 Java
– 提供 PL/SQL 的非原生功能
– 补充在中间层部署的 Java
• 提高数据密集型 Java 的性能
• 利用 Java 技能
• Oracle Database 11gR1 中的新增功能
– JIT 编译器
– Java Management Extensions (JMX)
17
Oracle Database JVM 用 Java 编写数据库存储过程
Create or replace public class Hello
{
static public void world()
{
System.out.println("Hello World");
return; }
}
/
create or replace procedure hello
as language java
name ‘Hello.world()’;
18
议题
数据库开发特性
数据库缓存技术
数据管理
应用程序开发
工具和框架
19
数据库缓存技术
• SQL 结果集缓存
– 缓存查询和子查询
– 由所有会话共享
– 完全的一致性和正确的语义
– 速度提高 2-100 倍
• PL/SQL 函数缓存
– 自动失效
– 由所有会话共享
– 用于确定性函数
20
SQL 结果集缓存 查询批注和 ALTER TABLE 语法
查询批注语法
表级结果集缓存
select /*+ result_cache */
ename, job
from employees where deptno in (10,30,40);
alter table employees result_cache (mode force);
21
PL/SQL 函数缓存示例
CREATE FUNCTION format_name (
p_first_name IN VARCHAR2,
p_last_name IN VARCHAR2)
RETURN VARCHAR2
RESULT_CACHE
IS
v_name VARCHAR2(4000)
BEGIN
RETURN p_first_name || ' ' || p_last_name;
END format_name;
22
数据库缓存技术
• 客户端结果缓存
– 推荐用于读取频繁的小型表
– CPU 使用率降低 85%
– 响应时间为原来的 15% 到 20%
– 通过设置 init.ora 参数
调用
• 数据库智能缓存
– 扩展 SGA 缓冲区缓存
– 智能数据库缓存
– 仅适用于 Solaris 和 Oracle
Enterprise Linux
23
TimesTen In-Memory Database Cache 用于实时应用的内存中 RDBMS
• 快速、一致的低延迟响应
– 标准 SQL 和 PL/SQL
– 缓存读/写子集;表、行、列
• 自动与 Oracle 数据库同步
• 内置的高可用性 (HA) 和数据持久性
• 横向扩展缓存网格
应用:金融/电信服务、Web 门户、CRM
24
TimesTen In-Memory Database Cache 灵活的缓存组配置
使用事务支持实现完全关系访问。
CREATE Asynchronous
Writethrough Cache Group
custCache FROM customer (
cust_id
(number(10,0), ..
) , acct ( acct_id, ..,
foreign key (cust_id)
, orders (..);
25
议题
数据库开发特性
数据库缓存技术
数据管理
应用程序开发
工具和框架
26
Advanced Compression 选件 显著减少数据量
• OLTP 和 DW 解决方案均可从中受益
• 对应用程序透明并且对所有数据类型有效
• EBS 查询的运行速度提高 250%
• DML 操作速度减慢 3%
无压缩 OLTP 数据仓储 存档
27
Advanced Compression 语法示例
CREATE TABLE employees(
emplyee_id NUMBER,
first_name VARCHAR2(50),
last_name VARCHAR2(50)
) COMPRESS FOR OLTP;
28
Oracle SecureFiles 高性能大型对象存储
• 显著改进性能
– 性能相当于或高于文件系统
• 压缩
• 重复数据删除
• 加密
• 与现有 Oracle BLOB/CLOB 语法兼容
• 压缩和重复数据删除功能需要 Advanced
Compression 选件
29
Oracle SecureFiles 压缩和重复数据删除
CREATE TABLE images (
image_id NUMBER,
image BLOB)
LOB(image)
STORE AS SECUREFILE ( TABLESPACE lob_tbs COMPRESS);
30
Oracle 分区 透明地提高性能和可管理性
• 使用分区消除功能提高查询的性能
• 更易于备份和恢复分区数据
• 对使用较少的分区采用成本较低的存储
按列
分区
组合
分区
大型表
31
Oracle 分区 结合压缩和分区
• 最大限度地提高使用频率较高的数据的性能
• 提高压缩率,并对使用频率较低的分区采用成本较低的存储
32
闪回 闪回、闪回数据归档
• 闪回:查询、表、表空间、事务、数据库
• 基于重做保留的可用闪回
• 闪回数据存档提供了无限的闪回,需要 Total Recall 选件
33
闪回示例 闪回查询某个时间点
select *
from employees
as of timestamp
to_timestamp('2003-04-04 09:30:00',
'yyyy-mm-dd hh:mi:ss')
where name = :b1;
34
议题
数据库开发特性
数据库缓存技术
数据管理
应用程序开发
工具和框架
35
Oracle 支持所有流行
的应用开发框架
36
Oracle SQL Developer Oracle 数据库的免费 IDE
• 轻型的图形化用户界面
– 提高数据库开发产能
– 浏览、创建、编辑、调试和制作报表
– 集成的迁移功能
• 易于安装
– 下载并解压缩
– 使用 JDBC 瘦型驱动程序 => 无需 Oracle 主目录
• 免费、可扩展并且受到完全支持
– 150 万用户
– Oracle 数据库支持的特性
37
Oracle SQL Developer Oracle 数据库的免费 IDE
数据库开发 数据库数据建模
PL/SQL 单元测试 数据库迁移 从第三方数据库
38
Java 世界上最受欢迎的编程平台
39
Oracle 和 Java
• Oracle 领导 Java 社区
• Oracle 普遍使用 Java
– 应用程序
– 中间件
– 数据库
– 开发工具
40
Java 开发工具 为 Java 开发社区提供了三种工具
• Eclipse
– 基于核心 Eclipse 的认证插件
– 专注于 Java 编码
– EJB/JPA、Spring、WebServices、WebLogic
• NetBeans
– Java FX 开发人员使用的 IDE
– 支持 Java EE 6.0、Java FX 和 Java ME
– 面向社区
• Oracle Jdeveloper 11gR1
– 融合中间件开发人员使用的 IDE
– Oracle ADF 的开发平台
– 可视化、声明式、WYSIWYG
41
JDBC 和 UCP 高效、可伸缩且可靠的 Java 持久性
• 通过 Oracle JDBC 11g 实现高效 Java 持久性
– JDBC 4.0、IPV6
– JDBC-Thin 中内置了 Advanced Security
– 支持查询更改通知
– 结果缓存 (JDBC-OCI):速度提高 5-8 倍
– 原生 AQ 接口:速度提高 40-300%
– LOB PreFetch,无需复制 SecureFiles LOB
• 通过通用连接池实现可伸缩、
• 可靠的 Java 持久性
– 快速连接故障切换(RAC、Data Guard)
– 运行时连接负载平衡
– Web 会话亲和性
– 事务亲和性
42
Oracle Application Express (APEX)
• 以数据库为中心的 Web 应用程序开发工具
• Oracle 数据库的免费选件
– 随数据库 10gR2、11gR1、11gR2 和 XE
– OTN 上提供最新版本
43
Oracle Application Express (APEX)
基于浏览器的快速开发 利用 SQL 技能
在数据库内运行 自助式供应
44
Oracle 对 .NET 的支持
• 全面支持 .NET 和 Visual Studio
– 相同的 API,相同的工具
– 易于学习,易于迁移
– 免费提供
• 全面支持 Oracle 数据库
– 可运行 Oracle 数据库的所有版本
– Real Application Clusters (RAC)
– Data Guard、数据类型……
– 可在任何地方运行 Oracle 数据库
• Linux
• Unix(Sun、IBM、HP)
• Microsoft Windows
45
Oracle 对 .NET 的支持
46
Oracle 的开源语言驱动程序
• 使用 Oracle 数据库构建
• 敏捷的 Web 应用程序
• 通过数据库驻留连接池 (DRCP) 获得连接可伸缩性
• PHP OCI8
– 在 php.net, PECL、Zend Server、Unbreakable Linux Network 以及
http://oss.oracle.com/projects/php 上提供
• Ruby OCI8
– http://ruby-oci8.rubyforge.org/en/
• Python Cx-Oracle
– http://cx-oracle.sourceforge.net
• Perl DBD::Oracle
– http://search.cpan.org/~pythian/DBD-
Oracle-1.23/Oracle.pm
47
Oracle Database 11g 挖掘 Oracle 数据库的全部潜能
48
49