oracle securefile bug,Oracle SecureFile的功能

初始化参数

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命令进行重新设置。

原文:http://www.jb51.net/article/18614.htm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值