[英]Oracle Partition Table : Data is not inserted in the right Partition
Halo database guru, greeting from Indonesia Halo数据库专家,来自印度尼西亚的问候
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.
每次我尝试使用insert into journal1插入数据时,请选择* from journal,插入到journal1的数据都不会分区。 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. 当我检查表journal1中的数据时,数据已成功插入但未分区。 anyone have clues why is this happen?
有人知道为什么会这样吗?
DBA_TABLES.NUM_ROWS is the number of rows counted when optimizer statistics were gathered. DBA_TABLES.NUM_ROWS是收集优化器统计信息时计数的行数。 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.