oracle11g
,
在用
exp
命令备份数据库时,
如果表中没有数据报
EXP-00011
错误,
对应的表不存在。
这导致对应的空表无法备份。
原因:
11g
默认创建一个表时不分配
segment
,
只有在插入数据时才会产生
(当然也可以强制分配)
,
以节省磁盘空间。
对于已经存在的空表解决办法:
就是想办法让空表有
segment
,第一种:可以通过插入数据的方式(不想要这些数据可以回滚)
,只
要有
insert
动作就会分配
segment
;
第二种:就是强制分配:
alter table tablename
allocate extent;
如果采用第二种可以用以下方法:
1
、用以下这句查找空表:
select 'alter table '||table_name||' allocate extent;' from
user_tables where num_rows=0;
2
、把查询结果导出,执行导出的语句
;
为了后面创建的表能直接分配
segment
:
用系统账户登录数据库,修改参数
deferred_segment_creation
(
11g
新增的)
。该参数即指是否
延迟创建
segment
,默认为
true
。如果想让表创建时就分配
segment
,那么就应该修改该参数为
false
即
alter system set deferred_segment_creation=false
。如下所示: