技术开发 频道

点评Oracle11g新特性之SecureFiles

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

    压缩:使得可以明确地压缩SecureFiles来节省磁盘空间,I/O和记录重做日志的开销。
    数据路径优化:支持针对于SecureFiles的性能优化,包括
 动态设置是否使用缓存,并且避免污染对于高速缓存中的大的缓存的SecureFiles。
 利用事务COMMIT NOWAIT BATCH来达到同步或者异步。

 类似于文件服务器的脏缓存写,写缓存收集能够自动分期偿还空间分配、信息节点更新,记录重做日志的代价,并且允许磁盘大规模的I/O读写。

 针对于SecureFiles块的分布式锁管理器,这使用一个单一的分布式锁管理器来覆盖所有的SecureFilesLOB块,因此对于其他的文件系统来说LOB的性能会更好一些。

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

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

通过设置初始化参数DB_SECUREFILE来确定是否启用SecureFiles,这个参数可以设置为以下几个值:
 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的例子:
CREATE TABLE func_spec( id number, doc CLOB ENCRYPT USING 'AES128' ) LOB(doc) STORE AS SECUREFILE ( DEDUPLICATE LOB CACHE NOLOGGING ); 可以使用ALTER TABLE table_name MODIFY来修改当前的Securefiles的各种属性,例如: ALTER TABLE t1 MODIFY LOB(a) ( DEDUPLICATE LOB );
使用此命令能修改的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拷贝等等。大部分这些解决方案都要求使用两倍的磁盘空间来移植。然而,使用分区解决方案来移植可以按照每个分区来移植,从而有助于减少磁盘空间的需求。

0
相关文章