摘自:http://space.itpub.net/751371/viewspace-702058
ORACLE 11g 新增了一个参数:deferred_segment_creation,从字面理解含义是段延迟创建,该参数取值范围是true和false,默认是true。具体是如果deferred_segment_creation为true,当新建表并且没有向其中插入数据的时候,这个表不会立即分配extent,即不占数据空间,只有insert数据后才分配空间,这样做可以节省少量的空间。如果deferred_segment_creation为false,那就和之前版本创建表一样,创建时即分配extent。
一、问题提出
如果deferred_segment_creation为默认值,当通过EXP命令来导出整个用户时,所有没有数据的表都导不出来。
二、问题分析
1、新建表没有分配extent,在user_segments视图中必然查不到,但是在user_tables中是可以查到的。这样就可以找出哪些表是没有创建extent的:
select * from user_tables where table_name not in (select segment_name from user_segments where segment_type = 'TABLE');
2、通过alter table xxx allocate extent 语句立即为其分配extent:
alter table t1 allocate extent (size 64k);
三、问题解决
1、批量处理所有“空表”:
select 'alter table '||table_name||' allocate extent(size 64k);' sql_text,table_name,tablespace_name
from user_tables where table_name not in (select segment_name from user_segments where segment_type = 'TABLE');
2、把sql_text列在sqlplus中执行一下就可以通过exp导出。
3、如果觉得每次导出都这样做太麻烦,完全可以将deferred_segment_creation参数调为false,这样调整后建的表都会立即分配空间,但是调整前的表都不会改变,因此还需要用1、2提到的办法解决。
--调整deferred_segment_creation为false:
SQL> alter system set deferred_segment_creation=false;
--调整deferred_segment_creation为默认值:
SQL> alter system reset deferred_segment_creation;
四、其他方法
1、现在网上提到的办法都是先往表中间insert一条数据,然后再rollback,使之分配空间。但是每次建表都这样做也是比较麻烦,不推荐。
2、通过move(alter table table_name move;)的办法也能得到相同的效果,因为move会使部分索引失效,所以也不推荐。
如果空间不是很紧张,还是建议把这个参数改成false。不过,如果你是用expdp代替exp的话,就不会出现这个问题。而且expdp比exp要快,只是exp先入为主,大家都比较习惯是用exp。oracle添加deferred_segment_creation这个参数的目的难到只是为了节省一点空间么?而且也只是在创建表时没分配extent,当插入数据的时候并不会节省空间,还是顺便推荐大家以后多使用expdp?
分享到:
相关推荐
在给客户培训的过程中,发现客户数据库服务器存在一个奇怪的现象。...Deferred Segment Creation,延迟段创建,Oracle11gR2新增参数, 具体用处是当新创建一个可能会有Segment的对象时,如果这个对象中还没有任何
--Oracle11g中Exp空表的问题:禁用插入数据时才分配空间功能 show parameter deferred_segment_creation alter system set deferred_segment_creation=false; -- 查找空表: select 'alter table '||table_name||'...
一、不能导出空表的原因1、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。 2、设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。 在...
1、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。 2、设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。 在sqlplus中,执行如下命令: ...
本程序实现了著名的算法,即 延迟接受 算法,此算法在实际上应用非常广泛!
导出数据不包含空表解决方案。Oracle 11g导出空表、少表的解决办法 ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间。 解决方法: ... 2)设置deferred_segment_creation参数
SQL>show parameter deferred_segment_creation; 如果为TRUE,则将该参数改为FALSE; 在sqlplus中,执行如下命令: SQL>alter system set deferred_segment_creation=false; 然后: 可以针对数据表、索引、物化...
最近在做交易系统项目的时候,因为要与测试人员数据库数据保持一致,所以需要从测试部那边把整个数据库...查询了之后,发现这是oracle 11g新增了一个参数:deferred_segment_creation,含义是段延迟创建,默认是true。
在WebGL的球修剪灯延迟渲染发达 。
Deferred Processing 3-18 Timed Out Notification Activities 3-19 Summary 3-20 Lesson 4: Overview of the Workflow Directory Service Objectives 4-2 Oracle Workflow Terms 4-3 Directory Service Views 4-4 ...
在WebGL的球修剪灯延迟渲染发达 。
promise-helper-for-deferred-style-resolve 延迟样式解决的承诺助手。 您可以轻松编写测试,无需任何 jQuery。 测试模式的想法来自 。 jQuery.deferred()可以调用d.resolve() ,但是Promise不能调用p.resolve()...
deferred_shading 延迟着色管线的现代 OpenGL 实现
Jbuilder延迟渲染 这是一个 gem,它允许通过引入延迟加载资源语法来避免视图层中的 n+1 问题。 这颗宝石目前是 ALPHA 品质。 它已经在生产中使用,但它有一些问题 动机 Jbuilder 延迟渲染允许您直接通过模板避免 n+...
在 Rust 中实现的等值面提取算法。包括经典的 Marching Cubes 和 Dual ...cargo run --example deferred_rasterisation将从点云执行 GPU 端延迟光栅化的演示。这是Voxel Quest成名的 Gavan Woolery 开创的一项技术。
NULL 博文链接:https://wen66.iteye.com/blog/1329316
android-deferred-object, 在 jQuery http上,Android实现延迟对象 Pattern的实现 Android延迟对象Android-Deferred-Object是一个of实用工具对象,可以以将多个回调 register 调回回调队列,调用回调队列和异步功能...
Version 1.7 ----------- - ADD: Delphi/CBuilder 10.2 Tokyo now supported. - ADD: Delphi/CBuilder 10.1 Berlin now supported. - ADD: Delphi/CBuilder 10 Seattle now supported. - ADD: Delphi/CBuilder XE8 ...
如题
Shawn的Deferred Shading原文讲解ppt 对初学者理解Deferred Shading有一定的帮助