Oracle11g數據庫新推出了一個完全重新設計的大對象(LOB)數據類型用於大幅度的提高性能、可管理性和簡化應用的開發。這個全新的數據類型同時還提供了高級的下一代功能例如智能壓縮、刪除重複數據和透明加密等功能。
SecureFiles提供瞭如下的組件
壓縮:可以明確地壓縮SecureFiles來節省磁盤空間,降低I/O和記錄重做日誌的開銷。 壓縮等級分爲低級壓縮、中級壓縮、高級壓縮,默認是中級壓縮級別。
下面是建立壓縮SecureFiles LOB列的例子:
CREATE TABLE t1 (a CLOB)
LOB(a) STORE AS SECUREFILE(COMPRESS LOW ); --COMPRESS 後加LOW爲低級壓縮,加HIGH爲高級壓縮,什麼也 不加爲默認中級壓縮,將COMMPRESS改爲NOCOMMPRESS爲不壓縮。
創建一個分區壓縮SecureFiles的LOB列
CREATE TABLE t1 (REGION VARCHAR2(20), a BLOB)
LOB(a) STORE AS SECUREFILE (CACHE)
PARTITION BY LIST (REGION)
(
PARTITION p1 VALUES ('x', 'y')
LOB(a) STORE AS SECUREFILE(COMPRESS),
PARTITION p2 VALUES (DEFAULT)
);
刪除重複數據:自動檢測重複的SecureFiles LOB數據並且只保留一份拷貝空間來實現節省磁盤存儲,減少I/O和重做日誌記錄的消耗。刪除重複數據操作可以在表級或者是分區級別上指定,但是不能跨越分區的LOBS。示例如下:
CREATE TABLE t1 ( a CLOB)
LOB(a) STORE AS SECUREFILE
(DEDUPLICATE); --DEDUPLICATE爲刪除重複記錄,KEEP_DUPLICATES爲不刪除重複記錄。
在一個分區上創建一個重複數據刪除SecureFiles的LOB列 CREATE TABLE t1 ( REGION VARCHAR2(20), a BLOB ) LOB(a) STORE AS SECUREFILE (CACHE) PARTITION BY LIST (REGION) ( PARTITION p1 VALUES ('x', 'y') LOB(a) STORE AS SECUREFILE (DEDUPLICATE), PARTITION p2 VALUES (DEFAULT) );
加密:加密存儲LOB數據並且可以任意的讀和寫來提供更強大的數據安全性。
encrypt_algorithm表示的加密算法的名稱。有效的算法是:AES192(默認),3DES168,AES128和AES256。
創建一個特定的加密算法SecureFiles的LOB列 CREATE TABLE t1 (a CLOB ENCRYPT USING 'AES128') LOB(a) STORE AS SECUREFILE (CACHE);
創建一個指定密鑰的SecureFiles的LOB列 CREATE TABLE t1 ( a CLOB ENCRYPT IDENTIFIED BY foo) LOB(a) STORE AS SECUREFILE (CACHE);
數據路徑優化:支持針對於SecureFiles的性能優化,包括動態設置是否使用緩存,並且避免污染對於高速緩存中的大的緩存的SecureFiles。
利用事務COMMIT NOWAIT BATCH來達到同步或者異步。
類似於文件服務器的髒緩存寫,寫緩存收集能夠自動分期償還空間分配、信息節點更新,記錄重做日誌的代價,並且允許磁盤大規模的I/O讀寫。
針對於SecureFiles塊的分佈式鎖管理器,這使用一個單一的分佈式鎖管理器來覆蓋所有的SecureFilesLOB塊,因此對於其他的文件系統來說LOB的性能會更好一些。
信息節點:針對於SecureFiles的新的存儲架構被設計和實現用於支持高性能的訪問目標數據。除了提高基礎數據訪問之外,新的存儲架構也支持豐富的功能,保證最小的性能代價,這些功能例如:
固有的壓縮和加密
數據共享
用戶控制的版本
COMPATIBLE初始化參數比較要設置爲11.1或者更高纔可以使用SecureFiles。
是否啓用SecureFiles
可以init.ora文件中設置db_securefile初始化參數來確定是否啓用SecureFiles,這個參數是動態參數,可通過alter sysytem命令修改,該參數有以下幾個值:
PERMITTED:允許創建SecureFiles(默認)
NEVER:不允許創建SecureFiles
ALWAYS:強制所有的LOBs都必須要創建SecureFiles
IGNORE:不允許創建SecureFiles並且忽略由強制BasicFiles使用SecureFiles特性而引起的任何錯誤。
如果指定值爲NEVER,任何LOBs都將以BasicFiles來創建,所有的指定的SecureFiles的存儲選項和特性都將引起一個意外。
如果指定值爲ALWAYS,所有系統中的LOBs都以SecureFiles來創建,LOB必須在ASSM(Automatic Segment Space Management)表空間中創建,否則會產生錯誤。任何指定的BasicFile存儲選項都將會被忽略。
SecureFiles屬性
DEDUPLICATE/KEEP_DUPLICATES: DEDUPLICATE選項允許指定在一個LOB列中有兩行或者更多行的時候,所有行都共享同樣的數據塊。相反的就是KEEP_DUPLICATES選項。Oracle11g數據庫使用一個安全的哈希索引來檢測重複性並且聯合LOBs的內容到一個單一的拷貝里面,減少存儲空間並且簡化存儲管理。
VALIDATE:對SecureFiles執行一個字節到字節的比較,確定SecureFiles都是同樣的安全哈希值。
COMPRESS/NOCOMPRESS:決定是否啓用LOB壓縮。
ENCRYPT/DECRYPT:決定是否啓用LOB加密。如果一旦設置好了加密,就只能用ALTER TABLE REKEY命令來更新加密算法或者是加密值。
RETENTION:只能影響使用ALTER TABLE語句之後所創建的空間。
對於Securefiles的訪問
Oracle11g數據庫是通過使用DBMS包來實現的。主要是通過DBMS_LOB包和DBMS_SPACE包來訪問。
DBMS_LOB包:LOBs繼承LOB列的設定的屬性,當然也可以通過LOB locator API配置成每個LOB級別上。但是LONG API不能用於配置這些LOB設定,必須使用DBMS_LOB包來設定這些屬性:
DBMS_LOB.GETOPTIONS:可以用來獲取設定,每個選項類型的預定義的一個常量對應於一個整數將會返回。
DBMS_LOB.SETOPTIONS:用於設定特性並且允許在每一個LOB基礎上設定特性,會覆蓋所有默認的LOB設定。
DBMS_LOB.GET_DEDUPLICATE_REGIONS:這個存儲過程用於輸出在一個LOB中不重複區域的記錄收集。LOB級別上只包含一個不重複區域。
DBMS_SPACE.SPACE_USAGE:這個存儲過程用於返回LOB空間使用的負載信息。返回在LOB段中所有LOB使用的磁盤空間的blocks的數量。這個存儲過程目前只能用於ASSM創建的表空間,不支持屬於BasicFiles那部分LOB使用的空間。
從BasicFiles移植SecureFiles
有兩種推薦的方法來移植。這兩種方法分別是交換分區和在線重定義。
交換分區:
需要和表中最大的分區相等的額外空間
在交換的時候可以維護索引
能夠在幾個小的維護窗口延展工作負載
執行交換分區的時候需要將表或者分區離線
在線重定義:
不要求表或者分區離線
可以被並行的執行
要求額外的等於整個表或者所有LOB段大小的可用空間
要求必須重建所有的全局索引
如果你想升級你的BasicFiles到SecureFiles,你可以使用傳統的方法來升級數據,例如CTAS/ITAS、export/import、column-to-column拷貝等等。大部分這些解決方案都要求使用兩倍的磁盤空間來移植。然而,使用分區解決方案來移植可以按照每個分區來移植,從而有助於減少磁盤空間的需求。