web-dev-qa-db-ja.com

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;
1
Sauchin

part_nameプロシージャのDBMS_REDEFINITION.START_REDEF_TABLEパラメータを使用できます。これは、オンラインテーブル再定義の完全な例です。 オンラインテーブル再定義の例 OracleDocsから。
パーティションを別のテーブルスペースに移動する方法

0
JSapkota