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

yangtingkun發表於2010-06-17

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

這一篇討論ALTER TABLE語句。

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

 

 

OracleALTER TABLE語句其實可以直接修改:

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;

75327 rows created.

SQL> COMMIT;

Commit complete.

SQL> ALTER TABLE T MODIFY CONTENTS CLOB;

Table altered.

看上去似乎很簡單,不過Oracle並不是簡單的將列的定義換成CLOB,而是生成了一個臨時列,將資料儲存,然後刪除原LONG列,其實操作類似上一篇文章最後給出的步驟,不過Oracle進行了封裝,因此效率更高,不需要透過關聯來實現了。

SQL> DROP TABLE T PURGE;

Table dropped.

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;

75327 rows created.

SQL> COMMIT;

Commit complete.

SQL> SET TIMING ON
SQL> ALTER TABLE T MODIFY CONTENTS CLOB;

Table altered.

Elapsed: 00:00:00.65
SQL> SET TIMING OFF
SQL> DROP TABLE T PURGE;

Table dropped.

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, USER_DB_LINKS;

527289 rows created.

SQL> COMMIT;

Commit complete.

SQL> SET TIMING ON
SQL> ALTER TABLE T MODIFY CONTENTS CLOB;

Table altered.

Elapsed: 00:00:04.49
SQL> SET TIMING OFF
SQL> DROP TABLE T PURGE;

Table dropped.

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, USER_DB_LINKS, USER_DB_LINKS;

3691023 rows created.

SQL> COMMIT;

Commit complete.

SQL> SET TIMING ON
SQL> ALTER TABLE T MODIFY CONTENTS CLOB;

Table altered.

Elapsed: 00:00:37.10

可以看到,隨著資料量的增加,ALTER TABLE所花費的時間也線性增長,說明這個操作並不是簡單的修改資料字典,而是對資料進行轉換。

不過這個操作的效率比第一種方法要高不少,對於7*24要求不是非常高的絕大多數系統都是滿足要求的,畢竟一個SQL就可以完成轉換還是非常方便的。

 

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

相關文章