当前位置:文档之家› 在 Oracle 数据库 11g 中操作分区

在 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
@query_dict_5
7.
执行create_hist_newsales.sql脚本,创建一个按范围分区的表。

@create_hist_newsales
@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
返回主题列表
返回主题列表
使用基于虚拟列的分区
您可以使用虚拟列分区对在表的虚拟列上定义的键列进行分区。

虚拟列通过求解表达式来定义。

虚拟列可以在创建或修改表时定义。

通常,从逻辑上对对象进行分区的业务需求并不是以一对一的方式与现有列匹配。

Oracle 分区功能已经得到增强,它允许在虚拟列上定义分区策略,因此可以实现更全面的业务需求匹配。

本例中的员工分类如下:
执行以下步骤,了解基于虚拟列的分区的用法:
1.
执行create_employees.sql脚本,创建包含虚拟列的EMPLOYEES表。

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

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

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

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

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

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

@xplan_prod_ret
返回主题列表总结
在本教程中,您学习了如何:
使用引用分区
使用间隔分区
使用虚拟列分区。

相关主题