use*_*118 5 oracle database-partitioning
我有下表
CREATE TABLE "METRIC_VALUE_RAW"
(
"SUBELEMENT_ID" INTEGER NOT NULL ,
"METRIC_METADATA_ID" INTEGER NOT NULL ,
"METRIC_VALUE_INT" INTEGER,
"METRIC_VALUE_FLOAT" FLOAT(126),
"TIME_STAMP" TIMESTAMP NOT NULL
) ;
Run Code Online (Sandbox Code Playgroud)
您能否分享一下我如何设计分区的想法?
这是一个如何在 Oracle 11g 上执行此操作的示例,它运行得很好。我没有在Oracle 10g上尝试过,你可以尝试一下。
这是方法,如何创建具有每日分区的表:
CREATE TABLE XXX (
partition_date DATE,
...,
...,
)
PARTITION BY RANGE (partition_date)
INTERVAL (NUMTODSINTERVAL(1, 'day'))
(
PARTITION part_01 values LESS THAN (TO_DATE('2000-01-01','YYYY-MM-DD'))
)
TABLESPACE MY_TABLESPACE
NOLOGGING;
Run Code Online (Sandbox Code Playgroud)
正如您在上面看到的,Oracle 将在 2000 年 1 月 1 日之后自动为每个不同的分区日创建单独的分区。分区日期早于该日期的记录将存储在名为“part_01”的分区中。
您可以使用以下语句监视表分区:
SELECT * FROM user_tab_partitions WHERE table_name = 'XXX';
Run Code Online (Sandbox Code Playgroud)
之后,当您想删除某些分区时,请使用以下命令:
ALTER TABLE XXX DROP PARTITION AAAAAA UPDATE GLOBAL INDEXES
Run Code Online (Sandbox Code Playgroud)
其中“AAAAAA”是分区名称。
我希望它能帮助你!
正如我所说,10g 和 11g 之间的分区自动化存在很大差异。在 10G 中,您必须在 ETL 过程中手动管理分区(我确信每个 10G DBA 都有一个他编写的实用程序包来管理分区......)。
对于步骤 1 和 2,您有多种选择
适合您的方法取决于您的需求。新添加的数据是立即查询吗?以什么方式?您会查询几个小时(或负载...)的数据吗?您是否显示聚合?您是否对数据执行DML操作(对分区的DDL操作会导致大量锁定)。
大约 3,再次 - 手动。删除旧分区。
在 11G 中,您拥有新的间隔分区功能,可以自动执行上述一些任务。
| 归档时间: |
|
| 查看次数: |
7726 次 |
| 最近记录: |