【发布时间】:2015-02-20 13:17:51
【问题描述】:
我有一个 Oracle SQL 问题。
我需要在特定 ID 上对现有表(填充数据)进行分区。我做了一些研究,但我不知道如何。 当我从已创建的分区表(在 toad 中)生成脚本时,我得到以下输出:
PARTITION BY LIST (ID)
(
PARTITION SAMPLE_TABLE_6226563032 VALUES (6226563032)
LOGGING
NOCOMPRESS
TABLESPACE samplespace
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
),
PARTITION SAMPLE_TABLE_6164428638 VALUES (6164428638)
LOGGING
NOCOMPRESS
TABLESPACE samplespace
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
),
PARTITION SAMPLE_TABLE_6164428803 VALUES (6164428803)
LOGGING
NOCOMPRESS
TABLESPACE samplespace
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
您可以看到每个 ID 都有一个分区,这个分区用于 100 多个 IDS/记录。
有人知道解决方案吗?
提前致谢。
EDIT1(在此处添加答案以提高可读性):
感谢您的回答,温弗里德! 在我们说话的时候研究它。 但我也在寻找分区语句。因为它必须是一个列表,但在所有示例中,当他们进行列表分区时,他们会添加硬编码值。像这样:
PARTITION BY LIST (LOC_CODE)
(
PARTITION GRABB VALUES ('IND'),
PARTITION CNILX VALUES ('NZ'),
PARTITION NOAAS VALUES ('SL'),
PARTITION SGIND VALUES ('RSA'),
PARTITION SAARA VALUES ('PAK'),
PARTITION MYABB VALUES ('USA')
)
虽然它实际上必须是动态的(对于每个 ID)。
编辑2: 我这样做了:
partition by range (id)
interval (1)
(PARTITION "P0" VALUES LESS THAN (1))
TABLESPACE "TABLESPAXE"
;
但是当我想插入一些数据时
insert into partitioned_table select * from original_table where id=123456 ;
抛出异常:
"ORA-14300: partitioning key maps to a partition outside maximum permitted number of partitions"
所以我猜 12C 数据库不会在插入时自动创建分区?还是我错了?
【问题讨论】:
-
在单个表上创建 100 多个分区是否有特定原因?它一定是一张非常大的桌子。
-
这个数据库的目标公司需要它
标签: sql oracle plsql toad database-partitioning