オンライン再定義機能は表をオンラインで稼働しながら再定義出来る機能で、Enterprise Editionで利用可能な機能です。
11gまでは面倒なステップを経る必要がありましたが、12cからは表領域の変更、圧縮属性の変更に関しては1ステップで行なうことが出来るようになりました。
SQL> create table ORIGINAL (
2 COL1 NUMBER PRIMARY KEY,
3 COL2 VARCHAR2(1000))
4 TABLESPACE SYSTEM;
表が作成されました。
SQL> insert into ORIGINAL values(1,'AAA');
1行が作成されました。
SQL> commit;
コミットが完了しました。
SQL> col table_name format a16
SQL> set lines 80
SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TABLES;
TABLE_NAME TABLESPACE_NAME
---------------- ------------------------------
ORIGINAL SYSTEM
間違えて、SYSTEM表領域に表を作成したとします。
この表をオンラインのまま、USERS表領域に移動します。
BEGIN
DBMS_REDEFINITION.REDEF_TABLE(
uname => 'TADASHI',
tname => 'ORIGINAL',
table_part_tablespace => 'USERS'
);
END;
/
PL/SQLプロシージャが正常に完了しました。
管理者権限で接続し直し、REDEF_TABLEプロシージャを実行します。
時間はかかりますが、表はオンラインのままです。
SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TABLES;
TABLE_NAME TABLESPACE_NAME
---------------- ------------------------------
ORIGINAL USERS
PLSQLの実行後、表がUSERS表領域に移動しました。
11gまでは面倒なステップを経る必要がありましたが、12cからは表領域の変更、圧縮属性の変更に関しては1ステップで行なうことが出来るようになりました。
SQL> create table ORIGINAL (
2 COL1 NUMBER PRIMARY KEY,
3 COL2 VARCHAR2(1000))
4 TABLESPACE SYSTEM;
表が作成されました。
SQL> insert into ORIGINAL values(1,'AAA');
1行が作成されました。
SQL> commit;
コミットが完了しました。
SQL> col table_name format a16
SQL> set lines 80
SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TABLES;
TABLE_NAME TABLESPACE_NAME
---------------- ------------------------------
ORIGINAL SYSTEM
間違えて、SYSTEM表領域に表を作成したとします。
この表をオンラインのまま、USERS表領域に移動します。
BEGIN
DBMS_REDEFINITION.REDEF_TABLE(
uname => 'TADASHI',
tname => 'ORIGINAL',
table_part_tablespace => 'USERS'
);
END;
/
PL/SQLプロシージャが正常に完了しました。
管理者権限で接続し直し、REDEF_TABLEプロシージャを実行します。
時間はかかりますが、表はオンラインのままです。
SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TABLES;
TABLE_NAME TABLESPACE_NAME
---------------- ------------------------------
ORIGINAL USERS
PLSQLの実行後、表がUSERS表領域に移動しました。

コメント