IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    SecureFile LOBs and BasicFile LOBs

    冯 帅发表于 2015-07-16 07:47:13
    love 0
    oracle11g推出以后有了一种新的LOBS的存储模式叫做SecureFile LOBs 与之区别 把以前使用的叫做basicFile Lobs 根据官方文档上的说法 secure是哪哪都好。提供了压缩 重复消除 加密等新的功能 但是basicFile Lobs依然是default的 secureFime的用法是通过在LOB存储子句后添加SECUREFILE关键字来创建 最简单的一种写法: SQL> CREATE TABLE images ( 2 id NUMBER, 3 i_data CLOB 4 ) 5 LOB(i_data) STORE AS BASICFILE; Table created SQL> CREATE TABLE images2 (id NUMBER, 2 i_data CLOB 3 ) 4 LOB(i_data) STORE AS SECUREFILE; Table created. ——————————————————————————— Securefile列标明了是否为SecureFile类型的LOB SQL> SELECT TABLE_NAME,SEGMENT_NAME,INDEX_NAME,SECUREFILE FROM DBA_LOBS WHERE TABLE_NAME like ‘IMAGES%'; TABLE_NAME SEGMENT_NAME —————————— —————————— INDEX_NAME SEC —————————— — IMAGES SYS_LOB0000076951C00002$$ SYS_IL0000076951C00002$$ NO IMAGES2 SYS_LOB0000076948C00002$$ SYS_IL0000076948C00002$$ YES Securefile 使用Securefile LOB的表也是自动生成LOB segment和LOB index的。 但是此时LOB index只有在使用重复消除功能时才会使用,在其他情况下不会使用 SQL> CREATE TABLE images2 (id NUMBER, 2 i_data CLOB 3 ) 4 LOB(i_data) STORE AS SECUREFILE 5 ; CREATE TABLE images2 (id NUMBER, * ERROR at line 1: ORA-43853: SECUREFILE lobs cannot be used in non-ASSM tablespace “SYSTEM” 要注意,Securefile LOB只能在ASSM的表空间(自动管理的表空间)里创建, 不过既然从9i起ASSM表空间就是默认设置了,一般这里不会有多大问题。 只是要求SecureLOB所在的LOB列数据需要存放在ASSM表空间中,而包含LOB列的那个表可以不是 CREATE TABLE images2 (id NUMBER,i_data CLOB) LOB(i_data) STORE AS SECUREFILE (tablespace ucjmh); SQL> conn / as sysdba Connected. SQL> CREATE TABLE images2 (id NUMBER,i_data CLOB) LOB(i_data) STORE AS SECUREFILE (tablespace ucjmh); Table created. ————————————————————————————————– SQL> show parameter DB_SECUREFILE NAME TYPE VALUE ———————————— ———– —————————— db_securefile string PERMITTED 这个值的取值范围有: DB_SECUREFILE = { NEVER | PERMITTED | ALWAYS | IGNORE } PERMITTED 是默认的 就是当你指定是什么的时候就是什么 FORCE 是ORA-43853的来源 意思就是不管你是否指定用SecureFile 创建的时候都是用Securefile 如果不是在ASSM的表空间 那么就报ORA-43853 ALWAYS 意思就是不管你是否指定用SecureFile 创建的时候都是用Securefile 但是如果你是非ASSM的表空间 那就是BASICFILE 如果非ASSM的时候你还显示的指定了用SecureFiLE 那也报43853 NEVER 是不管怎么样都是BasicFile 如果指定了一些加密或压缩之类的参数那么就报ORA-43853 IGNORE 是不管怎么样都是BasicFile 如果指定了一些加密或压缩之类的参数也不报错。 chunk: 在BasicFile的LOB中,Chunk的大小是一定的,最小跟DB Block的大小一样,最大为32KB –一个chunk最多只保留一行LOB数据,也就是说,如果你设置了32K的CHUNK,但是如果LOB字段大小只有4K,也将占用32K的空间 而在SecureFile中,chunk的size是可变的,由Oracle自动动态分配,最小跟DB Block的大小一样,最大为64MB –指定的值最好是数据库块的倍数,而且指定的值不能大于表空间区间中NEXT的值 当指定enable storage in row的时候,当lob size =4000 bytes的时候,将存储在lob段里面,其存储方式和表段存储方式完全不一样,使用的是chunk为最小单位的存储,没有行迁移和行链接的概念。 如果设置了enable storage in row 那么oracle会自动将小于4000bytes的数据存储在行内, 这是ORACLE的默认值, 对于大于4000字节的lob字段保存在lob段(同disable storage in row),在表段将保留36-84字节的控制信息。 对于disable storage in row,Oracle将lob字段分开保存在lob段中,而仅仅在行位置保留20字节的指针。 对于相当于disable storage in row的这部分(也就是单独保存在LOB段的这部分数据),UNDO仅仅是记录指针与相关lob索引改变,如果发生更新操作等DML操作,原始数据将保留在LOB段 DISABLE STORAGE IN ROW:如果DISABLE这个属性,那么lob数据会在行外存储,行内只存储该lob值得指针,而且这个属性在表 storage as(cache|nocahce)表示是否允许lob段经过buffer cache并缓存。默认是nocache,表示直接读与直接写,不经过数据库的data buffer。所以,默认情况下,对于单独保存在LOB段的这部分数据,在发生物理读的时候,是直接读,如direct path read (lob) storage as(nocache logging |nocache nologging),logging/nologging属性只对nocache方式生效,默认是logging,如果是nologging方式,对于 保存在行外的log部分,在update等DML操作时将不记录redo日志 PCTVERSION integer、RETENTION:都是ORACLE用来管理LOB字段镜像数据的。在LOB 数据的更新过程中, ORACLE没有用UNDO TABLESPACE空间,而是从LOB字段所在的表空间里划分一段空间来做镜像空间的, 这个空间的大小由PCTVERSION参数控制,默认值为10,代表划分表空间的10%作为镜像空间, 每个镜像空间的单元大小由CHUNK参数指定,pctversion可以使用在manual undo mode和automatic undo mode 环境中 retention应用了automatic undo mode中的undo_retention通过时间来管理lob镜像空间. pctversion和retention不能同时被指定.建议数据库在automatic undo mode下使用retention参数 SecureFile的COMPRESS选项在表或分区一级上开启了对LOB内容的压缩,使用关键字MEDIUM和HIGH表示压缩的等级, 如果没有指定压缩等级,就默认为MEDIUM,对LOB内容进行压缩会增加系统开销, 因此使用高等级的压缩可能会对系统性能产生不良影响,SecureFile LOB的压缩功能不影响表压缩,反之亦然 SecureFile LOB的加密功能依赖于钱夹或硬件安全模型(HSM)掌管加密密钥,钱夹设置与透明数据加密(TDE)和表空间加密描述的一样, 因此在尝试下面的例子前先完成那两个实验。SecureFile的ENCRYPT选项执行块级别的LOB内容加密, 一个可选的USING子句定义了使用哪种加密算法(3DES168, AES128, AES192, 或AES256),默认使用AES192算法, NO SALT选项对于SecureFile加密不可用,加密是应用在每一列上的,因此它会影响所有使用LOB的分区,DECRPT选项用于明确地阻止加密 加密是不受imp/exp或表空间传输支持的,因此必须使用impdp/exddp来传输数据 BasicFile和SecureFile LOB共享了部分基础的缓存和日志选项,常见的缓存选项有: CACHE – LOB数据被放在缓冲区中。 CACHE READES – 仅读取LOB数据过程中它放在缓冲区中,写操作时不放进去。 NOCACHE – LOB数据不放在缓冲区中,这是BasicFile和SecureFile LOB的默认值。 基本的日志选项有: LOGGING – 创建和修改LOB时产生完全重做日志,这是默认设置。 NOLOGGING – 操作不记录在重做日志中,因此不能恢复,在首次创建和巨大的载入过程中有用。 而且,SecureFile LOB还有一个日志选项FILESYSTEM_LIKE_LOGGING,只记录元数据,在出现故障后仍然允许段的恢复。 CACHE选项意味着LOGGING,因此你不能将CACHE与NOLOGGING或FILESYSTEM_LIKE_LOGGING合在一起使用。 如果要移动表 ALTER TABLE table_name LOB (lob_item) STORE AS [lob_segment] ( TABLESPACE tablespace_name (STORAGE…..) ENABLE|DISABLE STORAGE IN ROW CHUNK integer PCTVERSION integer RETENTION FREEPOOLS integer CACHE|NOCACHE|CACHE READS INDEX lobindexname (TABLESPACE tablesapce_name ((STORAGE…..)) )


沪ICP备19023445号-2号
友情链接