新特性的副产品--从11g的DEFERRED SEGMENT CREATION说起 推荐
2011-03-01 21:36
393 查看
某日协助同事完成两个测试数据库的结构同步。将早就烂熟于心的exp和imp命令编写成shell自动运行,交活了事。没有想到,同事说同步的表相差巨大。不会吧,检查了生成的日志信息:
正常的一谈糊涂。但是检查导出表的数据确实差了不少。应该是49张表,但是导出的只有34张。
反复检查USER_TABLES的信息,首先发现的就是确实没有导出的表在某些属性字段上比较怪异。
奇怪。为空。
没有办法,估计需要修改表的一些状态才可能改变。
不错,现在看起来比较正常了,exp也正常导出。
真是为什么呢?存储参数的信息没有出现,而后在user_tables中发现了字段SEGMENT_CREATED。估计就是这个“问题”。找找看,发现凡是不能正常导出的表这个属性字段都是显示:
查。发现原来这个11gR2的一个特性:DEFERRED SEGMENT CREATION,即建立表的时候,一开始并没有直接分配存储空间。直接在字典中记录了数据结构。而只有当真正有数据的时候才分配空间。这种方法对于象SAP这样大的系统需要部署成千上万张表是非常有效的。
检查测试数据库:
这个功能是开启的。当然可以通过修改参数来进行修改:
当然还有我的“土制”办法,move一下表。
![](http://blog.51cto.com/neweditor/editor/images/smiley/15.gif)
现在EXP是没有问题。但是奇怪,为什么EXP只能检索出已经分配存储空间的表,难道读的字典不是相同的基表?不能不说,这个特性对于EXP而言,起码是有瑕疵的,并且在一些UPGRDE等操作也是有风险的。
同时注意,这样的表在SYS, SYSTEM, PUBLIC, OUTLN, or XDB 模式(schema)下,是无法建立的。
时时都是有收获的,只要留心些。 -:)
--EOF
. exporting dimensions . exporting post-schema procedural objects and actions . exporting statistics Export terminated successfully without warnings.
正常的一谈糊涂。但是检查导出表的数据确实差了不少。应该是49张表,但是导出的只有34张。
反复检查USER_TABLES的信息,首先发现的就是确实没有导出的表在某些属性字段上比较怪异。
SQL> select INITIAL_EXTENT,NEXT_EXTENT from user_tables where table_name='TBL_NC_AREA_I'; INITIAL_EXTENT NEXT_EXTENT -------------- -----------
奇怪。为空。
没有办法,估计需要修改表的一些状态才可能改变。
SQL> alter table TBL_NC_AREA_I move;
Table altered.
SQL> select INITIAL_EXTENT,NEXT_EXTENT from user_tables where table_name='TBL_NC_AREA_I'; INITIAL_EXTENT NEXT_EXTENT -------------- -----------65536 1048576
SQL>
不错,现在看起来比较正常了,exp也正常导出。
真是为什么呢?存储参数的信息没有出现,而后在user_tables中发现了字段SEGMENT_CREATED。估计就是这个“问题”。找找看,发现凡是不能正常导出的表这个属性字段都是显示:
select INITIAL_EXTENT,NEXT_EXTENT,SEGMENT_CREATED from user_tables where table_name='TBL_NC_BALANCEBANK_I'; -------------- ----------- --- NO
查。发现原来这个11gR2的一个特性:DEFERRED SEGMENT CREATION,即建立表的时候,一开始并没有直接分配存储空间。直接在字典中记录了数据结构。而只有当真正有数据的时候才分配空间。这种方法对于象SAP这样大的系统需要部署成千上万张表是非常有效的。
检查测试数据库:
SQL> show parameters deferred_segment_creation NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ deferred_segment_creation boolean TRUE
这个功能是开启的。当然可以通过修改参数来进行修改:
alter system set deferred_segment_creation=true; session级别的方法相似。 如果在表一级: CREATE TABLE .... SEGMENT CREATION IMMEDIATE; 需要延后分配: CREATE TABLE ... SEGMENT CREATION DEFERRED
当然还有我的“土制”办法,move一下表。
![](http://blog.51cto.com/neweditor/editor/images/smiley/15.gif)
现在EXP是没有问题。但是奇怪,为什么EXP只能检索出已经分配存储空间的表,难道读的字典不是相同的基表?不能不说,这个特性对于EXP而言,起码是有瑕疵的,并且在一些UPGRDE等操作也是有风险的。
同时注意,这样的表在SYS, SYSTEM, PUBLIC, OUTLN, or XDB 模式(schema)下,是无法建立的。
时时都是有收获的,只要留心些。 -:)
--EOF
相关文章推荐
- 新特性的副产品--从11g的DEFERRED SEGMENT CREATION说起
- oracle 11g使用deferred_segment_creation 延迟段创建特性时遇到的问题总结
- oracle 11g使用deferred_segment_creation 延迟段创建特性时遇到的问题总结
- oracle 11g使用deferred_segment_creation 延迟段创建特性时遇到的问题总结
- Oracle 11g的Deferred Segment Creation
- Oracle 11g exp导出 deferred_segment_creation参数配置
- 11g deferred_segment_creation
- DEFERRED_SEGMENT_CREATION <11g的…
- Oracle 11g的Deferred Segment Creation
- 11g参数之deferred_segment_creation
- Oracle 11g R2 新特性:Deferred Segment Generation
- oracle 11g导出空表 DEFERRED_SEGMENT_CREATION
- Oracle 11gR2 deferred segment creation 与 exp/imp 说明
- oracle 11g deferred_segment_creation段延迟创建
- Oracle 11gR2 deferred segment creation 与 exp/imp 说明
- oracle参数之DEFERRED_SEGMENT_CREATION
- Oracle 中deferred_segment_creation 的用法以及exp时解决办法
- 11.2.0.2中对Deferred Segment Creation的增强
- DEFERRED_SEGMENT_CREATION
- 万恶的deferred_segment_creation(延迟块分配)