【问题标题】:Oracle table dynamic partitionOracle 表动态分区
【发布时间】:2014-10-13 02:11:48
【问题描述】:

我正在编写一个 java 代码,以根据 INSERT_DATETIME 字段(时间戳)每 15 分钟从 oracle 表中上传数据。我需要根据 15 分钟的间隔对表进行分区。有没有办法动态地做到这一点(分区)。我在 oracle SQL developer 中使用 oracle11g。

我创建的一张表的示例,我想添加一个分区:

CREATE TABLE "PV_TNPM"."TEJAS_CARD_REPORT" 
(   "INSERT_DATETIME" TIMESTAMP (6) NOT NULL ENABLE, 
"NAME" VARCHAR2(100 BYTE), 
"IPADDRESS" VARCHAR2(100 BYTE), 
"PRODUCTCODE" VARCHAR2(100 BYTE), 
"LCTNAME" VARCHAR2(100 BYTE), 
"CARDTYPELABEL" VARCHAR2(100 BYTE), 
"SOFTWAREVERSION" VARCHAR2(100 BYTE)
) SEGMENT CREATION IMMEDIATE 
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 32768 NEXT 1523712 MINEXTENTS 1 MAXEXTENTS 1017
PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ;

我不熟悉 SQL,因为上面的代码只是从我创建的表中生成的。任何帮助表示赞赏。谢谢

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    使用interval partitioning 创建表:

    CREATE TABLE TEJAS_CARD_REPORT
    (
        "INSERT_DATETIME" TIMESTAMP (6) NOT NULL ENABLE, 
        "NAME"         VARCHAR2(100 BYTE), 
        "IPADDRESS" VARCHAR2(100 BYTE), 
        "PRODUCTCODE" VARCHAR2(100 BYTE), 
        "LCTNAME" VARCHAR2(100 BYTE), 
        "CARDTYPELABEL" VARCHAR2(100 BYTE), 
        "SOFTWAREVERSION" VARCHAR2(100 BYTE)
    ) partition by range(insert_datetime) interval (interval '15' minute)
    (
        partition initial_partition values less than (date '2000-01-01')
    );
    

    分区是在插入数据时动态创建的。

    insert into tejas_card_report(insert_datetime) values (timestamp '2000-01-01 00:14:00');
    insert into tejas_card_report(insert_datetime) values (timestamp '2000-01-01 00:29:00');
    insert into tejas_card_report(insert_datetime) values (timestamp '2000-10-11 00:00:00');
    
    SQL> select partition_name, high_value from dba_tab_partitions where table_name = 'TEJAS_CARD_REPORT';
    
    PARTITION_NAME       HIGH_VALUE
    -------------------- --------------------------------------------------------------------------------
    SYS_P21516           TIMESTAMP' 2000-10-11 00:15:00'
    SYS_P21515           TIMESTAMP' 2000-01-01 00:30:00'
    SYS_P21514           TIMESTAMP' 2000-01-01 00:15:00'
    INITIAL_PARTITION    TIMESTAMP' 2000-01-01 00:00:00'
    

    在不相关的注释中,避免使用TABLESPACE "SYSTEM"。您几乎不想在 SYSTEM 表空间中存储任何用户或应用程序数据。

    【讨论】:

    • 谢谢。正是我需要的:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多