![](/img/trans.png)
[英]Oracle SQL: Selecting data and partition name from table and truncating partitions
[英]Oracle Partition Table : Data is not inserted in the right Partition
Halo數據庫專家,來自印度尼西亞的問候
我目前正在努力將我公司的一個大表從非分區遷移到分區表。 每次我嘗試使用insert into journal1插入數據時,請選擇* from journal,插入到journal1的數據都不會分區。 有什么線索嗎?
這是非分區表作為數據源。
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;
這是分區表的腳本。 遷移的目標。
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;
這是我用來遷移數據的腳本
insert into journal1
select * from journal
當我檢查表journal1中的數據時,數據已成功插入但未分區。 有人知道為什么會這樣嗎?
DBA_TABLES.NUM_ROWS是收集優化器統計信息時計數的行數。 它不一定代表實際的行數。 無論在表中插入什么,在收集統計信息之前,查詢將如下所示:
select partition_name, num_rows
from dba_tab_partitions
where table_name = 'JOURNAL1';
PARTITION_NAME NUM_ROWS
-------------- --------
PART1
PART2
PART3
PART4
PART5
收集統計信息將設置行數,但該行數不會保持最新:
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.