I am trying to move data between two partitioned tables. Below is the sample script. I am working on Oracle 19c and using 12c feature of creating table for exchange. Please suggest what is missing.
your text
How can i move partitions between two partitioned tables. This is DW env, where SRC should contain data upto 7 days and keep on moving to target table. If there is any better way to move data between two tables, pls suggest that as well. Both source and target tables resides in single schema but two different TS.
--Source table creation
DROP TABLE STG_SRC;
CREATE TABLE STG_SRC
(
STG_SRC_ID NUMBER GENERATED BY DEFAULT AS IDENTITY NOT NULL,
NM VARCHAR2(4000),
BATCH_DT_ID NUMBER,
CONSTRAINT PK_STG_SRC PRIMARY KEY (STG_SRC_ID)
);
ALTER TABLE STG_SRC MODIFY PARTITION BY LIST (BATCH_DT_ID) AUTOMATIC (PARTITION INITIAL_PARTITION VALUES (20240101)) ONLINE UPDATE INDEXES;
INSERT INTO STG_SRC (BATCH_DT_ID, NM) VALUES (20240201,'Robert');
INSERT INTO STG_SRC (BATCH_DT_ID, NM) VALUES (20240202,'Keith');
INSERT INTO STG_SRC (BATCH_DT_ID, NM) VALUES (20240203,'Mike');
INSERT INTO STG_SRC (BATCH_DT_ID, NM) VALUES (20240204,'Sean');
INSERT INTO STG_SRC (BATCH_DT_ID, NM) VALUES (20240205,'Alex');
COMMIT;
SELECT * FROM STG_SRC;
SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'STG_SRC';
--Target table creation
DROP TABLE STG_TGT
CREATE TABLE STG_TGT
(
STG_TGT_ID NUMBER GENERATED BY DEFAULT AS IDENTITY NOT NULL,
NM VARCHAR2(4000),
BATCH_DT_ID NUMBER,
CONSTRAINT PK_STG_TGT PRIMARY KEY (STG_TGT_ID)
);
ALTER TABLE STG_TGT MODIFY PARTITION BY LIST (BATCH_DT_ID) AUTOMATIC (PARTITION INITIAL_PARTITION VALUES (20240101)) ONLINE UPDATE INDEXES;
SELECT * FROM STG_TGT;
SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'STG_TGT';
--Temp table creation
DROP TABLE STG_SRC_TMP;
CREATE TABLE STG_SRC_TMP FOR EXCHANGE WITH TABLE STG_SRC;
--Exchange partition
ALTER TABLE STG_SRC EXCHANGE PARTITION FOR (20240201) WITH TABLE STG_SRC_TMP INCLUDING INDEXES WITHOUT VALIDATION UPDATE GLOBAL INDEXES;
SELECT * FROM STG_SRC WHERE BATCH_DT_ID = 20240201; -- 0 RECORDS
SELECT * FROM STG_SRC_TMP WHERE BATCH_DT_ID = 20240201; -- 1 RECORDS
ALTER TABLE STG_TGT EXCHANGE PARTITION FOR (20240201) WITH TABLE STG_SRC_TMP INCLUDING INDEXES WITHOUT VALIDATION UPDATE GLOBAL INDEXES;
ORA-14702: The partition number is invalid or out-of-range -- Error
KMA is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.