新特性的副产品--从11g的DEFERRED SEGMENT CREATION说起

本文探讨了在使用Oracle数据库时遇到的DEFERRED SEGMENT CREATION特性导致的导出问题,通过调整参数、修改表状态和检查表属性,最终成功解决了导出表数量不一致的问题。同时讨论了该特性的工作原理及在不同模式下的限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       某日协助同事完成两个测试数据库的结构同步。将早就烂熟于心的exp和imp命令编写成shell自动运行,交活了事。没有想到,同事说同步的表相差巨大。不会吧,检查了生成的日志信息:

  1. . exporting dimensions
  2. . exporting post-schema procedural objects and actions
  3. . exporting statistics
  4. Export terminated successfully without warnings.

        正常的一谈糊涂。但是检查导出表的数据确实差了不少。应该是49张表,但是导出的只有34张。

        反复检查USER_TABLES的信息,首先发现的就是确实没有导出的表在某些属性字段上比较怪异。

       

  1. SQL> select INITIAL_EXTENT,NEXT_EXTENT from user_tables where table_name='TBL_NC_AREA_I';
  2. INITIAL_EXTENT NEXT_EXTENT
  3. -------------- -----------

         奇怪。为空。

         没有办法,估计需要修改表的一些状态才可能改变。

  1. SQL> alter table TBL_NC_AREA_I move;
  2. Table altered.
  3. SQL> select INITIAL_EXTENT,NEXT_EXTENT from user_tables where table_name='TBL_NC_AREA_I';
  4. INITIAL_EXTENT NEXT_EXTENT
  5. -------------- -----------
  6. 65536 1048576
  7. SQL>

         不错,现在看起来比较正常了,exp也正常导出。

          真是为什么呢?存储参数的信息没有出现,而后在user_tables中发现了字段SEGMENT_CREATED。估计就是这个“问题”。找找看,发现凡是不能正常导出的表这个属性字段都是显示:      

  1. select INITIAL_EXTENT,NEXT_EXTENT,SEGMENT_CREATED
  2. from user_tables where table_name='TBL_NC_BALANCEBANK_I';
  3. -------------- ----------- ---
  4. NO

         查。发现原来这个11gR2的一个特性:DEFERRED SEGMENT CREATION,即建立表的时候,一开始并没有直接分配存储空间。直接在字典中记录了数据结构。而只有当真正有数据的时候才分配空间。这种方法对于象SAP这样大的系统需要部署成千上万张表是非常有效的。

         检查测试数据库:

  1. SQL> show parameters deferred_segment_creation
  2. NAME TYPE VALUE
  3. ------------------------------------ ----------- ------------------------------
  4. deferred_segment_creation boolean TRUE

          这个功能是开启的。当然可以通过修改参数来进行修改:

  1. alter system set deferred_segment_creation=true;
  2. session级别的方法相似。
  3. 如果在表一级:
  4. CREATE TABLE .... SEGMENT CREATION IMMEDIATE;
  5. 需要延后分配:
  6. CREATE TABLE ... SEGMENT CREATION DEFERRED

        当然还有我的“土制”办法,move一下表。

         现在EXP是没有问题。但是奇怪,为什么EXP只能检索出已经分配存储空间的表,难道读的字典不是相同的基表?不能不说,这个特性对于EXP而言,起码是有瑕疵的,并且在一些UPGRDE等操作也是有风险的。

        同时注意,这样的表在SYS, SYSTEM, PUBLIC, OUTLN, or XDB 模式(schema)下,是无法建立的。

        时时都是有收获的,只要留心些。 -:)

         --EOF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值