我有下表
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
) ;
您能否分享一下我如何设计分区的想法。
答案 0 :(得分:2)
正如我所说,10g和11g之间的分区自动化存在很大差异。 在10G中,您必须在ETL过程中手动管理分区(我确信每个10g DBA都有一个他编写的实用程序包来管理分区......)。
对于步骤1& 2,你有几个选择
适合您的方式取决于您的需求。是否立即查询新添加的数据?以什么方式?你会在几个小时(或负载......)中查询数据吗?你在展示聚合吗?您是否对数据执行DML操作(分区上的DDL操作会导致大量锁定)。
大约3,再次 - 手动。丢弃旧分区。
在11G中,您具有新的间隔分区功能,可自动执行上述某些任务。
答案 1 :(得分:2)
这是一个如何在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;
如上所述,Oracle将在2000年1月1日之后自动为每个不同的partition_day创建单独的分区。其partition_date早于此日期的记录将存储在名为' part_01'的分区中。 / p>
您可以使用以下语句监视表分区:
SELECT * FROM user_tab_partitions WHERE table_name = 'XXX';
之后,如果要删除某些分区,请使用以下命令:
ALTER TABLE XXX DROP PARTITION AAAAAA UPDATE GLOBAL INDEXES
AAAAAA'是分区名称。
我希望它会对你有所帮助!
答案 2 :(得分:0)
以下是创建表sql到parititon数据的示例:
CREATE TABLE quarterly_report_status (
report_id INT NOT NULL,
report_status VARCHAR(20) NOT NULL,
report_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
PARTITION BY RANGE ( UNIX_TIMESTAMP(report_updated) ) (
PARTITION p0 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-01 00:00:00') ),
PARTITION p1 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-02 00:00:00') ),
PARTITION p2 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-03 00:00:00') ),
PARTITION p3 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-04 00:00:00') ),
PARTITION p4 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-05 00:00:00') ),
PARTITION p5 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-06 00:00:00') ),
PARTITION p6 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-07 00:00:00') ),
PARTITION p7 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-08 00:00:00') ),
PARTITION p8 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-09 00:00:00') ),
PARTITION p9 VALUES LESS THAN (MAXVALUE)
);
分区将由DBa创建,其余部分将由oracle负责。 如果要删除分区,则必须为其编写单独的作业。