Oracle Technology Network (OTN) > Downloads, Discussions, and Documentation for Developers and DBAs
 在 Oracle 数据库 11g 中操作分区

在 Oracle 数据库 11g 中操作分区

本教程演示了如何在 Oracle 数据库 11g 中使用各种分区技术。

大约 50 分钟

主题

本教程包括下列主题:

将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。 (警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。

概述

在 Oracle 数据库 11g 中,可以使用多种新技术对表数据进行分区,以提高数据的检索性能、优化数据组织。这些技术包括:

引用
间隔
扩展的组合
虚拟列

返回主题列表

开始本教程之前,您应该:

1.

安装 Oracle 数据库 11g

2.

partition.zip 文件下载并解压缩到您的工作目录中。

3.

打开一个终端窗口,执行以下命令:

sqlplus / as sysdba
@setup


返回主题列表

使用引用分区

引用分区通过从父表继承分区键(而非复制键列),使得具有父-子关系的表能够在逻辑上均分。分区键通过现有的父-子关系解析,由现行的主键或外键约束实施。逻辑相关性还可以自动级联分区维护操作,从而使应用程序开发更轻松且更不易出错。

执行以下步骤,进一步了解引用分区的用法:

1.

打开一个终端窗口,以 SH 用户身份登录 SQL*Plus。执行 create_orders.sql 脚本,创建按范围分区的 ORDERS 表。

@create_orders

2.

执行 create_order_items.sql 脚本,创建按引用分区的 ORDER_ITEMS 表。

@create_order_items

3.

执行 query_dict_1.sql 脚本,查看按引用分区的 ORDER_ITEMS 表的相关信息。

@query_dict_1

4.

执行 insert_orders.sql 脚本,将数据插入 ORDERS 表。

@insert_orders

5.

执行 show_data_placement.sql 脚本,观察如何将数据置于分区中的同一位置。

@show_data_placement

6.

要显示智能化分区连接,请将 _parallel_broadcast_enabled 参数设为 FALSE。执行以下命令:

ALTER SESSION SET "_parallel_broadcast_enabled"=FALSE;

7.

执行 show_plan.sql 脚本,查看有关智能化分区连接的信息。

@show_plan

8.

执行 drop_partition.sql 脚本,从 ORDERS 表中删除 p_before_jan_2006 分区。

@drop_partition

9.

执行 query_dict_2.sql 脚本,查看有关表的信息。

@query_dict_2

10.

执行 add_partition.sql 脚本,添加 p2007_01 分区。

@add_partition

11.

执行 cleanup_1.sql 脚本,删除本例中创建的分区和表空间。

@cleanup_1

返回主题列表

间隔分区可以完全自动化范围分区的创建。管理新分区的创建是一项繁琐的高重复性任务。对于可预测的小范围分区添加(例如,添加每日的新分区)尤其如此。间隔分区可以通过按需创建分区来自动化该操作。

执行以下步骤,了解间隔分区的用法:

1.

执行 create_newsales.sql 脚本,创建按间隔分区的 NEWSALES 表。

@create_newsales

2.

执行 query_dict_3.sql 脚本,查询 USER_TAB_PARTITIONSNEWSALES 字典视图,以了解有关 NEWSALES 表的信息。

@query_dict_3

3.

执行 insert_newsales.sql 脚本,将新数据插入 NEWSALES 表,以创建新分区(段)。

@insert_newsales

4.

执行 query_dict_4.sql 脚本,查看有关新分区的信息。

@query_dict_4

5.

执行 merge_partition.sql 脚本,合并两个分区。

@merge_partition

6.

执行 query_dict_5.sql 脚本,查看有关合并分区的信息。

@query_dict_5

7.

执行 create_hist_newsales.sql 脚本,创建一个按范围分区的表。

@create_hist_newsales

8.

执行 query_dict_6.sql 脚本,查看有关合并分区的信息。

@query_dict_6

9.

执行 insert_histnewsales_row_1.sql 脚本,在 HISTORICAL_NEWSALES 表中插入一行。插入操作将失败,因为分区表目前还不是一个按间隔分区的表。

@insert_histnewsales_row_1

10.

执行 alter_hist_newsales.sql 脚本,将分区表更改为按间隔分区的表。

@alter_hist_newsales

11.

执行 insert_histnewsales_row_2.sql 脚本,再次尝试在该表中插入一行。

@insert_histnewsales_row_2

12.

执行 query_dict_7.sql 脚本,查看有关分区的信息。

@query_dict_7

返回主题列表

使用扩展的组合分区

组合的范围-范围分区允许沿两个维进行逻辑范围分区;例如,按 ORDER_DATE 分区,并按 SHIPPING_DATE 划分范围子分区。组合的范围-范围分区提供了一个附加的建模策略,可以将业务需求映射到对象分区。

在本例中,与客户签订的服务级协议表明,订单将在下订单之后的那个日历月交付。确定的订单类型包括:

EARLY
AGREED
LATE

执行以下步骤,创建按范围-范围组合分区的表以满足业务需求:

1.

执行 create_shipments.sql 脚本,将 SHIPMENTS 表创建为按范围-范围组合分区的表(按 ORDER_DATESHIPDATE 分区)。

@create_shipments

2.

使用 insert_shipments.sql 脚本在 SHIPMENTS 表中插入多个行。

@insert_shipments

3.

执行 count_shipments.sql 脚本,查看数据在 SHIPMENTS 表中的分布方式。

@count_shipments

返回主题列表

使用基于虚拟列的分区

您可以使用虚拟列分区对在表的虚拟列上定义的键列进行分区。 虚拟列通过求解表达式来定义。 虚拟列可以在创建或修改表时定义。通常,从逻辑上对对象进行分区的业务需求并不是以一对一的方式与现有列匹配。Oracle 分区功能已经得到增强,它允许在虚拟列上定义分区策略,因此可以实现更全面的业务需求匹配。

本例中的员工分类如下:

Poor
Not doing too bad
On target
Filthy rich

执行以下步骤,了解基于虚拟列的分区的用法:

1.

执行 create_employees.sql 脚本,创建包含虚拟列的 EMPLOYEES 表。

@create_employees

2.

执行 insert_employees.sql 脚本,在 EMPLOYEES 表中插入多个行。

@insert_employees

3.

执行 select_employees.sql 脚本,查询 EMPLOYEES 表。

@select_employees

4.

执行 create_prod_return.sql 脚本,创建包含虚拟列的 PRODUCT_RETURNS 表,虚拟列用于对表进行分区。

@create_prod_return

5.

执行 insert_prod_ret.sql 脚本,在 PRODUCT_RETURNS 表中插入多个行。

@insert_prod_ret

6.

执行 select_prod_return.sql 脚本,查询 PRODUCT_RETURNS 表。

@select_prod_return

7.

执行 xplan_prod_ret.sql 脚本,为使用定义虚拟列的表达式的查询显示分区修剪。

@xplan_prod_ret

返回主题列表

在本教程中,您学习了如何:

使用引用分区
使用间隔分区
使用扩展的组合分区
使用虚拟列分区

返回主题列表

将鼠标置于该图标上可以隐藏所有的屏幕截图。

E-mail this page
Printer View Printer View