简体   繁体   中英

Oracle Partition Table : Data is not inserted in the right Partition

Halo database guru, greeting from Indonesia

i am currently working to migrate one my company big table from non-partition to partition table. each time i tried to insert the data using insert into journal1 select * from journal, the data inserted into journal1 is not partitioned. any clues ?

here is the non-partition table as the source of the data.

CREATE TABLE PRODBMDB.JOURNAL
(
  ID                  VARCHAR2(32 BYTE)         NOT NULL,
  GATEWAYID           VARCHAR2(128 BYTE)        DEFAULT NULL,
  WORKSTATIONID       VARCHAR2(128 BYTE),
  MANDATORID          NUMBER(19)                DEFAULT NULL,
  INSTITUTEID         NUMBER(19)                DEFAULT NULL,
  SUBSIDIARYID        NUMBER(19)                DEFAULT NULL,
  ACQUIRERID          NUMBER(19)                DEFAULT NULL,
  DATETIME            TIMESTAMP(6)              NOT NULL,
  SESSIONID           VARCHAR2(32 BYTE),
  AUTHORIZETSTAMP     TIMESTAMP(6),
  TRANSACTIONNUMBER   NUMBER(19)                NOT NULL,
  TRANSACTIONSTEPNR   NUMBER(19),
  CLIENTTRXNUM        NUMBER(19),
  HOSTTRXNUM          VARCHAR2(32 BYTE),
  METHOD              VARCHAR2(64 BYTE),
  ACTIONTYPE          NUMBER(38)                NOT NULL,
  ACTIONSUBTYPE       NUMBER(38),
  FRAUDRESULT         NUMBER(38),
  FRAUDSCORE          NUMBER(38),
  CUSTOMERID          VARCHAR2(32 BYTE),
  ROUTINGCODE         VARCHAR2(50 BYTE),
  ACCOUNTNUMBER       VARCHAR2(50 BYTE),
  CARDSEQUENCENUMBER  VARCHAR2(2 BYTE),
  AMOUNT              NUMBER(19),
  CURRENCYCODE        CHAR(3 BYTE),
  COMMANDSOURCE       VARCHAR2(128 BYTE),
  RESPONSECODE        NUMBER(38),
  EXTRESPONSECODE     NUMBER(38),
  CANCELREASON        NUMBER(38),
  DOCUMENTSTATE       NUMBER(38),
  ACCOUNTINGSTATE     NUMBER(38),
  CARDSTATE           NUMBER(38),
  HOSTSTATE           NUMBER(38),
  EISPH               NUMBER(38),
  PARTITION           NUMBER(38),
  CONFIDENTIALS       VARCHAR2(1024 BYTE),
  MEDVIEW             NUMBER(38),
  MINVIEW             NUMBER(38),
  LONGVIEW            NUMBER(38),
  DATA1               RAW(2000),
  DATA2               RAW(2000),
  DATA3               RAW(2000),
  DATA4               RAW(2000),
  DATA5               RAW(2000),
  DATA6               RAW(2000)
)
TABLESPACE USERSBIG
PCTUSED    0
PCTFREE    10
INITRANS   10
MAXTRANS   255
STORAGE    (
        INITIAL          2M
        NEXT             1M
        MINEXTENTS       1
        MAXEXTENTS       UNLIMITED
        PCTINCREASE      0
        BUFFER_POOL      DEFAULT
       )
LOGGING 
NOCOMPRESS 
NOCACHE
PARALLEL ( DEGREE DEFAULT INSTANCES DEFAULT )
MONITORING;


CREATE INDEX PRODBMDB.JOURNAL1 ON PRODBMDB.JOURNAL
(DATETIME)
LOGGING
TABLESPACE USERSBIG
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
        INITIAL          64K
        NEXT             1M
        MINEXTENTS       1
        MAXEXTENTS       UNLIMITED
        PCTINCREASE      0
        BUFFER_POOL      DEFAULT
       )
NOPARALLEL;


CREATE INDEX PRODBMDB.JOURNAL2 ON PRODBMDB.JOURNAL
(MANDATORID, INSTITUTEID, WORKSTATIONID)
LOGGING
TABLESPACE USERSBIG
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
        INITIAL          64K
        NEXT             1M
        MINEXTENTS       1
        MAXEXTENTS       UNLIMITED
        PCTINCREASE      0
        BUFFER_POOL      DEFAULT
       )
NOPARALLEL;


CREATE INDEX PRODBMDB.JOURNAL3 ON PRODBMDB.JOURNAL
(SESSIONID, TRANSACTIONNUMBER)
LOGGING
TABLESPACE USERSBIG
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
        INITIAL          64K
        NEXT             1M
        MINEXTENTS       1
        MAXEXTENTS       UNLIMITED
        PCTINCREASE      0
        BUFFER_POOL      DEFAULT
       )
NOPARALLEL;

here is the partitioned table's script. the target of the migration.

CREATE TABLE PRODBMDB.JOURNAL1
(
  ID                  VARCHAR2(32 BYTE)         NOT NULL,
  GATEWAYID           VARCHAR2(128 BYTE)        DEFAULT NULL,
  WORKSTATIONID       VARCHAR2(128 BYTE),
  MANDATORID          NUMBER(19)                DEFAULT NULL,
  INSTITUTEID         NUMBER(19)                DEFAULT NULL,
  SUBSIDIARYID        NUMBER(19)                DEFAULT NULL,
  ACQUIRERID          NUMBER(19)                DEFAULT NULL,
  DATETIME            TIMESTAMP(6)              NOT NULL,
  SESSIONID           VARCHAR2(32 BYTE),
  AUTHORIZETSTAMP     TIMESTAMP(6),
  TRANSACTIONNUMBER   NUMBER(19)                NOT NULL,
  TRANSACTIONSTEPNR   NUMBER(19),
  CLIENTTRXNUM        NUMBER(19),
  HOSTTRXNUM          VARCHAR2(32 BYTE),
  METHOD              VARCHAR2(64 BYTE),
  ACTIONTYPE          INTEGER                   NOT NULL,
  ACTIONSUBTYPE       INTEGER,
  FRAUDRESULT         INTEGER,
  FRAUDSCORE          INTEGER,
  CUSTOMERID          VARCHAR2(32 BYTE),
  ROUTINGCODE         VARCHAR2(50 BYTE),
  ACCOUNTNUMBER       VARCHAR2(50 BYTE),
  CARDSEQUENCENUMBER  VARCHAR2(2 BYTE),
  AMOUNT              NUMBER(19),
  CURRENCYCODE        CHAR(3 BYTE),
  COMMANDSOURCE       VARCHAR2(128 BYTE),
  RESPONSECODE        INTEGER,
  EXTRESPONSECODE     INTEGER,
  CANCELREASON        INTEGER,
  DOCUMENTSTATE       INTEGER,
  ACCOUNTINGSTATE     INTEGER,
  CARDSTATE           INTEGER,
  HOSTSTATE           INTEGER,
  EISPH               INTEGER,
  PARTITION           INTEGER,
  CONFIDENTIALS       VARCHAR2(1024 BYTE),
  MEDVIEW             INTEGER,
  MINVIEW             INTEGER,
  LONGVIEW            INTEGER,
  DATA1               RAW(2000),
  DATA2               RAW(2000),
  DATA3               RAW(2000),
  DATA4               RAW(2000),
  DATA5               RAW(2000),
  DATA6               RAW(2000)
)
TABLESPACE USERSBIG
PCTUSED    0
PCTFREE    10
INITRANS   10
MAXTRANS   255
STORAGE    (
        INITIAL          2M
        NEXT             1M
        MINEXTENTS       1
        MAXEXTENTS       UNLIMITED
        PCTINCREASE      0
       )
LOGGING
PARTITION BY LIST (ACTIONTYPE)
(  
  PARTITION PART1 VALUES (1)
    LOGGING
        NOCOMPRESS 
    TABLESPACE USERSBIG
    PCTFREE    10
    INITRANS   10
    MAXTRANS   255
    STORAGE    (
            INITIAL          2M
            NEXT             2M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            BUFFER_POOL      DEFAULT
           ),  
  PARTITION PART2 VALUES (2)
    LOGGING
    NOCOMPRESS 
    TABLESPACE USERSBIG
    PCTFREE    10
    INITRANS   10
    MAXTRANS   255
    STORAGE    (
            INITIAL          2M
            NEXT             2M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            BUFFER_POOL      DEFAULT
           ),  
  PARTITION PART3 VALUES (3)
    LOGGING
    NOCOMPRESS 
    TABLESPACE USERSBIG
    PCTFREE    10
    INITRANS   10
    MAXTRANS   255
    STORAGE    (
            INITIAL          2M
            NEXT             2M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            BUFFER_POOL      DEFAULT
           ),  
  PARTITION PART4 VALUES (5)
    LOGGING
    NOCOMPRESS 
    TABLESPACE USERSBIG
    PCTFREE    10
    INITRANS   10
    MAXTRANS   255
    STORAGE    (
            INITIAL          2M
            NEXT             2M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            BUFFER_POOL      DEFAULT
           ),  
  PARTITION PART5 VALUES (10)
    LOGGING
    NOCOMPRESS 
    TABLESPACE USERSBIG
    PCTFREE    10
    INITRANS   10
    MAXTRANS   255
    STORAGE    (
            INITIAL          2M
            NEXT             2M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            BUFFER_POOL      DEFAULT
           )
)
NOCOMPRESS 
NOCACHE
PARALLEL ( DEGREE DEFAULT INSTANCES DEFAULT )
MONITORING;

here is the script i used to migrate the data

insert into journal1
select * from journal

when i check the data in table journal1, the data inserted successfully but did not partition. anyone have clues why is this happen?

DBA_TABLES.NUM_ROWS is the number of rows counted when optimizer statistics were gathered. It does not necessarily represent the real number of rows. Regardless of what is inserted in the table, until statistics are gathered the query will look like this:

select partition_name, num_rows
from dba_tab_partitions
where table_name = 'JOURNAL1';

PARTITION_NAME  NUM_ROWS
--------------  --------
PART1   
PART2   
PART3   
PART4   
PART5   

Gathering statistics will set the number of rows but the number will not stay up-to-date:

begin
    dbms_stats.gather_table_stats('PRODBMDB', 'JOURNAL1');
end;
/

select partition_name, num_rows
from dba_tab_partitions
where table_name = 'JOURNAL1';

PARTITION_NAME  NUM_ROWS
--------------  --------
PART1                  0
PART2                  0
PART3                  0
PART4                  0
PART5                  0

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM