Oracle 11gR2的延迟段功能(2)

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平台的安装手册

Linux-6-64下安装Oracle 12C笔记

CentOS 6.4下安装Oracle 11gR2(x64)

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

Debian 下 安装 Oracle 11g XE R2

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5ee69fc06d747ef9ce204dc82930a90d.html