1

我有一个包含大量信息的日志表。我想把它分成两部分:第一部分是过去一个月的日志,因为它们是经常查看的。第二部分是今年剩余时间的日志(压缩)。

我的问题是“直到 2013 年 1 月 1 日”、“比 2013 年 1 月 1 日更新”的所有分区示例 - 即具有固定日期......

我正在寻找/期望的是一种在上个月定义分区的方法,这样当日期发生变化时,30 天前的日志会“自动”传输到压缩分区。

我想我可以创建另一个完全压缩的表并使用 JOBS 移动信息,但我希望有一个内置的解决方案。

谢谢你。

4

2 回答 2

4

我认为您想要基于日期的间隔分区。这将自动为您生成分区。例如,每月分区将是:

create table test_data (
   created_date      DATE default sysdate not null,
   store_id          NUMBER,
   inventory_id      NUMBER,
   qty_sold          NUMBER
)
PARTITION BY RANGE (created_date)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
   PARTITION part_01 values LESS THAN (TO_DATE('20130101','YYYYMMDD'))
)

插入数据时,Oracle 将放入适当的分区或在需要时创建一个。分区名称会有点神秘(SYS_xxxx),但您可以使用“partition for”子句仅获取您想要的月份。例如:

select * from test_data partition for (to_date('20130101', 'YYYYMMDD'))
于 2013-10-19T15:03:41.637 回答
0

无法自动将数据传输到压缩分区。但是,您可以使用以下语句在每个月初安排一个简单的作业来压缩上个月的分区:

ALTER TABLE some_table
MOVE PARTITION FOR (add_months(trunc(SYSDATE), -1)
COMPRESS;

如果您只想保留两个分区:当前月份和所有过去交易的存档,您还可以使用 ALTER TABLE MERGE PARTITIONS 合并分区,但就我而言,它会重建整个存档分区,所以我不鼓励这样做所以并继续将每个月存储在其单独的分区中。

于 2013-10-19T21:36:37.900 回答