- 自动列表分区
- 多字段列表分区
- 只读分区
- 分区维护时允许过滤
- 在线转换非分区表为分区表
- 带分区的外部表
与Oracle Database 12c Release 1中引入的间隔分区方法类似,Oracle 12c Release 2中引入的新分区功能之一是自动列表分区功能,使分区表更易于管理。
基于列的不同值划分表的功能已经有一段时间了,但是Oracle数据库12.2中的新增内容是,我们可以根据列中已知和未知的值来初始化表分区。当数据加载到表中时,如果加载的分区键值与任何现有分区不对应,则数据库将自动创建新分区。
在Oracle Database 12c Release 2中,我们现在可以根据多个列的值列表分隔一个表,而不是像以前的版本那样仅仅是单个列。这被称为多字段列表分区。因此,如果我们有一个包含整个国家/地区的销售数据的非常大的表,我们可以根据州(省)以及位于同一州(省)的城市进行再分区。
另一个新功能是只读分区。不需要整个表是只读的,而只是表中的某些分区可以被设置成只读的。现在我们可以针对存储的历史数据,设置表中的旧分区是只读的,以防止对这些“旧”数据的任何DML操作。
作为DBA,我们必须经常执行的常见分区维护操作之一是移动分区 - 也许较旧的分区可以转移到低成本存储上的表空间,因为这种数据很少被访问。现在在Oracle数据库12.2中,我们可以将分区维护操作(如MOVE PARTITION,MERGE PARTITION和SPLIT PARTITION)与数据过滤相结合。例如,当我们移动一个特定分区的数据时,我们也可以过滤要移动的数据。通过使用INCLUDING ROWS关键字指定一个过滤谓词,我们可以确定执行分区维护操作时应该保留哪些数据以及可以丢弃哪些数据。
12.2中新增的最好的功能之一是,现在我们可以通过MODIFY子句的ALTER TABLE命令以及在表上执行并发DML操作,非常容易地将非分区表转换为分区表。因此,表的转换是一个在线过程,不需要停机,并且通过使用UPDATE INDEXES,我们还可以将表上的任何索引转换为本地或全局分区索引。
我们现在也可以创建一个分区外部表。一般来说,我们可以创建一个在数据库之外的数据表,对包含这个外部数据的表进行分区。如果是在处理海量的外部数据,这将是非常有益的。