一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Oracle - Oracle SecureFile的功能

Oracle SecureFile的功能

2019-11-01 15:02Oracle教程網 Oracle

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

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

ALTER TABLE deduplicate_tab MODIFY LOB(clob_data) ( 
  KEEP_DUPLICATES 
  ); 
  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 76808192 
  KEEPDUP_LOB 68091904 
  2 rows selected. 
  SQL>

  LOB壓縮

  SecureFile的COMPRESS選項在表或分區一級上開啟了對LOB內容的壓縮,使用關鍵字MEDIUM和HIGH表示壓縮的等級,如果沒有指定壓縮等級,就默認為MEDIUM,對LOB內容進行壓縮會增加系統開銷,因此使用高等級的壓縮可能會對系統性能產生不良影響,SecureFile LOB的壓縮功能不影響表壓縮,反之亦然,下面的例子對比了使用普通的SecureFile LOB和啟用壓縮功能的SecureFile LOB的空間利用情況。

 


  CREATE TABLE nocompress_tab ( 
  id NUMBER, 
  clob_data CLOB 
  ) 
  LOB(clob_data) STORE AS SECUREFILE nocompress_lob( 
  NOCOMPRESS 
  ); 
  CREATE TABLE compress_tab ( 
  id NUMBER, 
  clob_data CLOB 
  ) 
  LOB(clob_data) STORE AS SECUREFILE compress_lob ( 
  COMPRESS HIGH 
  ); 
  DECLARE 
  l_clob CLOB := RPAD('X', 10000, 'X'); 
  BEGIN 
  FOR i IN 1 .. 1000 LOOP 
  INSERT INTO nocompress_tab VALUES (i, l_clob); 
  END LOOP; 
  COMMIT
  FOR i IN 1 .. 1000 LOOP 
  INSERT INTO compress_tab VALUES (i, l_clob); 
  END LOOP;

ALTER TABLE deduplicate_tab MODIFY LOB(clob_data) ( 
  KEEP_DUPLICATES 
  ); 
  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 76808192 
  KEEPDUP_LOB 68091904 
  2 rows selected. 
  SQL>

 

  LOB壓縮

  SecureFile的COMPRESS選項在表或分區一級上開啟了對LOB內容的壓縮,使用關鍵字MEDIUM和HIGH表示壓縮的等級,如果沒有指定壓縮等級,就默認為MEDIUM,對LOB內容進行壓縮會增加系統開銷,因此使用高等級的壓縮可能會對系統性能產生不良影響,SecureFile LOB的壓縮功能不影響表壓縮,反之亦然,下面的例子對比了使用普通的SecureFile LOB和啟用壓縮功能的SecureFile LOB的空間利用情況。

 


  CREATE TABLE nocompress_tab ( 
  id NUMBER, 
  clob_data CLOB 
  ) 
  LOB(clob_data) STORE AS SECUREFILE nocompress_lob( 
  NOCOMPRESS 
  ); 
  CREATE TABLE compress_tab ( 
  id NUMBER, 
  clob_data CLOB 
  ) 
  LOB(clob_data) STORE AS SECUREFILE compress_lob ( 
  COMPRESS HIGH 
  ); 
  DECLARE 
  l_clob CLOB := RPAD('X', 10000, 'X'); 
  BEGIN 
  FOR i IN 1 .. 1000 LOOP 
  INSERT INTO nocompress_tab VALUES (i, l_clob); 
  END LOOP; 
  COMMIT
  FOR i IN 1 .. 1000 LOOP 
  INSERT INTO compress_tab VALUES (i, l_clob); 
  END LOOP;



COMMIT
  END; 
  / 
  EXEC DBMS_STATS.gather_table_stats(USER, 'nocompress_tab'); 
  EXEC DBMS_STATS.gather_table_stats(USER, 'compress_tab'); 
  COLUMN segment_name FORMAT A30 
  SELECT segment_name, bytes 
  FROM user_segments 
  WHERE segment_name IN ('COMPRESS_LOB', 'NOCOMPRESS_LOB'); 
  SEGMENT_NAME BYTES 
  ------------------------------ ---------- 
  COMPRESS_LOB 131072 
  NOCOMPRESS_LOB 71565312 
  2 rows selected. 
  SQL>

 

 

 

  我們可以看到壓縮的LOB段比沒有壓縮的LOB段明顯要小得多,空間節約的程度依賴于LOB段數據的存儲類型。

  可以使用ALTER TABLE命令重新設置壓縮模式。

 


  ALTER TABLE compress_tab MODIFY LOB(clob_data) ( 
  NOCOMPRESS 
  ); 
  EXEC DBMS_STATS.gather_table_stats(USER, 'compress_tab'); 
  COLUMN segment_name FORMAT A30 
  SELECT segment_name, bytes 
  FROM user_segments 
  WHERE segment_name IN ('COMPRESS_LOB', 'NOCOMPRESS_LOB'); 
  SEGMENT_NAME BYTES 
  ------------------------------ ---------- 
  COMPRESS_LOB 76808192 
  NOCOMPRESS_LOB 71630848 
  2 rows selected. 
  SQL>

 

  LOB加密

  SecureFile LOB的加密功能依賴于錢夾或硬件安全模型(HSM)掌管加密密鑰,錢夾設置與透明數據加密(TDE)和表空間加密描述的一樣,因此在嘗試下面的例子前先完成那兩個實驗。

  SecureFile的ENCRYPT選項執行塊級別的LOB內容加密,一個可選的USING子句定義了使用哪種加密算法(3DES168, AES128, AES192, 或AES256),默認使用AES192算法,NO SALT選項對于SecureFile加密不可用,加密是應用在每一列上的,因此它會影響所有使用LOB的分區,DECRPT選項用于明確地阻止加密,下面的例子顯示了使用加密的SecureFile LOB數據類型創建表。

 


  CREATE TABLE encrypt_tab ( 
  id NUMBER, 
  clob_data CLOB 
  ) 
  LOB(clob_data) STORE AS SECUREFILE encrypt_lob( 
  ENCRYPT USING 'AES256' 
  );

 

ALTER TABLE命令可以用于加密或解密現有的列,要切換加密算法你必須使用REKEY選項。

 


 ALTER TABLE encrypt_tab MODIFY ( 
  clob_data CLOB DECRYPT 
  ); 
  ALTER TABLE encrypt_tab MODIFY ( 
  clob_data CLOB ENCRYPT USING '3DES168' 
  ); 
  ALTER TABLE encrypt_tab REKEY USING 'AES192';

 

  加密是不受原來的導入導出工具或表空間傳輸支持的,因此必須使用數據泵導入導出工具來傳輸數據。

  LOB緩存和日志

  BasicFile和SecureFile LOB共享了部分基礎的緩存和日志選項,常見的緩存選項有:

  ◆CACHE - LOB數據被放在緩沖區中。

  ◆CACHE READES - 僅讀取LOB數據過程中它放在緩沖區中,寫操作時不放進去。

  ◆NOCACHE - LOB數據不放在緩沖區中,這是BasicFile和SecureFile LOB的默認值。

  基本的日志選項有:

  ◆LOGGING - 創建和修改LOB時產生完全重做日志,這是默認設置。

  ◆NOLOGGING - 操作不記錄在重做日志中,因此不能恢復,在首次創建和巨大的載入過程中有用。

  而且,SecureFile LOB還有一個日志選項FILESYSTEM_LIKE_LOGGING,只記錄元數據,在出現故障后仍然允許段的恢復。

  CACHE選項意味著LOGGING,因此你不能將CACHE與NOLOGGING或FILESYSTEM_LIKE_LOGGING合在一起使用。

  下面的代碼顯示了一個在表創建過程中和創建后明確設置了緩存和日志選項的例子。

 


  CREATE TABLE caching_and_logging_tab ( 
  id NUMBER, 
  clob_data CLOB 
  ) 
  LOB(clob_data) STORE AS SECUREFILE( 
  NOCACHE 
  FILESYSTEM_LIKE_LOGGING 
  ); 
  ALTER TABLE caching_and_logging_tab MODIFY LOB(clob_data) ( 
  CACHE 
  ); 
  PL/SQL API

 

 

DBMS_LOB包用于訪問BasicFile和SecureFile LOB,SETOPTIONS存儲過程和GETOPTIONS函數允許在每個LOB列上設置壓縮、加密和重復消除選項。

 


  CREATE TABLE securefile_tab ( 
  id NUMBER, 
  clob_data CLOB 
  ) 
  LOB(clob_data) STORE AS SECUREFILE securefile_lob( 
  encrypt 
  compress 
  ); 
  INSERT INTO securefile_tab VALUES (1, 'ONE'); 
  INSERT INTO securefile_tab VALUES (2, 'TWO'); 
  COMMIT
  SET SERVEROUTPUT ON 
  DECLARE 
  l_clob CLOB; 
  BEGIN 
  SELECT clob_data 
  INTO l_clob 
  FROM securefile_tab 
  WHERE id = 1 
  FOR UPDATE; 
  DBMS_OUTPUT.put_line('Compression : ' || DBMS_LOB.getoptions(l_clob, DBMS_LOB.opt_compress)); 
  DBMS_OUTPUT.put_line('Encryption : ' || DBMS_LOB.getoptions(l_clob, DBMS_LOB.opt_encrypt)); 
  DBMS_OUTPUT.put_line('Deduplication: ' || DBMS_LOB.getoptions(l_clob, DBMS_LOB.opt_deduplicate)); 
  ROLLBACK
  END; 
  /

 

  DBMS_SPACE包括SPACE_USAGE存儲過程,它返回有關所有LOB段中的LOB磁盤空間的消耗情況,這個存儲過程也可以用于ASSM表空間。

 


  SET SERVEROUTPUT ON 
  DECLARE 
  l_segment_size_blocks NUMBER; 
  l_segment_size_bytes NUMBER; 
  l_used_blocks NUMBER; 
  l_used_bytes NUMBER; 
  l_expired_blocks NUMBER; 
  l_expired_bytes NUMBER; 
  l_unexpired_blocks NUMBER; 
  l_unexpired_bytes NUMBER; 
  BEGIN 
  DBMS_SPACE.SPACE_USAGE( 
  segment_owner => 'TEST', 
  segment_name => 'SECUREFILE_LOB',

 

segment_type => 'LOB', 
  segment_size_blocks => l_segment_size_blocks, 
  segment_size_bytes => l_segment_size_bytes, 
  used_blocks => l_used_blocks, 
  used_bytes => l_used_bytes, 
  expired_blocks => l_expired_blocks, 
  expired_bytes => l_expired_bytes, 
  unexpired_blocks => l_unexpired_blocks, 
  unexpired_bytes => l_unexpired_bytes); 
  DBMS_OUTPUT.put_line('segment_size_blocks:' || l_segment_size_blocks); 
  DBMS_OUTPUT.put_line('segment_size_bytes :' || l_segment_size_bytes); 
  DBMS_OUTPUT.put_line('used_blocks :' || l_used_blocks); 
  DBMS_OUTPUT.put_line('used_bytes :' || l_used_bytes); 
  DBMS_OUTPUT.put_line('expired_blocks :' || l_expired_blocks); 
  DBMS_OUTPUT.put_line('expired_bytes :' || l_expired_bytes); 
  DBMS_OUTPUT.put_line('unexpired_blocks :' || l_unexpired_blocks); 
  DBMS_OUTPUT.put_line('unexpired_bytes :' || l_unexpired_bytes); 
  END; 
  /

 

 

  遷移到SecureFile

  目前還沒有方法可以自動將一個BasicFile列遷移到SecureFile LOB列,相反,你必須使用下面的方法手動轉換數據:

  ◆CREATE TABLE ... AS SELECT ...

  ◆INSERT INTO ... SELECT ...

  ◆表在線重定義

  ◆導出/導入

  ◆創建一個新列,用原始列的值更新新列,然后刪除舊列

  ◆創建一個新列,用原始列的值更新新列,重命名表,用原始表名創建一個僅引用新列的視圖

  除導出/導入方法外,在轉換包含有大量數據的LOB時,所有選項都需要注意磁盤空間的數量。

  oralce流目前不支持SecureFile,因此要避免遷移使用了流的LOB對象。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 香蕉eeww99国产精选播放 | 我的妹妹最近有点怪在线观看 | 日本人和黑人一级纶理片 | 99视频精品全部 在线 | 亚洲欧洲日产国码天堂 | 午夜综合网| bbox撕裂bass孕妇 | 青青在线视频免费 | 全肉一女n男np高h乳 | 国产免费又粗又猛又爽视频国产 | 国产自拍视频一区 | 二次元美女内裤凹陷太深 | 亚洲国产精品综合久久一线 | www.尤物在线 | jizzjizz成熟丰满舒服 | 4444kk在线看片 | 国产卡一卡二卡三乱码手机 | 精品videoss另类日本 | 男生同性视频twink在线 | 国产在线激情视频 | 国产a免费 | 欧美一级高清片免费一级 | jux629三浦理惠子在线播放 | 午夜国产精品视频在线 | 欧乱色国产精品兔费视频 | 国产免费一区二区三区 | 国产精品每日在线观看男人的天堂 | 国产精品亚洲片夜色在线 | 日韩免费在线观看 | 91麻豆精品国产91久久久 | ysl千人千色t9t9t9 | 国产在线98福利播放视频免费 | 午夜理论电影在线观看亚洲 | 国产成人精品免费大全 | 毛片一级免费 | 国产午夜精品一区二区三区不卡 | 黑人粗又长 | 日产精品一二三四区国产 | 免费高清在线观看 | 亚洲欧美日韩另类精品一区二区三区 | 国产成人久久精品区一区二区 |