1 row created.
SQL> select count(*) from user_segments where segment_name='TBL_SEG';
COUNT(*)
----------
1
SQL> select count(*) from user_extents where segment_name='TBL_SEG';
COUNT(*)
----------
1
可以看到段和区已经分配了空间,user_segments和user_extents表均有了TBL_SEG对应的记录。
3. 禁用延迟段:
可以禁用延迟段,是否使用延迟段是由DEFERRED_SEGMENT_CREATION参数定义的,该参数可以在会话级别修改,如果想彻底删除延迟���,可以在spfile中修改,本次以及下次启动后就会一直生效了,例如:
SQL> alter session set DEFERRED_SEGMENT_CREATION=false;
Session altered.
SQL> create table tbl_seg(reg_id number, reg_name varchar2(200));
Table created.
SQL> select count(*) from user_segments where segment_name='TBL_SEG';
COUNT(*)
----------
1
SQL> select count(*) from user_extents where segment_name='TBL_SEG';
COUNT(*)
----------
1
4. 使用SEGMENT CREATION子句:
即使禁用了延迟段,还是可以使用SEGMENT CREATION在创建表时指定是否使用延迟段,例如:
SQL> create table tbl_seg(
2 reg_id number,
3 reg_name varchar2(200))
4 segment creation immediate;
Table created.
SQL> select count(*) from user_segments where segment_name='TBL_SEG';
COUNT(*)
----------
1
SQL> select count(*) from user_extents where segment_name='TBL_SEG';
COUNT(*)
----------
1
这可以看到立即为段和区分配了空间。如果使用SEGMENT CREATION DEFERRED则会使用延迟段的功能。
5. 从USER_TABLES看变化:
11g的USER_TABLES比之前的版本会多一些字段,其中有一项就是SEGMENT_CREATED(VARCHAR2(3)),这样就能知道某个段是否已经分配了空间。
6. 导入导出的影响:
11.2.0.1版本下,如果某张表还未分配段,使用exp到导出时是不会导出未分配段的表,解决方法是可以在导出前使用ALLOCATE EXTENT手工分配段,或者使用数据泵expdp导出未分配段的表。
总结:
这种延迟段的新特性的好处是显而易见的,弊端也很明显,至于是否应该使用,则需要根据实际业务来决定,这也是Oracle提供了禁用延迟段选项的目的。
Oracle 11g 在RedHat Linux 5.8_x64平台的安装手册
在CentOS 6.4下安装Oracle 11gR2(x64)
Oracle 11gR2 在VMWare虚拟机中安装步骤