初始化參數
SecureFile功能在初始化參數COMPATIBLE設置我11.0.0.0.0或更高時可用。
DB_SECUREFILE初始化參數控制數據庫對LOB存儲格式的默認行為,允許的值有:
◆ALWAYS - 在ASSM表空間中的所有LOB對象以SecureFile LOB的格式創建,在非ASSM表空間中的所有LOB對象以BasicFile LOB的格式創建(除非明確地指出要以SecureFile格式創建),在沒有指定選項的情況下,BasicFile存儲格式選項被忽略,SecureFile默認存儲格式選項被使用。
◆ FORCE - 所有LOB對象都以SecureFile LOB格式創建,如果是在一個非ASSM表空間中創建LOB,會出現錯誤,在沒有指定選項的情況下,BasicFile存儲格式選項被忽略,SecureFile默認存儲格式選項被使用。
◆PERMITTED - 默認設置,當使用了SECUREFILE關鍵字時它允許SecureFile LOB存儲格式,默認存儲方法是BASICFILE。
◆NEVER - 不允許創建SecureFile LOB對象。
◆IGNORE - 防止創建SecureFile LOB,使用SecureFile存儲選項時忽略所有錯誤。
這個參數是動態的,因此它可以使用ALTER SYSTEM命令設置。
SQL> ALTER SYSTEM SET db_securefile = 'FORCE';
System altered.
SQL> ALTER SYSTEM SET db_securefile = 'PERMITTED';
System altered.
SQL>
下面的例子假設DB_SECUREFILE初始化參數設置為默認值PERMITTED。
創建SecureFile LOB
基礎
SecureFile LOB通過在LOB存儲子句後添加SECUREFILE關鍵字來創建,下面的代碼顯示創建了兩個表,第一個使用的是原來的存儲格式,第二個使用的是SecureFile存儲格式。
CREATE TABLE bf_tab (
id NUMBER,
clob_data CLOB
)
LOB(clob_data) STORE AS BASICFILE;
INSERT INTO bf_tab VALUES (1, 'My CLOB data');
COMMIT;
CREATE TABLE sf_tab (
id NUMBER,
clob_data CLOB
)
LOB(clob_data) STORE AS SECUREFILE;
INSERT INTO sf_tab VALUES (1, 'My CLOB data');
COMMIT;
LOB重復消除
SecureFile的DEDUPLICATE選項允許在表或分區一級上的一個LOB內消除重復數據,正如你預料的那樣,這個技術與預防重寫導致系統開銷增大,KEEP_DUPLICATE選項明確地阻止重復消除,下面的例子對比了普通的SecureFile和重復消除SecureFile的空間使用情況。
CREATE TABLE keep_duplicates_tab (
id NUMBER,
clob_data CLOB
)
LOB(clob_data) STORE AS SECUREFILE keepdup_lob(
KEEP_DUPLICATES
);
CREATE TABLE deduplicate_tab (
id NUMBER,
clob_data CLOB
)
LOB(clob_data) STORE AS SECUREFILE dedup_lob (
DEDUPLICATE
);
DECLARE
l_clob CLOB := RPAD('X', 10000, 'X');
BEGIN
FOR i IN 1 .. 1000 LOOP
INSERT INTO keep_duplicates_tab VALUES (i, l_clob);
END LOOP;
COMMIT;
FOR i IN 1 .. 1000 LOOP
INSERT INTO deduplicate_tab VALUES (i, l_clob);
END LOOP;
COMMIT;
END;
/
EXEC DBMS_STATS.gather_table_stats(USER, 'keep_duplicates_tab');
EXEC DBMS_STATS.gather_table_stats(USER, 'deduplicate_tab');
COLUMN segment_name FORMAT A30
SELECT segment_name, bytes
FROM user_segments
WHERE segment_name IN ('KEEPDUP_LOB', 'DEDUP_LOB');
SEGMENT_NAME BYTES
------------------------------ ----------
DEDUP_LOB 262144
KEEPDUP_LOB 19267584
2 rows selected.
SQL>
注意重復消除段要小很多,空間節約依賴於LOB段內的重復程度,重復模式可以使用ALTER TABLE命令進行重新設置。
當前1/4頁 1234下一頁