解决Oracle 11G命令行导出表不全的方法
浏览量:1501
时间:2024-01-20 11:06:47
作者:采采
在Oracle 11G中,命令行exp只会导出已经分配过segment的表,如果数据库中的表数据条数是0时不会分配segment,因此这些表就不能被导出。为了解决这个问题,我们可以采取以下方法:
方法一:修改deferred_segment_creation参数
首先,我们可以通过修改deferred_segment_creation参数来禁用这个功能。但是需要注意的是,这个修改只对以后创建的表生效,对于已经存在的表没有影响。你可以使用以下命令将deferred_segment_creation参数设置为false:
alter system set deferred_segment_creationfalse;
方法二:查询空表并生成Alter语句
其次,我们可以通过查询空表并生成Alter语句的方式来手动分配segment。你可以使用以下命令查询空表:
select table_name from user_tables where NUM_ROWS0;
通过以上命令,我们可以得到一张空表的列表。接下来,我们可以使用以下语句生成一些Alter语句,帮助我们分配segment:
select 'alter table ' || table_name || ' allocate extent;' from user_tables where num_rows0;
执行以上语句后,将会生成一系列的Alter语句。你可以将这些语句保存到一个sql文件中。
方法三:导出结果集并执行
在生成的sql文件中,你可以进行一些替换操作,将公共的部分替换为空字符。例如,将"insert into user_tables ('ALTERTABLE'||TABLE_NAME||'ALL')"替换为空字符,将"values ('','');"替换为空字符。然后,你可以执行这些语句,从而手动分配segment到空表上。
最后,在执行完以上操作后,你可以再次执行exp命令,这样就可以完整地导出所有表的数据了。
通过以上方法,你可以很方便地解决Oracle 11G命令行导出表不全的问题,并确保所有表的数据都被正确导出。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。