在 Oracle 数据库 11g 中操作分区
在 Oracle 数据库 11g 中操作分区
本教程演示了如何在 Oracle 数据库 11g 中使用各种分区技术。
大约 50 分钟
本教程包括下列主题:
将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。
(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。
在 Oracle 数据库 11g 中,可以使用多种新技术对表数据进行分区,以提高数据的检索性能、优化数据组织。这些技术包括:
| 引用 |
通过从父表继承分区键(而非复制键列),允许在逻辑上均分具有父-子关系的表 |
| 间隔 |
自动创建范围分区 |
| 扩展的组合 |
允许沿两个维进行逻辑范围分区 |
| 虚拟列 |
允许在表的虚拟列上定义分区键列 |
返回主题列表
开始本教程之前,您应该:
| 1. |
安装 Oracle 数据库 11g。
|
| 2. |
将 partition.zip 文件下载并解压缩到您的工作目录中。
|
| 3. |
打开一个终端窗口,执行以下命令:
sqlplus / as sysdba
@setup

|
返回主题列表
引用分区通过从父表继承分区键(而非复制键列),使得具有父-子关系的表能够在逻辑上均分。分区键通过现有的父-子关系解析,由现行的主键或外键约束实施。逻辑相关性还可以自动级联分区维护操作,从而使应用程序开发更轻松且更不易出错。
执行以下步骤,进一步了解引用分区的用法:
返回主题列表
间隔分区可以完全自动化范围分区的创建。管理新分区的创建是一项繁琐的高重复性任务。对于可预测的小范围分区添加(例如,添加每日的新分区)尤其如此。间隔分区可以通过按需创建分区来自动化该操作。
执行以下步骤,了解间隔分区的用法:
| 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 |
在下订单之后的那个日历月交付的订单(但不是 early 订单) |
| LATE |
从下订单之后的第二个日历月才开始交付的订单 |
执行以下步骤,创建按范围-范围组合分区的表以满足业务需求:
| 1. |
执行 create_shipments.sql 脚本,将 SHIPMENTS 表创建为按范围-范围组合分区的表(按 ORDER_DATE 和 SHIPDATE 分区)。
@create_shipments

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

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

|
返回主题列表
您可以使用虚拟列分区对在表的虚拟列上定义的键列进行分区。
虚拟列通过求解表达式来定义。
虚拟列可以在创建或修改表时定义。通常,从逻辑上对对象进行分区的业务需求并不是以一对一的方式与现有列匹配。Oracle 分区功能已经得到增强,它允许在虚拟列上定义分区策略,因此可以实现更全面的业务需求匹配。
本例中的员工分类如下:
| Poor |
薪酬总额(薪水 + 奖金)低于 1000 |
| Not doing too bad |
薪酬在 1000 到 3000 之间 |
| On target |
薪酬为 3000 |
| Filthy rich |
薪酬 > 3000 |
执行以下步骤,了解基于虚拟列的分区的用法:
| 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

|
返回主题列表
在本教程中,您学习了如何:
 |
使用引用分区 |
 |
使用间隔分区 |
 |
使用扩展的组合分区 |
 |
使用虚拟列分区 |
返回主题列表
将鼠标置于该图标上可以隐藏所有的屏幕截图。
|