Oracle SecureFiles

        Oracle11g数据库新推出了一个完全重新设计的大对象(LOB)数据类型用于大幅度的提高性能、可管理性和简化应用的开发。这个全新的数据类型同时还提供了高级的下一代功能例如智能压缩、删除重复数据和透明加密等功能。

SecureFiles提供了如下的组件 
          压缩:可以明确地压缩SecureFiles来节省磁盘空间,降低I/O和记录重做日志的开销。 压缩等级分为低级压缩、中级压缩、高级压缩,默认是中级压缩级别。

       下面是建立压缩SecureFiles  LOB列的例子:         

        CREATE TABLE t1 (a CLOB)          

        LOB(a) STORE AS SECUREFILE(COMPRESS LOW  );        --COMPRESS 后加LOW为低级压缩,加HIGH为高级压缩,什么也 不加为默认中级压缩,将COMMPRESS改为NOCOMMPRESS为不压缩。

创建一个分区压缩SecureFiles的LOB列
CREATE TABLE t1 (REGION  VARCHAR2(20), a BLOB)
LOB(a) STORE AS SECUREFILE (CACHE) 
PARTITION BY LIST (REGION)
  PARTITION p1 VALUES ('x', 'y')
  LOB(a) STORE AS SECUREFILE(COMPRESS), 
  PARTITION p2 VALUES (DEFAULT) 
);

        删除重复数据:自动检测重复的SecureFiles LOB数据并且只保留一份拷贝空间来实现节省磁盘存储,减少I/O和重做日志记录的消耗。删除重复数据操作可以在表级或者是分区级别上指定,但是不能跨越分区的LOBS。示例如下:      

CREATE TABLE t1 ( a CLOB) 

LOB(a) STORE AS SECUREFILE

(DEDUPLICATE);       --DEDUPLICATE为删除重复记录,KEEP_DUPLICATES为不删除重复记录。

在一个分区上创建一个重复数据删除SecureFiles的LOB列 
CREATE TABLE t1 
(
 REGION VARCHAR2(20), a BLOB
)  
LOB(a) STORE AS SECUREFILE 
(CACHE)  
PARTITION BY LIST (REGION) 
(
 PARTITION p1 VALUES ('x', 'y')
 LOB(a) STORE AS SECUREFILE 
 (DEDUPLICATE),
 PARTITION p2 VALUES (DEFAULT)
);

       加密:加密存储LOB数据并且可以任意的读和写来提供更强大的数据安全性。

       encrypt_algorithm表示的加密算法的名称。有效的算法是:AES192(默认),3DES168,AES128和AES256。

创建一个特定的加密算法SecureFiles的LOB列
CREATE TABLE t1 (a CLOB ENCRYPT   USING 'AES128')
  LOB(a) STORE AS SECUREFILE (CACHE);
创建一个指定密钥的SecureFiles的LOB列
CREATE TABLE t1 ( a CLOB ENCRYPT IDENTIFIED BY foo)
  LOB(a) STORE AS SECUREFILE (CACHE);


        数据路径优化:支持针对于SecureFiles的性能优化,包括动态设置是否使用缓存,并且避免污染对于高速缓存中的大的缓存的SecureFiles。
    利用事务COMMIT NOWAIT BATCH来达到同步或者异步。
    类似于文件服务器的脏缓存写,写缓存收集能够自动分期偿还空间分配、信息节点更新,记录重做日志的代价,并且允许磁盘大规模的I/O读写。
    针对于SecureFiles块的分布式锁管理器,这使用一个单一的分布式锁管理器来覆盖所有的SecureFilesLOB块,因此对于其他的文件系统来说LOB的性能会更好一些。 

        信息节点:针对于SecureFiles的新的存储架构被设计和实现用于支持高性能的访问目标数据。除了提高基础数据访问之外,新的存储架构也支持丰富的功能,保证最小的性能代价,这些功能例如:
 固有的压缩和加密
 数据共享
 用户控制的版本
    COMPATIBLE初始化参数比较要设置为11.1或者更高才可以使用SecureFiles。 
是否启用SecureFiles

        可以init.ora文件中设置db_securefile初始化参数来确定是否启用SecureFiles,这个参数是动态参数,可通过alter sysytem命令修改,该参数有以下几个值:

        PERMITTED:允许创建SecureFiles(默认)  

        NEVER:不允许创建SecureFiles   

        ALWAYS:强制所有的LOBs都必须要创建SecureFiles  

        IGNORE:不允许创建SecureFiles并且忽略由强制BasicFiles使用SecureFiles特性而引起的任何错误。 
        如果指定值为NEVER,任何LOBs都将以BasicFiles来创建,所有的指定的SecureFiles的存储选项和特性都将引起一个意外。
        如果指定值为ALWAYS,所有系统中的LOBs都以SecureFiles来创建,LOB必须在ASSM(Automatic Segment Space Management)表空间中创建,否则会产生错误。任何指定的BasicFile存储选项都将会被忽略。

SecureFiles属性
       DEDUPLICATE/KEEP_DUPLICATES: DEDUPLICATE选项允许指定在一个LOB列中有两行或者更多行的时候,所有行都共享同样的数据块。相反的就是KEEP_DUPLICATES选项。Oracle11g数据库使用一个安全的哈希索引来检测重复性并且联合LOBs的内容到一个单一的拷贝里面,减少存储空间并且简化存储管理。
 VALIDATE:对SecureFiles执行一个字节到字节的比较,确定SecureFiles都是同样的安全哈希值。
 COMPRESS/NOCOMPRESS:决定是否启用LOB压缩。
 ENCRYPT/DECRYPT:决定是否启用LOB加密。如果一旦设置好了加密,就只能用ALTER TABLE REKEY命令来更新加密算法或者是加密值。
 RETENTION:只能影响使用ALTER TABLE语句之后所创建的空间。 
对于Securefiles的访问

     Oracle11g数据库是通过使用DBMS包来实现的。主要是通过DBMS_LOB包和DBMS_SPACE包来访问。
     DBMS_LOB包:LOBs继承LOB列的设定的属性,当然也可以通过LOB locator API配置成每个LOB级别上。但是LONG API不能用于配置这些LOB设定,必须使用DBMS_LOB包来设定这些属性:
 DBMS_LOB.GETOPTIONS:可以用来获取设定,每个选项类型的预定义的一个常量对应于一个整数将会返回。
 DBMS_LOB.SETOPTIONS:用于设定特性并且允许在每一个LOB基础上设定特性,会覆盖所有默认的LOB设定。
 DBMS_LOB.GET_DEDUPLICATE_REGIONS:这个存储过程用于输出在一个LOB中不重复区域的记录收集。LOB级别上只包含一个不重复区域。
 DBMS_SPACE.SPACE_USAGE:这个存储过程用于返回LOB空间使用的负载信息。返回在LOB段中所有LOB使用的磁盘空间的blocks的数量。这个存储过程目前只能用于ASSM创建的表空间,不支持属于BasicFiles那部分LOB使用的空间。
从BasicFiles移植SecureFiles

       有两种推荐的方法来移植。这两种方法分别是交换分区和在线重定义。
交换分区:
   需要和表中最大的分区相等的额外空间
   在交换的时候可以维护索引
   能够在几个小的维护窗口延展工作负载
   执行交换分区的时候需要将表或者分区离线

在线重定义:
   不要求表或者分区离线
   可以被并行的执行
   要求额外的等于整个表或者所有LOB段大小的可用空间
   要求必须重建所有的全局索引

  如果你想升级你的BasicFiles到SecureFiles,你可以使用传统的方法来升级数据,例如CTAS/ITAS、export/import、column-to-column拷贝等等。大部分这些解决方案都要求使用两倍的磁盘空间来移植。然而,使用分区解决方案来移植可以按照每个分区来移植,从而有助于减少磁盘空间的需求。

你可能感兴趣的:(Oracle)