我有一个Oracle SQL问题。
我需要在特定ID上对现有表(填充数据)进行分区。我做了一些研究,但我不知道如何。 当我从已经创建的分区表(In 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(为了便于阅读,在此添加了答案):
谢谢你的回答,Wernfried! 在我们说话时调查它。 但我也在搜索分区语句。因为它必须是一个列表,但在所有示例中,当它们执行列表分区时,它们会添加硬编码值。像这样:
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)。
EDIT2: 我这样做了:
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数据库不会在插入时自动创建分区?或者我错了?
答案 0 :(得分:1)
查看Oracle PL / SQL包DBMS_REDEFINITION,您可以在那里重新定义现有的表,例如:分区表的非分区表(即使没有应用程序停机时间)。
请注意,您的桌面空间需要两倍的桌面空间,因为DBMS_REDEFINITION会创建一个旧版本的#34;表,以防您必须进行回滚。