Oracle LOB

tolywang發表於2008-09-18

 

Oracle9i Release 2 之前,LOB 最多隻能儲存 4G 資料;從Oracle10g Release 1 開始,可以儲存 8-128T 的資料,取決於你的資料庫的塊大小。

 

PL/SQL中你可以定義如下的 LOB 欄位型別:

1BFILE:二進位制檔案。定義一個 BFILE 變數,它指向作業系統的一個檔案,Oracle會將其視為二進位制資料進行處理。該檔案儲存於資料庫外。

2BLOB:二進位制大物件。定義一個 BLOB 變數,它指向一個二進位制大物件的位置。該二進位制大物件儲存於資料庫中。

3CLOB:字元型大物件。定義一個 CLOB 變數,該字元型大物件儲存於資料庫中。

4NCLOBNational Language Support (NLS) character large object. Declares a variable that holds a LOB locator pointing to a large block of single-byte, fixed-width multibyte, or variable-width multibyte character data stored inside the database. 用來儲存多位元組的字元資料(定寬的多位元組國家字符集資料)

儲存於 Oracle 資料庫內的大欄位型別(blob,clob,nclob),可以參與 Oracle 的事務處理。而儲存於資料庫外的大欄位型別(bfile)則不能參與 Oracle 的事務處理,不能被提交和回滾,只能依據檔案系統來保證資料的完整性。

至於LONGLONG RAWOracle已經不推薦使用了。它們的存在,只是為了向前相容。你應該從LONG 轉向BLOGCLOB 如果你的系統中存在 LOGN 型別的欄位,可以參考《Application Developer''s Guide》中的Large Objects LONG 欄位轉為 LOB 欄位。

 

1LONGLOB的比較 

LONG/LONG RAW       LOB 

--------------------------------------------------------- 

表中只能有一個列        可以有多列 

最大2G                 最大4G(10g更大) 

SELECT返回值          SELECT返回指標 

存放在DB            可以在DB內或者外 

不支援OBJECT型別     支援 

順序存取                隨機存取 

---------------------------------------------------------- 

備註: NCLOB不支援OBJECT型別 

LOB小於4000位元組時是內部存放 

 

 

2LOB解析   

LOB有兩個不同的部分 

- LOB值:  LOB代表的資料 

- LOB指標:LOB存放資料的位置 

LOB列內部不存放資料,而是LOB值的位置。當建立內部LOB時,值存放在LOB SEGMENT中,指向OUT-OF-LIN資料的指標放在列中。對外部LOB,只在列中存放位置。 

比如下面的建表中BLOB欄位指標存放在PDM_DATA欄位中,但是真正的LOB(二進位制檔案內容)存放在使用者定義LOB_TS表空間的LOB SEGMENT

 

 

 

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

相關文章