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

简介:

 某日协助同事完成两个测试数据库的结构同步。将早就烂熟于心的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.  
  3. INITIAL_EXTENT NEXT_EXTENT 
  4. -------------- ----------- 

         奇怪。为空。

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


 
 
  1. SQL> alter table TBL_NC_AREA_I move
  2.  
  3. Table altered. 
  4.  
  5. SQL> select INITIAL_EXTENT,NEXT_EXTENT from user_tables where table_name='TBL_NC_AREA_I'
  6.  
  7. INITIAL_EXTENT NEXT_EXTENT 
  8. -------------- ----------- 
  9.      65536     1048576 
  10.  
  11. 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. -------------- ----------- --- 
  5.                NO 

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

         检查测试数据库:


 
 
  1. SQL> show parameters deferred_segment_creation 
  2.  
  3. NAME                     TYPE    VALUE 
  4. ------------------------------------ ----------- ------------------------------ 
  5. 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

本文转自Be the miracle!博客51CTO博客,原文链接http://blog.51cto.com/miracle/503936如需转载请自行联系原作者


Larry.Yue

相关文章
|
2月前
|
人工智能 自然语言处理 搜索推荐
谈谈Function Calling
Function Calling赋予大语言模型调用外部工具的能力,弥补其缺乏行动力、信息滞后等缺陷。它像“指挥家”般,理解用户意图,选择合适的工具执行操作,并将结果反馈给用户,从而连接虚拟与现实。这一机制让大语言模型如虎添翼,更好地服务于人类。
56 3
谈谈Function Calling
|
4月前
|
物联网
zigbee配置及常见错误总结---(Segment BANKED_CODE must be defined in a segment definition option)
zigbee配置及常见错误总结---(Segment BANKED_CODE must be defined in a segment definition option)
SAP QM 执行事务代码QS51维护使用决策的选择集,系统报错 – Transaction no longer valid for catalog ‘3’ -
SAP QM 执行事务代码QS51维护使用决策的选择集,系统报错 – Transaction no longer valid for catalog ‘3’ -
SAP QM 执行事务代码QS51维护使用决策的选择集,系统报错 – Transaction no longer valid for catalog ‘3’ -
SAP QM 执行事务代码QS23为检验特性分配Selected Set的时候报错 - You cannot use entries from catalogs 1 and 3-
SAP QM 执行事务代码QS23为检验特性分配Selected Set的时候报错 - You cannot use entries from catalogs 1 and 3-
SAP QM 执行事务代码QS23为检验特性分配Selected Set的时候报错 - You cannot use entries from catalogs 1 and 3-
关于COMMIT WORK and COMMIT WORK AND WAIT在SAT中的讨论
关于COMMIT WORK and COMMIT WORK AND WAIT在SAT中的讨论
308 0
关于COMMIT WORK and COMMIT WORK AND WAIT在SAT中的讨论