将其创建为SecureFiles 还是BasicFiles。如果没有指定存储类型,LOB 将创建为BasicFiles以确保向后兼容性。
CREATE TABLE func_spec(
id number, doc CLOBENCRYPT USING 'AES128' )
LOB(doc) STORE ASSECUREFILE
(DEDUPLICATE LOB CACHE NOLOGGING);
上面的SQL,创建了一个名为FUNC_SPEC的表,用于将文档存储为SecureFiles。在该示例中指定不希望存储LOB 的重复内容、读取时将高速缓存LOB,并且对LOB 执行更新时不生成还原。此外,还指定将使用AES128 加密算法对存储在doc 列中的文档进行加密。与DEDUPLICATE 相反,KEEP_DUPLICATES 可用在ALTER语句中。
CREATE TABLE test_spec (
id number, doc CLOB)
LOB(doc) STORE AS SECUREFILE
(COMPRESS HIGH KEEP_DUPLICATES CACHENOLOGGING);
上面的SQL,创建一个名为TEST_SPEC的表,用于将文档存储为SecureFiles。对于此表,可以存储重复内容、LOB 将以压缩格式存储,并且将高速缓存LOB 而不进行记录。HIGH 压缩设置需要进行更多的工作,但可提供更有效的数据压缩。默认压缩是MEDIUM。压缩算法在服务器端实施,允许对LOB 数据进行随机读取和写入,可以通过ALTER 语句对其进行更改。
CREATE TABLE design_spec (id number, docCLOB)
LOB(doc) STORE AS SECUREFILE (ENCRYPT);
CREATE TABLE design_spec (id number,
doc CLOB ENCRYPT)
LOB(doc) STORE AS SECUREFILE;
上面2段代码都结果相同:使用默认的AES192加密创建具有SecureFilesLOB 列的表。
1.7 共享I/O池
为了支持共享内存(与程序全局区(PGA)相对)的大型I/O,OracleDatabase 11g 中新增了共享I/O 池内存组件,用于进行直接路径访问。这种情况仅适用于将SecureFiles 创建为NOCACHE 时(默认)。共享I/O 池默认大小为零,仅当存在SecureFiles NOCACHE 工作量时,系统才会将其大小增加到高速缓存的4%。由于这是共享资源,因此可由大型并发SecureFiles 工作量使用。与其它池(如大型池或共享池)不同,用户进程不会生成ORA-04031错误,但在释放更多共享I/O 池缓冲区之前会临时退回到PGA。
LOB 高速缓存是SecureFiles 体系结构中的新组件,通过收集和批处理数据以及重叠网络和磁盘I/O改进了LOB 访问性能。LOB高速缓存从缓冲区高速缓存(常规缓冲区或共享I/O 池的内存)借用内存。由于从缓冲区高速缓存借用的内存实质上适合于执行数据库I/O,并且适合在I/O 完成后回退到该缓冲区高速缓存,因此可以避免不必要的内存复制。
在多实例Oracle RealApplication Clusters 中,LOB 高速缓存为每个已访问的LOB 保留一个锁定。
1.8 更改SecureFiles
使用DEDUPLICATE 选项,可以指定在LOB 列的两行或多行中相同的LOB 数据共享同一数据块。KEEP_DUPLICATES 与此相反。Oracle使用安全的散列索引检测重复,并且将具有相同内容的LOB 合并到一个副本中,从而降低存储空间并简化存储管理。LOB 关键字是可选的,它可以使语法变得更清楚。
COMPRESS 或NOCOMPRESS 关键字分别启用或禁用LOB 压缩。新的压缩设置会更改LOB 段中的所有LOB。
ENCRYPT 或DECRYPT关键字可使用透明数据加密(TDE) 打开或关闭LOB 加密。新设置会更改LOB 段中的所有LOB。可将LOB 段更改为仅启用或仅禁用LOB 加密。也就是说,ALTER 不能用于更新加密算法或加密密钥。可使用ALTER TABLE REKEY 语法更新加密算法或加密密钥。结合使用其它选项,在块级别执行加密可以提高性能(可能为最小的加密量)。
相关示例:
ALTER TABLE t1
MODIFY LOB(a) ( KEEP_DUPLICATES );
ALTER TABLE t1
MODIFY LOB(a) ( DEDUPLICATE LOB );
ALTER TABLE t1
MODIFY PARTITION p1 LOB(a) ( DEDUPLICATELOB );
ALTER TABLE t1
MODIFY LOB(a) ( NOCOMPRESS );
ALTER TABLE t1
MODIFY LOB(a) (COMPRESS HIGH);
ALTER TABLE t1
MODIFY PARTITION p1 LOB(a) ( COMPRESS HIGH);
ALTER TABLE t1 MODIFY
( a CLOB ENCRYPT USING '3DES168');
ALTER TABLE t1 MODIFY PARTITION p1
( LOB(a) ( ENCRYPT );
ALTER TABLE t1 MODIFY
( a CLOB ENCRYPT IDENTIFIED BY ghYtp);
1.9 访问SecureFiles 元数据
DBMS_LOB 程序包:LOB 继承取消重复、加密和压缩的LOB 列设置,也可使用LOB 定位器API 在每个LOB 级别上进行配置。但是不能使用LONG API 配置这些LOB 设置。
必须为这些功能使用以下DBMS_LOB 程序包附加函数:
(1) DBMS_LOB.GETOPTIONS:可使用此函数获得设置。返回与基于选项类型的预定义常量相对应的整数。
(2) DBMS_LOB.SETOPTIONS:此过程设置功能并允许按LOB 设置这些功能,从而覆盖默认的LOB 设置。这需要往返服务器以使更改变成永久更改。
DBMS_SPACE.SPACE_USAGE:使现有SPACE_USAGE 过程超载,以返回有关LOB 空间使用情况的信息。它返回LOB 段中所有LOB 使用的块中的磁盘空间量。该过程仅可对使用ASSM 创建的表空间使用,并且不将属于BasicFiles 的LOB 块视为已使用的空间。
1.10 迁移到SecureFiles
使用LOB 接口超集,可轻松从BasicFile LOB 进行迁移。迁移到SecureFiles 有两种建议方法:分区交换和联机重新定义。
分区交换:
(1) 需要与表中最大分区相等的额外空间
(2) 可在交换期间维护索引
(3) 可将工作量分散到多个较小的维护窗口
(4) 要求表或分区脱机以执行交换
联机重新定义(建议做法)
(1) 不要求表或分区脱机
(2) 可并行进行
(3) 要求额外存储空间等于整个表,并且所有LOB 段均可用
(4) 要求重建所有全局索引
这些解决方案通常意味着使用输入LOB列中的数据所用磁盘空间两倍的空间。但是,使用分区和按分区执行这些操作有助于降低所需的磁盘空间。
1.11 SecureFiles 监视
为了显示SecureFiles 的使用情况,已对下列视图进行了修改:
(1) *_SEGMENTS
(2) *_LOBS
(3) *_LOB_PARTITIONS
(4) *_