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
パラメータを使用できます。これは、オンラインテーブル再定義の完全な例です。 オンラインテーブル再定義の例 OracleDocsから。
パーティションを別のテーブルスペースに移動する方法