在 oracle 11g 中,发现传统的 exp 居然不能导出空的表,然后查询一下,
发现需要如下的步骤去搞,笔记之。
oracle 11g 新增了一个参数:deferred_segment_creation,含义是段延迟创建,默认
是 true。具体是什么意思呢?
如果这个参数设置为 true,你新建了一个表 T1,并且没有向其中插入数据,那么这个表
不会立即分配 extent,也就是不占数据空间,只有当你 insert 数据后才分配空间。这样
可以节省少量的空间。
解决办法:
1 .设置 deferred_segment_creation 参数为 FALSE 后,无论是空表还是非空表,都分
配 segment。
在 sqlplus 中,执行如下命令:
SQL>alter system set deferred_segment_creation=false;
查看:
SQL>show parameter deferred_segment_creation;
该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。
注意并且要重新启动数据库,让参数生效
2.对之前建立的空表
查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下:
-----------
SQL>select table_name from user_tables where NUM_ROWS=0;
-----------
根据上述查询,可以构建针对空表分配空间的命令语句,如下:
-----------
SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables
where num_rows=0
-----------
把查询结果导出,然后在执行导出的语句即可。
评论0
最新资源