LONG型別遷移到LOB型別(二)
LONG型別由於過多的限制,Oracle很早就推薦使用LOB型別進行替代,在Oracle的官方文件中給出了幾種將LONG型別遷移到LOB型別的方法,這裡簡單討論一下。
這一篇討論ALTER TABLE語句。
LONG型別遷移到LOB型別(一):http://yangtingkun.itpub.net/post/468/501065
Oracle的ALTER 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- LONG型別遷移到LOB型別(三)型別
- LONG型別遷移到LOB型別(一)型別
- LOB型別型別
- Java long型別和Long型別的那些事Java型別
- LONG欄位型別向CLOB遷移型別
- 操作LONG型別型別
- Oracle Long型別轉換為Clob型別Oracle型別
- LONG型別複製型別
- long型別相關型別
- int型別和long long型別運算執行時間的差別型別
- Jenkins:批次自動將 Maven 型別 Job 遷移到自由風格型別JenkinsMaven型別
- Long型別的資料,利用COPY命令遷移型別
- Long raw和Long型別總結型別
- 為lob型別分配extents型別
- 移動LOB型別的索引型別索引
- oracle裡long型別詳解Oracle型別
- Long -> lob , to_lob 轉換,遷移
- [譯] Scala 型別的型別(二)型別
- Oracle - LOB(大物件資料型別)Oracle物件資料型別
- Oracle Lob型別儲存淺析Oracle型別
- 關於long型別的轉換型別
- oracle裡long型別的總結Oracle型別
- long型別資料的擷取型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-LONG和LONG RAW變數SQL資料型別變數
- LONG RAW的欄位型別不能使用impdp + dblink遷移型別
- Oracle LOB資料型別的處理Oracle資料型別
- Spring Mvc Long型別精度丟失SpringMVC型別
- long型別轉換成varchar2型別
- expdp測試包含有lob型別的物件型別物件
- 測試Java中的long,int基本型別Java型別
- Oracle 中LONG RAW BLOB CLOB型別介紹Oracle型別
- long資料型別跨平臺問題資料型別
- Mysql資料庫學習(二):資料型別(數值型別 日期和時間型別 字串型別)MySql資料庫資料型別字串
- 將lob型別的index移動到其它tablespace型別Index
- 轉:11g對LOB型別的新增功能型別
- 靜態long型別常量serialVersionUID的作用型別UI
- 使用copy命令解決LONG型別的困擾型別
- 含LONG型別欄位的表無法MOVE型別