Oracle SecureFile的功能第1/4頁

來源:互聯網
上載者:User

SecureFile功能是oracle 11g中對大對象(LOB)儲存格式的完全重新設計實現,原來的LOB儲存格式現在通稱為BASIXFILE,它仍然是預設的儲存方法,但是SECURFILE關鍵字開啟了新的儲存方法,它允許加密、利用壓縮節約空間和資料重複消除。

  初始化參數

  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命令進行重新設定。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.