首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有可能创建一个带有分区by x (sequence_number)的表,其中dbms自动定义差异sequence_numberS?

有没有可能创建一个带有分区by x (sequence_number)的表,其中dbms自动定义差异sequence_numberS?
EN

Stack Overflow用户
提问于 2019-09-25 21:55:30
回答 1查看 32关注 0票数 0

有没有可能创建一个带有分区by x (sequence_number)的表,其中dbms自动定义差异sequence_numberS?如果是,又是如何做到的呢?:)

我知道数据将包含不同的序列号,但我不知道不同序列号之间会有什么区别(至少必须是增量1,也可以是增量999)。差异不会是静态的,所以我猜将它设置为interval (1)不起作用。

PS:我说过'partition by x',其中x是范围,或者哈希,或者其他任何东西。PS2:我正在使用Oracle12。

有谁知道检索自动间隔的诀窍吗?

我的想法是这样的:

代码语言:javascript
运行
复制
CREATE TABLE "table_x"  ( "SEQUENCE_NUMBER" NUMBER(15,0) NOT NULL ENABLE
                         ,"VALUE1" VARCHAR2(36 CHAR)
                         ,"VALUE2" VARCHAR2(255 CHAR) NOT NULL ENABLE ) 
partition by range(SEQUENCE_NUMBER)
interval (automatic value);
EN

Stack Overflow用户

发布于 2019-10-02 18:49:43

我发现,即使与前一个sequence_number的差异大于1,也可以在interval=1中使用按范围划分,所以我做了一个错误的假设。是我的错。

顺便说一句,有一个缺点,那就是Oracle最多接受1048575个子分区。因此,在我的例子中,我要让sequence_ number传递treshold为1048575,那么就必须使用其他方法来获得一个派生编号,以便生成子分区。我想到了一种方法,那就是生成我自己的派生序列号(在另一个日志表中),其中有48次迭代的空间,在48次迭代之后,序列号将被重用,这样,子分区的最大数量将是48。不管怎么说。

我使用的创建脚本是这样的,它是有效的:

代码语言:javascript
运行
复制
CREATE TABLE "table_x"  ( "SEQUENCE_NUMBER" NUMBER(15,0) NOT NULL ENABLE
                             ,"VALUE1" VARCHAR2(36 CHAR)
                             ,"VALUE2" VARCHAR2(255 CHAR) NOT NULL ENABLE)
ROW STORE COMPRESS ADVANCED 
STORAGE(
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "STOD" 
PARTITION BY RANGE ("SEQUENCE_NUMBER") INTERVAL (1) 
(PARTITION "P1"  VALUES LESS THAN (1) SEGMENT CREATION DEFERRED 
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
ROW STORE COMPRESS ADVANCED LOGGING 
STORAGE(
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "STOD" ) 
PARALLEL  ENABLE ROW MOVEMENT;
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58100091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档