解決Oracle 11G命令行導出表不全的方法
在Oracle 11G中,命令行exp只會導出已經(jīng)分配過segment的表,如果數(shù)據(jù)庫中的表數(shù)據(jù)條數(shù)是0時不會分配segment,因此這些表就不能被導出。為了解決這個問題,我們可以采取以下方法: 方
在Oracle 11G中,命令行exp只會導出已經(jīng)分配過segment的表,如果數(shù)據(jù)庫中的表數(shù)據(jù)條數(shù)是0時不會分配segment,因此這些表就不能被導出。為了解決這個問題,我們可以采取以下方法:
方法一:修改deferred_segment_creation參數(shù)
首先,我們可以通過修改deferred_segment_creation參數(shù)來禁用這個功能。但是需要注意的是,這個修改只對以后創(chuàng)建的表生效,對于已經(jīng)存在的表沒有影響。你可以使用以下命令將deferred_segment_creation參數(shù)設置為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;
執(zhí)行以上語句后,將會生成一系列的Alter語句。你可以將這些語句保存到一個sql文件中。
方法三:導出結果集并執(zhí)行
在生成的sql文件中,你可以進行一些替換操作,將公共的部分替換為空字符。例如,將"insert into user_tables ('ALTERTABLE'||TABLE_NAME||'ALL')"替換為空字符,將"values ('','');"替換為空字符。然后,你可以執(zhí)行這些語句,從而手動分配segment到空表上。
最后,在執(zhí)行完以上操作后,你可以再次執(zhí)行exp命令,這樣就可以完整地導出所有表的數(shù)據(jù)了。
通過以上方法,你可以很方便地解決Oracle 11G命令行導出表不全的問題,并確保所有表的數(shù)據(jù)都被正確導出。