设为首页 加入收藏

TOP

11g的延迟段功能(二)
2014-11-24 03:33:55 来源: 作者: 【 】 浏览:31
Tags:11g 延迟 功能
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提供了禁用延迟段选项的目的。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Chapter1SecuringYourServerandNe.. 下一篇Redis的Keyspacenotifications功..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)
·有没有Java swing教 (2025-12-25 15:19:09)
·Start, Stop, and Di (2025-12-25 14:50:57)
·C语言入门教程:零基 (2025-12-25 14:50:54)