Oracle SecureFile的功能第1/4页

 更新时间:2009年06月17日 00:56:03   作者:  
Oracle SecureFile的功能
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命令进行重新设置。

相关文章

  • 在OracleE数据库的字段上建立索引的方法

    在OracleE数据库的字段上建立索引的方法

    在OracleE数据库的字段上建立索引的方法...
    2007-04-04
  • Oracle行级触发器的使用操作

    Oracle行级触发器的使用操作

    这篇文章主要介绍了Oracle行级触发器的使用,创建触发器并使用dblink在插入时进行数据同步,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • oracle生成动态前缀且自增号码的函数分享

    oracle生成动态前缀且自增号码的函数分享

    这篇文章主要介绍了oracle生成动态前缀且自增号码的函数,需要的朋友可以参考下
    2014-04-04
  • Oracle中手动删除数据库教程

    Oracle中手动删除数据库教程

    这篇文章主要介绍了Oracle中手动删除数据库教程,本文给出了详细步骤以及清除ASM数据库的步骤,需要的朋友可以参考下
    2014-10-10
  • Oracle中case when函数的用法

    Oracle中case when函数的用法

    这篇文章介绍了Oracle中case when函数的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Oracle表中已有数据修改字段类型方式

    Oracle表中已有数据修改字段类型方式

    这篇文章主要介绍了Oracle表中已有数据修改字段类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • oracle 将多张表中的列合并到一张表中

    oracle 将多张表中的列合并到一张表中

    这篇文章主要介绍了Oracle - 如何将多张表中的列合并到一张表中,需要的朋友可以参考下
    2019-11-11
  • ORACLE中段的HEADER_BLOCK示例详析

    ORACLE中段的HEADER_BLOCK示例详析

    这篇文章主要给大家介绍了关于ORACLE中段的HEADER_BLOCK的相关资料,文中通过是示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • Oracle表空间的创建、使用、重命名与删除方法

    Oracle表空间的创建、使用、重命名与删除方法

    表空间是Oracle数据库中的一个重要概念,它是一组物理文件,用于存储数据库对象,如表、索引等,在使用Oracle数据库时,通常需要创建表空间来存放数据,本文介绍了Oracle表空间的创建、使用、重命名与删除方法
    2024-03-03
  • Oracle 数据库操作类

    Oracle 数据库操作类

    我有对Oracle最基本的数据库操作做了最为简单的归类,希望可以对后来者有所参考。另外,这个类需要有日志记录类(日志记录在Xml文档中),我会在后面的文中在贴出来。
    2009-08-08

最新评论