我所了解的oracle11g新特性securefiles
Oracle数据库11g第1版开始,Oracle引入SecureFiles,一个新的LOB存储架构。SecureFiles对大对象(LOB)数据类型可以大幅度的提高性能、可管理性和简化应用的开发。
可以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存储选项都将会被忽略 。
不能在非ASSM管理的空间system表空间使用securefiles 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 SECUREFIL-0-E ( CACHE );
下面是一个创建压缩、删除重复记录和透明加密Securefiles
LOB的例子:
create table t1( id number,a blob) lob(a) store as securefile( compress deduplicate encrypt identified by "xxxx");
可以使用ALTER TABLE table_name MODIFY来修改当前的Securefiles的各种属性。
例如:
修改LOB列为压缩
ALTER TABLE t1 MODIFY LOB(a) (COMPRESS);
修改LOB列为删除重复记录
ALTER TABLE t1 MODIFY LOB(a) (DEDUPLICATE);
修改LOB列为透明加密
ALTER TABLE t1 MODIFY LOB(a) (ENCRYPT IDENTIFIED BY XXXX);
在创建和修改LOB列加密的时候,可能会遇到ORA-28368无法自动创建wallet和ORA-28353wallet未打开错误,原因是wallet密钥的存放目录不存在,解决方法是创建密钥存放的默认目录或者在sqlnet.ora文件中指定密钥的存放目录。