LONG型別遷移到LOB型別(三)

yangtingkun發表於2010-06-20

LONG型別由於過多的限制,Oracle很早就推薦使用LOB型別進行替代,在Oracle的官方文件中給出了幾種將LONG型別遷移到LOB型別的方法,這裡簡單討論一下。

這一篇討論線上重定義功能。

LONG型別遷移到LOB型別(一):http://yangtingkun.itpub.net/post/468/501065

LONG型別遷移到LOB型別(二):http://yangtingkun.itpub.net/post/468/501094

 

 

如果對併發要求很高,那麼還可以選擇線上重定義的方式來轉換LONG列:

SQL> CREATE TABLE T
  2  (ID NUMBER,
  3  CONTENTS LONG);

Table created.

SQL> INSERT INTO T
  2  SELECT ROWNUM, OWNER || OBJECT_NAME || OBJECT_TYPE
  3  FROM ALL_OBJECTS;

75338 rows created.

SQL> COMMIT;

Commit complete.

SQL> ALTER TABLE T ADD PRIMARY KEY (ID);

Table altered.

下面建立中間表,並利用線上重定義的方式來轉換LONGCLOB型別:

SQL> CREATE TABLE T_INTER
  2  (ID NUMBER,
  3  CONTENTS CLOB);

Table created.

SQL> SET SERVEROUT ON SIZE 100000
SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'T')

PL/SQL procedure successfully completed.

SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'T', 'T_INTER', 'ID ID, TO_LOB(CONTENTS) CONTENTS')

PL/SQL procedure successfully completed.

SQL> DECLARE
  2  V_NUM NUMBER;
  3  BEGIN
  4  DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(USER, 'T', 'T_INTER', DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, V_NUM, TRUE);
  5  DBMS_OUTPUT.PUT_LINE(V_NUM);
  6  END;
  7  /
0

PL/SQL procedure successfully completed.

SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'T', 'T_INTER')

PL/SQL procedure successfully completed.

SQL> DESC T
 Name                                          Null?    Type
 --------------------------------------------- -------- ------------------------
 ID                                                     NUMBER
 CONTENTS                                               CLOB

SQL> DESC T_INTER
 Name                                          Null?    Type
 --------------------------------------------- -------- -------------------------
 ID                                            NOT NULL NUMBER
 CONTENTS                                               LONG

這種方式也不復雜,而且鎖表的時間更斷,更適合7*24的環境。

Oracle給出的方法還包括EXP/EXPDB的方式,不過這種方式藉助匯出、匯入工具,而且在刪除表後還要手工建立表,再執行匯入,並沒有效能和操作簡單度上的優勢,這裡就不討論了。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-665749/,如需轉載,請註明出處,否則將追究法律責任。

相關文章