Heim  >  Artikel  >  Datenbank  >  Oracle 11g的Deferred Segment Creation

Oracle 11g的Deferred Segment Creation

WBOY
WBOYOriginal
2016-06-07 16:42:451258Durchsuche

本篇主要介绍Oracle 11g中推出的ldquo;延迟段创建rdquo;(Deferred Segment Creation)特性,以及当我们使用这种特性时,需要注

本篇主要介绍Oracle 11g中推出的“延迟段创建”(Deferred Segment Creation)特性,,以及当我们使用这种特性时,需要注意的问题。

  1)Deferred Segment Creation

  在Oracle中,“表空间(Tablespace)、段(Segment)、分区(Extent)和块(Block)”是逻辑存储结构的四个层次。对数据表而言,通常是由一个或者多个段对象(分区表)Segment组成。也就是说,在数据表创建的时刻,Oracle会创建一个数据段Segment对象与之对应。

  当Segment创建之后,Oracle空间管理机制会根据需要分配至少一个extent作为初始化。每个extent的大小需要根据不同tablespace进行配置。但是在11g之前,数据表的创建同时,就发生了空间Segment分配的过程。但是在Oracle 11g中,引入了Deferred Segment Creation特性。

  首先我们创建一个数据表justForTest,来观察数据库是否为此表分配segment。

SQLjustForTest(test1 varchar2(2)); Table created

  但是,对应的段segment对象,却没有创建出来,如下:

; SEGMENT_NAME BYTES BLOCKS EXTENTS ------------ ---------- ---------- ----------

  使用dbms_metadata抽取出数据表的DDL语句,可以发现端倪,如下:

CREATE TABLE "test"."JUSTFORTEST" ( "TEST1" VARCHAR2(2) ) SEGMENT CREATION DEFERRED PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING TABLESPACE "testNS";

  使用DDL语句可以获取到创建数据表的所有语句参数,包括默认参数。其中,我们发现了一个在过去版本中没有参数“SEGMENT CREATION DEFERRED”,该参数就表示在数据表创建中使用延迟段生成。

  2)Segment Creation

  那么,在什么时点上Oracle才会创建对象呢?只要插入一条数据到数据表中,无论是否commit,都会伴随着Oracle对数据表段的创建操作。

SQLjustForTest ); 1 row inserted SQL; SEGMENT_NAME BYTES BLOCKS EXTENTS ------------ ---------- ---------- ---------- JUSTFORTEST  

  Oracle推出Deferred Segment Creation的出发点很单纯,就是出于对象空间节省的目的。如果一个空表从来就没有使用过,创建segment对象,分配空间是“不合算”的,所以提出推迟段创建的时间点。 

SQL> show parameter deferred_segment_creation; NAME TYPE VALUE ------------------------------- ----------- ------------------------------ deferred_segment_creation boolean TRUE

  当然,我们可以将deferred_segment_creation参数调为false,这样调整后建的表都会立即分配空间,但是调整前的表都不会改变,调整方法如下:

alter system set deferred_segment_creation=false;

  3)Oracle 11g导出空表、少表的解决办法

  如果deferred_segment_creation为true,那么数据库中空表就不会立即分配extent,即不占数据空间,当我们使用exp导出数据库的时候,这些空表也会无法导出。如果想把空表也一起导出,我们可以参考Oracle 11g导出空表、少表的解决办法这篇文章。

在CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

Oracle Linux 6.5安装Oracle 11.2.0.4 x64

本文永久更新链接地址:

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn