IT系统不仅需要存储和处理大量的传统结构化数据,而且对各类半结构化,例如XML文档、Word文档等,以及非结构化的图片、图像、视频等信息的处理需求也日益增长。Oracle自8i开始就推出了大对象(LOB)技术,用于存储半结构化和非结构化的数据。
本章将首先介绍传统LOB技术的运用,并总结传统LOB技术的不足,然后将介绍Oracle 11g新一代的大对象处理技术:SecureFiles,以及将传统LOB向SecureFiles进行迁移的相关技术,最后介绍相关案例和进一步的参考资料。
LOB字段分为存储二进制的BLOB字段、存储字符类型的CLOB、存储国家字符集的NCLOB,以及存储外部文件的BFILE等类型。LOB字段的设计和使用并不复杂,例如,以下就是创建一个包含LOB字段表的语句:
CREATE TABLE print_media ( product_id NUMBER(6) , ad_id NUMBER(6) , ad_composite BLOB , ad_sourcetext CLOB , ad_finaltext CLOB , ad_fltextn NCLOB , ad_textdocs_ntab textdoc_tab , ad_photo BLOB , ad_graphic BFILE);
LOB字段在物理设计和应用开发中,都具有独特的技术特征。以下是Oracle顾问根据国内外不同项目实施LOB字段的经验,提出的LOB表物理设计基本原则。这些原则的贯彻,将有效提高LOB字段的可管理型和性能:
为方便管理和处理的高性能,建议所有LOB字段单独建立表空间,并为每个LOB数据段单独命名。LOB表空间和数据段命名规则如下:
类型 | 命名 |
LOB表空间 | TS_<基表名>_<LOB字段名> |
LOB数据段 | SEG_<基表名>_<LOB字段名> |
如果在LOB字段建立索引,Oracle将LOB索引与LOB数据共同存储在LOB表空间。因此不需要建立LOB索引表空间。
另外建议LOB表空间的物理参数设计如下:
管理方式 | 分配方式 | Uniform Size(M) | 段空间管理 |
LOCAL | UNIFORM | 256 | AUTO |
LOCAL | UNIFORM | 256 | AUTO |
通过ENABLE/DISABLE STORAGE IN ROW的设置,当LOB字段值(包括控制信息)小于4K时,Oracle可将LOB字段值直接保存在基表或LOB段。
ENABLE STORAGE IN ROW为缺省值,其优点如下:
DISABLE STORAGE IN ROW的优点如下:
基于上述特点分析,我们通常建议所有LOB表均采用DISABLE STORAGE IN ROW技术,即基表记录和LOB字段值完全分开存储,代价是空间消耗较大。
CHUNK值表示通过OCI或PL/SQL等访问LOB字段时,一次读取或写入LOB的数据量,缺省为一个数据块。CHUNK一般是数据块的倍数。
在某系统中,我们建议将CHUNK设定每个LOB字段的平均长度或频率最高的长度。即数据包的平均长度,例如,1M,2M等。
当LOB字段值(文稿)被修改时,Oracle将在LOB数据段保存原来的LOB值版本,以提供读取的一致性。
PCTVERSION表示了老版本LOB的消耗空间比例,缺省值为10%。PCTVERSION值主要取决于如下两个因素:
根据上述原理,我们为该系统的LOB字段的PCTVERSION值的确定,制定如下设置原则:
LOB值修改频率 | 读被修改的LOB频率 | PCTVERSION |
高 | 高 | 20 |
高 | 低 | 10 |
低 | 高 | 10 |
低 | 低 | 5 |
没有 | 没有 | 0 |
Oracle在对LOB字段的处理时,可提供如下三种内存处理的方式:
根据上述原理,我们在该系统建立如下原则:
CACHE方式 | 读频度 | 写频度 |
CACHE | 高 | 高 |
NOCACHE | 低 | 低 |
CACHE READS | 高 | 低 |
同普通表的处理类似,LOB表日志方式的设计决定了日志文件的产生量和数据的可恢复性。以下是该系统LOB表日志文件的设计原则建议:
根据客户提供的LOB表结构设计和处理特性分析,遵循上述LOB字段的设计原则,我们对该系统的LOB表字段设计如下:
表名称 | LOB字段 | LOB表空间名 | LOB数据段名 | 大小(G) | CHUNK | PCTVERSION | CACHE |
TB_URLCONTENT | F_CONTENTS CLOB | TS_TB_URLCONTENT_F_CONTENTS | SEG_TB_URLCONTENT_F_CONTENTS | 23 | 4096 | 5 | CACHE READS |
F_SNAPSHOT CLOB | TS_TB_URLCONTENT_F_SNAPSHOT | SEG_TB_URLCONTENT_F_SNAPSHOT | 23 | 4096 | |||
TB_MATERIAL | F_CONTENTS CLOB | TS_TB_MATERIAL_F_CONTENTS | SEG_TB_MATERIAL_F_CONTENTS | 16 | 4096 | 20 | CACHE |
TB_URLIMAGE | F_PICS BLOB | TS_TB_URLIMAGE_F_PICS | SEG_TB_URLIMAGE_F_PICS | 92 | 16384 | 10 | CACHE READS |
… | … | … | … | … | … | … | … |
以下就是LOB表的创建语句样本:
CREATE TABLE TB_URLCONTENT ( ... ... F_CONTENTS CLOB, F_SNAPSHOT CLOB, ... ... ) LOB (F_CONTENTS) STORE AS SEG_TB_URLCONTENT_F_CONTENTS ( TABLESPACE TS_TB_URLCONTENT_F_CONTENTS CHUNK 4096 PCTVERSION 5 CACHE READS LOGGING STORAGE(MAXEXTENTS UNLIMITED) DISABLE STORAGE IN ROW);
通过上述传统LOB技术的使用,可见欲做到充分满足LOB字段的可管理性和性能需求,还是需要下一番功夫的,而且传统LOB技术本身的如下局限,已很难满足高速增长的需求。
例如,我们在分析某系统过程中发现,该系统数据库总容量640GB,其中LOB字段共消耗了600GB,最主要的两个LOB字段就消耗了550GB,占了数据库总量的85%以上,而且还在高速增长中。实际上,该系统的LOB字段存在大量重复数据和可压缩空间。
传统LOB字段有CHUNK、LOGGING/NOLOGGING、PCTVERSION、CACHE/NOCACHE/CACHE READS、ENABLE/DISABLE STORAGE IN ROW等大量物理属性。根据每个LOB字段访问特征的不同,合理地设计这些物理属性,才能在存储效率、访问性能等方面达到良好的效果。但国内大部分采用LOB字段的IT系统,几乎缺乏这些物理属性的定制化设计,而是采用Oracle的缺省物理属性,这种状况很难满足需求。例如,CACH参数缺省值为NO,即Oracle在缺省情况下,读取LOB字段时没有进行缓存,显然不能满足LOB字段读写频度较高的需求。
传统LOB字段存在一些明显的局限。例如存储数据容量有限,通常是几兆数据;CHUNK属性不仅为定长,而且有上限(32K),容易导致大量碎片;LOB字段对OLTP应用支持不好;在 RAC环境下,LOB字段会导致应用扩展性不好,等等。
为有效解决现有LOB字段技术存在的上述问题,Oracle 公司在11g版本中推出了针对 LOB字段处理的新技术:SecureFiles。该技术在性能、可管理性、易用性等方面,具有如下具体特点和优势:
SecureFiles不仅可以有效降低LOB字段存储空间消耗,提高了访问效率,而且提高了LOB字段的数据安全性。
以上述某系统为例,我们将其中一个100GB的LOB字段转换为SecureFiles,并采用压缩技术之后,最终只消耗30GB空间,大大压缩了存储空间。
SecureFiles提供一种新的Client/Server方式的内部读写机制,有效提高了大量数据传输的效率。
SecureFiles提供了大量自动化的物理属性机制,免去了大量物理属性设计和管理工作。例如:CHUNK属性为可变长,最大能支持到64M;Oracle能自动进行碎片整理;SecureFiles还自动进行redo和undo的管理,避免大量不必要的redo和 undo信息的产生。
由于SecureFiles技术的推出,Oracle从11g开始将传统LOB技术称之为BASICFILE。
通过新的初始化参数DB_SECUREFILE,DBA可控制如何使用SecureFiles。DB_SECUREFILE的取值和含义如下:
以下语句创建一个包含LOB字段的表,并且具有去重功能,另外具有缓存、不保留日志的功能。
CREATE TABLE func_spec( id number, doc CLOB) LOB(doc) STORE AS SECUREFILE (DEDUPLICATE LOB CACHE NOLOGGING);
以下语句创建一个包含LOB字段的表,并且具有高密度压缩、但不去重功能,另外具有缓存、不保留日志的功能。
CREATE TABLE test_spec ( id number, doc CLOB) LOB(doc) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING);
以下语句创建一个包含LOB字段的表,并且具有透明加密功能。
CREATE TABLE design_spec (id number, doc CLOB) LOB(doc) STORE AS SECUREFILE (ENCRYPT);
以下语句关闭去重功能:
ALTER TABLE t1 MODIFY LOB(a) ( KEEP_DUPLICATES );
以下语句开启去重功能:
ALTER TABLE t1 MODIFY LOB(a) ( DEDUPLICATE LOB );
以下语句关闭压缩功能:
ALTER TABLE t1 MODIFY LOB(a) ( NOCOMPRESS );
以下语句针对某个分区开启压缩功能:
ALTER TABLE t1 MODIFY PARTITION p1 LOB(a) ( COMPRESS HIGH );
通过查询*_SEGMENTS、*_LOBS、*_LOB_PARTITIONS、*_PART_LOBS等视图,可了解LOB字段的相关信息。例如,如下语句将查询SECF_TBS2表空间中的LOB字段信息:
SQL> SELECT segment_name, segment_type, segment_subtype 2 FROM dba_segments 3 WHERE tablespace_name = 'SECF_TBS2' 4 AND segment_type = 'LOBSEGMENT' 5 / SEGMENT_NAME SEGMENT_TYPE SEGMENT_SU ---------------------------- ------------------ ---------- SYS_LOB0000071583C00004$$ LOBSEGMENT SECUREFILE
另外,通过DBMS_LOB.GETOPTIONS可查询SecureFiles类型的LOB字段的相关选项,例如是否去重、压缩或加密。通过DBMS_LOB.SETOPTIONS可进行相应的设置工作。通过DBMS_SPACE.SPACE_USAGE可查询SecureFiles类型的LOB字段的空间消耗情况。
上述操作的详细语句略,详细情况请见Oracle 11g联机文档的《Oracle® Database PL/SQL Packages and Types Reference》有关DBMS_LOB包的说明。
通过普通技术,例如CTAS/ITAS、Export/Import等可以将传统LOB字段转换为SecureFiles,但这些技术可能导致业务停顿时间过长。下面介绍两种更有效的技术:
通过在线重定义技术(Online Redefinition),可在业务不停顿的情况下,将传统LOB字段转换为SecureFiles。例如:
REM Grant privileges required for online redefinition. GRANT EXECUTE ON DBMS_REDEFINITION TO pm; GRANT ALTER ANY TABLE TO pm; GRANT DROP ANY TABLE TO pm; GRANT LOCK ANY TABLE TO pm; GRANT CREATE ANY TABLE TO pm; GRANT SELECT ANY TABLE TO pm; REM Privileges required to perform cloning of dependent objects. GRANT CREATE ANY TRIGGER TO pm; GRANT CREATE ANY INDEX TO pm; CONNECT pm DROP TABLE cust; CREATE TABLE cust(c_id NUMBER PRIMARY KEY, c_zip NUMBER, c_name VARCHAR(30) DEFAULT NULL, c_lob CLOB ); INSERT INTO cust VALUES(1, 94065, 'hhh', 'ttt'); -- Creating Interim Table -- There is no need to specify constraints because they are -- copied over from the original table. CREATE TABLE cust_int(c_id NUMBER NOT NULL, c_zip NUMBER, c_name VARCHAR(30) DEFAULT NULL, c_lob CLOB ) LOB(c_lob) STORE AS SECUREFILE (NOCACHE FILESYSTEM_LIKE_LOGGING); DECLARE col_mapping VARCHAR2(1000); BEGIN -- map all the columns in the interim table to the original table col_mapping := 'c_id c_id , '|| 'c_zip c_zip , '|| 'c_name c_name, '|| 'c_lob c_lob'; DBMS_REDEFINITION.START_REDEF_TABLE('pm', 'cust', 'cust_int', col_mapping); END; / DECLARE error_count pls_integer := 0; BEGIN DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS('pm', 'cust', 'cust_int', 1, TRUE,TRUE,TRUE,FALSE, error_count); DBMS_OUTPUT.PUT_LINE('errors := ' || TO_CHAR(error_count)); END; / EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('pm', 'cust', 'cust_int'); -- Drop the interim table DROP TABLE cust_int; DESC cust; -- The following insert statement fails. This illustrates -- that the primary key constraint on the c_id column is -- preserved after migration. INSERT INTO cust VALUES(1, 94065, 'hhh', 'ttt'); SELECT * FROM cust;
虽然在线重定义技术需要额外的空间,但仍然建议优先考虑该技术的运用。
分区交换技术
通过分区交换技术,也可在尽量减少业务不停顿,将传统LOB字段转换为SecureFiles。该技术具有如下特点:
与分区技术结合,需要该表最大分区的额外空间。
在分区交换时,可同步进行本地化索引的维护。
按分区进行操作,缩短维护窗口。
详细操作过程略。
我们在上述曾介绍过,某系统数据库总容量640GB,其中使用传统LOB技术的字段共消耗了600GB,最主要的两个LOB字段就消耗了550GB,占了数据库总量的85%以上,而且还在高速增长中。实际上,该系统的LOB字段存在大量重复数据和可压缩空间。
于是,我们将这两个表采用传统的CTAS技术,将传统LOB字段转换为SecureFiles字段,结果是这两个表空间又550GB下降为160GB,空间几乎下降了70%!
以下就是详细脚本:
CREATE TABLE FORESTFIREEW.T_FORECAST_THEMATIC_NEW ( THEMATIC_ID VARCHAR2(36) NOT NULL ENABLE, RESULT_ID VARCHAR2(36) NOT NULL ENABLE, THEMATIC_TYPE VARCHAR2(10) NOT NULL ENABLE, DATA_NO NUMBER(10,0), DATA_DATE CHAR(8), DATA_HOUR CHAR(2), DATA_TYPE VARCHAR2(10), DATA_VALUE NUMBER(8,2), DATA_LEVEL NUMBER(2,0), GEOMETRY CLOB, CONSTRAINT PK_FORECAST_THEMATIC_NEW PRIMARY KEY (THEMATIC_ID) USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW ENABLE ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE( BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING) PARTITION BY RANGE (DATA_DATE) (PARTITION SYS_P27 VALUES LESS THAN ('20120101') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW2011 LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING) , PARTITION SYS_P28 VALUES LESS THAN ('20130101') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW2012 LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING) , PARTITION SYS_P29 VALUES LESS THAN ('20140101') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW2013 LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING) , PARTITION SYS_P30 VALUES LESS THAN ('20150101') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW2014 LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING) , PARTITION SYS_P31 VALUES LESS THAN ('20160101') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW2015 LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING) , PARTITION SYS_P32 VALUES LESS THAN (MAXVALUE) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW2016 LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING) ); insert /*+ append */into T_FORECAST_THEMATIC_NEW nologging select * from T_FORECAST_THEMATIC; CREATE TABLE FORESTFIREEW.T_LIVE_THEMATIC_NEW ( THEMATIC_ID VARCHAR2(36) NOT NULL ENABLE, RESULT_ID VARCHAR2(36) NOT NULL ENABLE, THEMATIC_TYPE VARCHAR2(10) NOT NULL ENABLE, DATA_NO NUMBER(10,0), DATA_DATE CHAR(8), DATA_HOUR CHAR(2), DATA_VALUE NUMBER(8,2), DATA_LEVEL NUMBER(2,0), GEOMETRY CLOB, CONSTRAINT PK_LIVE_THEMATIC_NEW PRIMARY KEY (THEMATIC_ID) USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW ENABLE ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE( BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING) PARTITION BY RANGE (DATA_DATE) (PARTITION SYS_P51 VALUES LESS THAN ('20120101') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW2011 LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING), PARTITION SYS_P52 VALUES LESS THAN ('20130101') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW2012 LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING), PARTITION SYS_P53 VALUES LESS THAN ('20140101') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW2013 LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING), PARTITION SYS_P54 VALUES LESS THAN ('20150101') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW2014 LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING), PARTITION SYS_P55 VALUES LESS THAN ('20160101') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW2015 LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING), PARTITION SYS_P56 VALUES LESS THAN (MAXVALUE) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE FORESTFIREEW2016 LOB (GEOMETRY) STORE AS SECUREFILE (COMPRESS HIGH KEEP_DUPLICATES CACHE NOLOGGING)); insert /*+ append */into T_LIVE_THEMATIC_NEW nologging select * from T_LIVE_THEMATIC;
本章参考资料及进一步读物:
序号 | 资料类别 | 资料名称 | 资料概述 |
1. | Oracle 11g R2联机文档 | 《Oracle® Database SecureFiles and Large Objects Developer’s Guide》 | 这是Oracle 11g联机文档中专门介绍SecureFiles和大对象开发的专著,从事大对象开发的人员必读之物。 |
2. | Oracle大学教材 | 《Oracle® Database 11g New Features》的第10课 | 这是Oracle大学教材。欲看到图文并茂的该文档,只能报名参加该课程的培训了。 |
3. | My Oracle Support | 《Master Note: Overview of Oracle Large Objects (BasicFiles LOBs and SecureFiles LOBs) (Doc ID 1490228.1)》 | 欲全面了解传统的BasicFiles大对象和新一代SecureFiles大对象,这篇文档就是主目录。 |
4. | My Oracle Support | 《Summary Note Index for BasicFiles(LOB’s/BLOB’s/CLOB’s/NCLOB’s,BFILES) and SecureFiles (Doc ID 198160.1)》 | 又一个介绍传统的BasicFiles大对象和新一代SecureFiles大对象的文档集结地。 |
5. | My Oracle Support | 《LOB Performance Guideline (Doc ID 268476.1)》 | 这篇文档针对传统BasicFiles大对象的性能问题进行了全面分析。既有设计问题,也有Oracle产品Bug问题,好好看看吧。其实更好的办法就是升级到11g,并采用SecureFiles技术。 |
6. | My Oracle Support | 《LOBS – Storage, Redo and Performance Issues (Doc ID 66431.1)》 | 这篇文档介绍了传统BasicFiles大对象的存储特性、Redo等内部信息,以及可能存在的一些性能问题。重复一下:别纠结这些问题了,还是升级到11g,并采用SecureFiles技术吧。 |
7. | My Oracle Support | 《POOR PERFORMANCE WITH LOB INSERTS (Doc ID 978045.1)》 | LOB字段插入比较慢,什么原因?这篇文章给出了一个原因,那就是Recylebin!解决办法:关掉Recylebin! |
8. | My Oracle Support | 《Troubleshooting Guide (TSG) – Large Objects (LOBs) (Doc ID 846562.1)》 | 这篇文档介绍了如何诊断分析LOB字段故障的思路和方法。例如,如何确定问题?如何收集故障信息?如何研究和分析问题?如何提供解决方案?如何验证解决效果?这可是LOB字段故障诊断的宝典! |