Oracle表分区比较全

2024年 3月 8日 21.7k 0

12.1 Release
Asynchronous Global Index Maintenance for DROP and TRUNCATE Partition

drop及truncate分区时支持异步全局索引维护

之前drop或truncate分区时,会使全局索引不可用,update indexes和update global indexes虽然可以维护索引的可用性,但是索引的维护是立刻发生的,业务高峰时刻会影响性能。

12.1支持全局索引维护与DROP和TRUNCATE分区维护操作分离,而不会使全局索引不可用。索引维护是异步完成的,可以延迟到稍后的时间点。在不影响索引可用性的情况下,将全局索引维护延迟到非高峰时间,在分区维护操作的时间点上降低和截断分区和子分区维护操作的速度更快,资源更少。当与更新索引子句相结合时,DROP分区和TRUNCATE分区命令将导致元数据索引维护。

此功能仅用于堆表,不支持对象类型、域索引或由SYS拥有的表。

实际的索引维护是在稍后的时间执行的,由以下之一触发:

SYS.PMO_DEFERRED_GIDX_MAINT_JOB作业预定在每天02:00运行。

SYS.PMO_DEFERRED_GIDX_MAINT_JOB作业手动运行

DBMS_SCHEDULER.RUN_JOB存储过程。

运行DBMS_PART.CLEANUP_GIDX存储过程。

运行ALTER INDEX REBUILD [PARTITION]]命令。

运行ALTER INDEX [PARTITION] COALESCE CLEANUP命令。

Oracle 12c 新特性 ---异步全局索引维护,用于删除和截断分区 -- cnDBA.cn_中国DBA社区

oracle12c新特性之异步全局索引维护_ITPUB博客

ONLINE Move Partition
在线move分区

ALTER TABLE ... MOVE PARTITION 可以在线进行,不影响dml操作,全局索引会在move分区时进行,因此无需再手动进行index rebuild

ONLINE操作的限制:
(1)不支持sys用户下表及索引组织表(IOT)
(2)该功能对物化视图不可用
(3)不支持包含对象类型或bitmap join indexes以及domain indexes的表
(4)12.1.0.1中当启用database-level supplemental logging 时不支持online维护,12.1.0.2开始解除了该限制
(5)并行DML及直接路径插入操作需要对表加X锁,无法与move online操作同时进行

Cascade Functionality for TRUNCATE and EXCHANGE Partition

支持级联TRUNCATE和EXCHANGE分区

TRUNCATE和EXCHANGE分区操作为引用分区表提供级联功能,使分区维护操作的继承从父表继承到子表。大大简化了应用程序开发,并提供了逻辑数据一致性的原子执行。

Oracle 12c 新特性 --- 级联截断和交换分区_Leo-2016的博客-CSDN博客_级联截断

Partial Indexes for Partitioned Tables
分区表部分索引

Local和Global indexes可以在部分分区上创建,这个特性通过表上的indexing属性来控制。注意,部分索引不能作为全局唯一索引。

https://www.cnblogs.com/andy6/p/6857209.html

Partition Maintenance Operations on Multiple Partitions
多分区维护操作

add/truncate/drop/split/merge分区操作允许在一个操作中一次操作多个分区

ALTER TABLE t1 MERGE PARTITIONS part_2015, part_2016, part_2017, part_2018 INTO PARTITION part_2018;
https://blog.csdn.net/leo__1990/article/details/90051056

Interval Reference Partitioning

间隔引用分区

11g引入间隔分区,自动新建范围分区,例如partition by range(MSGTIME) interval (86400000)

间隔引用分区特性允许引用分区表将间隔分区作为顶级分区策略,这提供了更好的分区建模。间隔分区表可以用作引用分区的父表。在插入到引用分区表时, 创建引用分区表中与父表中的间隔分区相对应的分区。

当在子表中创建间隔分区时,分区名是从相关的父表片段继承而来的。如果子表具有表级的默认表空间,那么它就被用作新的间隔分区的表空间;否则,表空间是从父表片段继承的。

https://www.cndba.cn/leo1990/article/2069

12.2 Release
Online Conversion of a Nonpartitioned Table to a Partitioned Table
在线将非分区表转为分区表

支持在线将非分区表转为分区表,索引维护会在操作时自动进行,并且会转为分区索引(转换后索引状态正常,无需rebuild)。

12.2之前,想把一个非分区表转为分区表常用的方法如下:

建好分区表然后insert into select 把数据插入到分区表中

使用在线重定义(DBMS_REDEFINITION)的方法。

它们的缺点是:第一种方法,如果对表有频繁的DML操作,尤其是update操作,就需要停业务来做转换。第二种方法可以在线进行操作,不需要停业务,但操作步骤比较复杂,且可能出错。

Oracle12cR2版本中提供了一种新特性,一条语句就可以把非分区表转换为分区表,语法如下:

ALTER TABLE table_name MODIFY table_partitioning_clauses
[ filter_condition ] [ ONLINE ] [ UPDATE INDEXES [ ( index { local_partitioned_index | global_partitioned_index | GLOBAL } [, index { local_partitioned_index | global_partitioned_index | GLOBAL } ]... ) ] ]
Oracle 12c 新特性 --- 将非分区表在线转换到分区表_Leo-2016的博客-CSDN博客_oracle 转 hash分区 在线转
Oracle 12.2新特性----在线把非分区表转为分区表_51CTO博客_Oracle 分区表

Changing a Nonpartitioned Table into a Partitioned Table

Online SPLIT Partition and Subpartition

在线拆分分区和子分区

默认情况下,如果拆分的分区中有数据,那么以下表中的索引会被标记为UNUSEABLE:

Regular (Heap)表:
除非在合并分区时指定UPDATE INDEXES,否则:
a) Oracle会将相应分区的本地索引标记为UNUSEABLE
b) 全局索引或所有分区的分区全局索引也会被标记为UNUSEABLE,并且必须重建。
索引组织表
a) 相应分区的本地索引标记为UNUSEABLE
b) 所有全局索引仍可用
ALTER TABLE vet_cats SPLIT PARTITION fee_katy at (100) INTO ( PARTITION fee_katy1, PARTITION fee_katy2);
ALTER INDEX JAF1 REBUILD PARTITION fee_katy1;
ALTER INDEX JAF1 REBUILD PARTITION fee_katy2;

Partitioning: Auto-List Partitioning

自动list分区

实现了list分区的自动化管理,类似11g版本开始支持的Interval Partitioning

没有default分区,必须至少指定一个分区

系统自动增加的分区会自动命名

list分区到Auto-List可以转换,前提是List分区表定义上没有DEFAULT分区

CREATE TABLE enmotech (
PartID integer not null,
CretTm date not null,
PartCD varchar2(2) not null) partition by list (partcd) automatic (
partition pBJ values ('BJ'),
partition pCD values ('CD'),
partition pGZ values ('GZ'),
partition pSH values ('SH'));
https://www.eygle.com/archives/2016/12/oracle_122_autolist_partitioning.html

Interval Subpartioning

间隔子分区

从11g中开始支持的Interval Partitioning技术不支持子分区,从12.2开始支持。
Interval Subpartioning和Interval Partitioning的使用条件及要求是一样的,如:没有MAXVALUE,没有Add Partition
间隔子分区在表级设置
每个表最大100万个[sub]partitions(从一个分区有100万个子分区到100万个分区每个分区一个子分区)

Partitioned External Tables
外部表支持分区

分区的外部表和存储在数据库中的分区表类似,但外部表分区可以存储在文件系统上,如Hive storage或HDFS。所有对外部表的限制和对分区表的限制在分区的外部表上都有。Oracle 数据库不能保证分区的外部文件包含满足分区定义的数据。

CREATE TABLE sales (loc_id number, prod_id number, cust_id number, amount_sold number, quantity_sold number)
ORGANIZATION EXTERNAL
(TYPE oracle_loader
DEFAULT DIRECTORY load_d1
ACCESS PARAMETERS
( RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
NOBADFILE
LOGFILE log_dir:'sales.log'
FIELDS TERMINATED BY ","
)
)
REJECT LIMIT UNLIMITED
PARTITION BY RANGE (loc_id)
(PARTITION p1 VALUES LESS THAN (1000) LOCATION ('california.txt'),
PARTITION p2 VALUES LESS THAN (2000) DEFAULT DIRECTORY load_d2 LOCATION ('washington.txt'),
PARTITION p3 VALUES LESS THAN (3000))

https://www.enmotech.com/web/detail/1/393/1.html

Partitioning: Filtered Partition Maintenance Operations

过滤分区维护操作

该特性允许我们在维护(Move/merge/split)分区表的时候进行数据过滤

对表进行分区,同时删除id大于50的数据(Instance-->PDB->Tablespace ->Table/MV/外部表->Partition->subpartition等各个级别的只读设置,配合对象只读权限(read)、系统只读权限(read any table)及Schema Only Accounts等特性,可以满足各个层次的数据保护需求。

18c

18.1.0

Enhanced Parallel Partition-wise Operations

参见这里

· Partition-Wise Operations

· Partition-Wise Joins in a Data Warehouse

相关知识:Partition-Wise Operations – New Features in 12c and 18c

Modifying the Partitioning Strategy 参见这里的文档说明。

Online Merging of Partitions and Subpartitions

这是18c(18.1.0)中针对分区技术的一个很酷的改进,在不影响业务的情况下,可以在线合并分区或子分区。参见这里的文档说明。

19c

19.2

Hybrid partitioned tables--混合分区表

参考

https://en.enmotech.com/web/detail/1/659/1.html

Oracle Database Features

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论