一、引言:

在看《收获,不止Oracle》的神奇,走进逻辑体系世界一章时,需要新建一张表查看Extents的情况,由于该书的环境是ORACLE10G的,因此新建空表以后立刻就分配Segment,而我使用的是Oracle11gR2,新建空表后没有立即分配Segment。这就是11GR2的新特性,延迟段创建,就是说从11GR2开始默认创建的表不会立即分配segment,不会占用磁盘空间,当第一条数据insert时才会分配空间。

二、实验模拟:

SQL> select * from v$version;  

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production SQL> create table testnew(id int primary key,name varchar2(10)); Table created SQL> create table testnew_IME(id int primary key,name varchar2(10)) segment creation immediate; Table created SQL> create table testnew_def(id int primary key,name varchar2(10)) segment creation deferred; Table created SQL> select segment_name from user_segments where segment_name like 'TESTNEW%'; SEGMENT_NAME
--------------------------------------------------------------------------------
TESTNEW_IME SQL> select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name='TESTNEW'; INDEX_NAME TABLE_OWNER
------------------------------ ------------------------------
SYS_C0011192 JACK SQL> select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name='TESTNEW_IME'; INDEX_NAME TABLE_OWNER
------------------------------ ------------------------------
SYS_C0011193 JACK SQL> select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name='TESTNEW_DEF'; INDEX_NAME TABLE_OWNER
------------------------------ ------------------------------
SYS_C0011194 JACK SQL> select segment_name from user_segments where segment_name='SYS_C0011192'; SEGMENT_NAME
-------------------------------------------------------------------------------- SQL> select segment_name from user_segments where segment_name='SYS_C0011193'; SEGMENT_NAME
--------------------------------------------------------------------------------
SYS_C0011193 SQL> select segment_name from user_segments where segment_name='SYS_C0011194'; SEGMENT_NAME
-------------------------------------------------------------------------------- SQL> insert into testnew values(1,'anbob.com'); 1 row inserted SQL> commit; Commit complete SQL> select segment_name from user_segments where segment_name like 'TESTNEW%'; SEGMENT_NAME
--------------------------------------------------------------------------------
TESTNEW
TESTNEW_IME SQL> select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name='TESTNEW'; INDEX_NAME TABLE_OWNER
------------------------------ ------------------------------
SYS_C0011192 JACK SQL> select segment_name from user_segments where segment_name='SYS_C0011192'; SEGMENT_NAME
--------------------------------------------------------------------------------
SYS_C0011192 SQL> truncate table testnew; Table truncated SQL> select segment_name from user_segments where segment_name like 'TESTNEW%'; SEGMENT_NAME
--------------------------------------------------------------------------------
TESTNEW
TESTNEW_IME SQL> conn /as sysdba
已连接。
SQL> create table testnew_def(id int primary key,name varchar2(10)) segment creation deferred;
create table testnew_def(id int primary key,name varchar2(10)) segment creation deferred
*
第 1 行出现错误:
ORA-14223: 此表不支持延迟创建段

注意:
11gR2默认是使用segment creation deferred建立,新建的无记录表不分配segment,当insert第一条记录时分配段空间,不会因truncate而回收,并且在sys schema里不支持,exp也不会导出。

关于这个主要还是跟deferred_segment_creation参数有关,在11gR2中该参数的值为true,说明当创建对象(如表),初始没有数据,不会立即创建segment。

如果该参数设置为false,表明之后的创建的表,初始没有数据,会立即创建segment。

下面看一下它的效果:

SQL> alter system set deferred_segment_creation=false;

System altered

SQL> create table jack(x int);

Table created

SQL> select segment_name,segment_type,extents,blocks from user_segments where segment_name='JACK';

SEGMENT_NAME                                                                     SEGMENT_TYPE          EXTENTS     BLOCKS
-------------------------------------------------------------------------------- ------------------ ---------- ----------
JACK TABLE 1 8

Oracle 11gR2新建空表不分配Segment的更多相关文章

  1. Oracle空表的分配segment

      1.查询相关参数deferred_segment_creation select * from v$parameter where name='deferred_segment_creation' ...

  2. 转 oracle 11g 导出空表

    1.Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出. 2.设置deferred_segment_creation 参数为FALSE后,无论是 ...

  3. oracle 11G 导出空表失败的解决方法

    一.问题原因:     11G中有个新特性,当表无数据时,不分配segment,以节省空间     1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除 ...

  4. Oracle 11g导出空表、少表的解决办法

    ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间. 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产 ...

  5. 解决oracle 11g 导出空表的方法

    ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间. 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产 ...

  6. oracle 11g 导出空表

    正常情况下,oracle11g的 exp命令无法导出空表,弥补这个缺陷的方法是 在空表创建之前,更改系统设置: show parameter deferred_segment_creation 查看, ...

  7. oracle 解决 exp 空表不能导出的问题

    原因:oralce_11g 中有个新特性,当表无数据时,不分配 segment,以节省空间,这也就导致了 exp 在导出表时,没有数据的表会被忽略 方法一:我们可以向表中插入数据,在删除,这样数据表就 ...

  8. Oracle 11gR2 Database UNDO表空间使用率居高不下-转载

    客户的数据库是Oracle Database 11.2.0.3.0 for AIX 6.1 64bit的单机数据库.客户查询DBA_FREE_SPACE发现UNDO表空间的使用率高达98%以上.客户的 ...

  9. Oracle中新建数据表的两种方法

    首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1 ...

随机推荐

  1. connect调用超时的实现方式

    第二种更通用的.使connect调用超时的方法是使套接字成为无阻塞的,然后用select等待它完成.这种方法避免了使用alarm时遇到的很多问题,但我们必须承认,即使是在UNIX实现中,这种方法还是存 ...

  2. Python模块 (psutil)

    psutil psutil是Python中一个系统信息检索模块,可以获取(系统.CPU.内存.网络.磁盘)等信息,可以应用于系统的监控.健康状态检查,等同于shell中的ps.free.top.df功 ...

  3. ios数字转emoj表情

    +(NSString *)convertSimpleUnicodeStr:(NSString *)inputStr{ ,); UTF32Char inputChar = ; // unicodeInt ...

  4. javascript学习笔记之DOM与表单

    DOM(文档对象模型),猫叔了一个层次化的节点树 一.DOM NODE相关公共属性与方法 DOM中所有节点都实现了NODE接口,该接口的公共属性和方法如下: 1.节点基本属性 1)NodeType 节 ...

  5. 如何让CRectTracker的m_rect不超出一定的范围,比如screen或者某个document的范围

    最近在尝试做一个QQ截图那样的工具,其中一个功能就是要做一个选择框,自然用到了CRectTracker 但是有一个很关键的东西就是,拖拽CRectTracker的时候,不能让CRectTracker“ ...

  6. 审计参数 audit_trail

      audit_trail参数定义了在哪里存放审计记录   默认是DB.如果将其设置为NONE,标准数据库审计功能被取消.audit_trail是静态参数,修改后必须重启数据库.   可以设置的值:- ...

  7. Save ITCM

    Debug String if below 64 BYTE it will in DRAM or it will in ITCM So to save ITCM , move it to ALLStr ...

  8. 实现 DIV 固定定位在网页主体部分最右侧

    position:fixed 相对于窗口的固定定位,这个窗口可理解为可视窗口,除了浏览器自己的东西,剩下的就是这个可视窗口.而大部分的网页都是窄屏设计,比如说网页主体部分固定宽 1200px,或者自适 ...

  9. layoutsubviews什么时候调用

    layoutSubviews在以下情况下会被调用:1.init初始化不会触发layoutSubviews2.addSubview会触发layoutSubviews3.设置view的Frame会触发la ...

  10. UVa 10088 - Trees on My Island (pick定理)

    样例: 输入:123 16 39 28 49 69 98 96 55 84 43 51 3121000 10002000 10004000 20006000 10008000 30008000 800 ...