下面是一个创建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拷贝等等。大部分这些解决方案都要求使用两倍的磁盘空间来移植。然而,使用分区解决方案来移植可以按照每个分区来移植,从而有助于减少磁盘空间的需求。
原文出处:http://tech.it168.com/db/2007-08-07/200708071158859.shtml