您的位置:首页 > 数据库 > Oracle

oracle批量循环执行sql,EXP-00003: 未找到段 (0,0) 的存储定义

2015-04-16 18:13 441 查看
exp导出表有警告,EXP-00003: 未找到段 (0,0) 的存储定义。发现报错的都是带有表分区的表。

搜索一下,有说索引是小写,有说表里没有数据的,有说执行alter system set deferred_segment_creation=false;

还有说执行 alter table TabelName allocate extent 命令的。

搜索alter system set deferred_segment_creation=false; 该参数意思是当创建对象(如表),初始没有数据,是否立即创建segment。默认是true。这会导致在exp时,没有segment的对象不会导出。

但此命令只对以后的表有效,之前的表没有Segment的还是没有。可以创建表的时候声明立即创建Segment ,create
table XXX (XXX XXX) SEGMENT CREATION IMMEDIATE;
对于已经创建但是还没有Segment的表来说,可以执行alter table TabelName allocate
extent来使其创建出Segment,当然也可以插入一条数据,使其创建Segment .
给所有表增加Segment,如下:

declare

-- Local variables here

i number;

cou number;

nam VARCHAR2 (200);

strSQL VARCHAR2 (600);

begin

i:=0;

loop

i:=i+1;

strSQL:= 'select count(*) from user_tables';

EXECUTE IMMEDIATE strSQL into cou ;

strSQL:= 'select table_name from (select rownum as rown,table_name from user_tables) where rown =' || i;

EXECUTE IMMEDIATE strSQL into nam ;

strSQL:='alter table '|| nam ||' allocate extent';

EXECUTE IMMEDIATE strSQL;

commit;

if i>cou-1 then

exit;

end if;

end loop;

end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: