Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103729595
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-05-19 15:20:37

作者: 黄永兵 出处: 
 

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';

加密是不受原来的导入导出工具或表空间传输支持的,因此必须使用数据泵导入导出工具来传输数据。

阅读(258) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~