Oracle
帶有 WHERE 子句的 DBMS_REDEFINITION
我想知道 DBMA_REDEFINITON 包是否允許 WHERE 子句在遷移之前過濾內容。
我有一個分區表,想使用 DBMA_REDEFINITON 將數據和約束複製到另一個表,但是在複製內容時,我不想從原始表中複製特定分區。是否可以使用 WHERE 子句刪除此分區。
問題來自Oracle Tips網站上提供的以下資訊
Online table redefinition: You can drop large numbers of rows from a table by adding a WHERE clause predicate to filter-out unwanted rows when you copy the table.
我的要求來自下面的範例,新表是否可以只有分區 Part_2 和 Part3。(使用 WHERE 子句刪除分區 Part_1)
-- Existing Table CREATE TABLE ORIGINAL ( ID INT NOT NULL PRIMARY KEY, TEXT VARCHAR2(255 CHAR) NOT NULL )PARTITION BY RANGE ( ID ) ( PARTITION part_1 VALUES LESS THAN(2), PARTITION part_2 VALUES LESS THAN(3), PARTITION part_3 VALUES LESS THAN(MAXVALUE) ) / -- some data in the table insert into ORIGINAL values (1, 'test'); -- some index on the table create index idx_ORIGINAL on ORIGINAL(TEXT); --INTERIM table for REDEFINITION (has all partitions right now) CREATE TABLE ORIGINAL_INTERIM ( ID INT NOT NULL PRIMARY KEY, TEXT VARCHAR2(255 CHAR) NOT NULL ) PARTITION BY RANGE ( ID ) ( PARTITION part_1 VALUES LESS THAN(2), PARTITION part_2 VALUES LESS THAN(3), PARTITION part_3 VALUES LESS THAN(MAXVALUE) ) / -- Start Redefinition BEGIN DBMS_REDEFINITION.START_REDEF_TABLE('TSPACE1','ORIGINAL','ORIGINAL_INTERIM'); END; / -- Copy objects DECLARE num_errors PLS_INTEGER; BEGIN DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS ('TSPACE1','ORIGINAL','ORIGINAL_INTERIM', DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, num_errors); END; / -- Sync BEGIN DBMS_REDEFINITION.SYNC_INTERIM_TABLE ('TSPACE1','ORIGINAL','ORIGINAL_INTERIM'); END; / -- finish BEGIN DBMS_REDEFINITION.FINISH_REDEF_TABLE ('TSPACE1','ORIGINAL','ORIGINAL_INTERIM'); END; / -- Drop interim table drop table ORIGINAL_INTERIM cascade constraints purge;
您可以使用過程
part_name
參數DBMS_REDEFINITION.START_REDEF_TABLE
。這是線上表重新定義的完整範例。Oracle Docs 中的線上表重定義範例。