解決Oracle 11G命令行導(dǎo)出表不全的方法
在Oracle 11G中,命令行exp只會(huì)導(dǎo)出已經(jīng)分配過(guò)segment的表,如果數(shù)據(jù)庫(kù)中的表數(shù)據(jù)條數(shù)是0時(shí)不會(huì)分配segment,因此這些表就不能被導(dǎo)出。為了解決這個(gè)問(wèn)題,我們可以采取以下方法: 方
在Oracle 11G中,命令行exp只會(huì)導(dǎo)出已經(jīng)分配過(guò)segment的表,如果數(shù)據(jù)庫(kù)中的表數(shù)據(jù)條數(shù)是0時(shí)不會(huì)分配segment,因此這些表就不能被導(dǎo)出。為了解決這個(gè)問(wèn)題,我們可以采取以下方法:
方法一:修改deferred_segment_creation參數(shù)
首先,我們可以通過(guò)修改deferred_segment_creation參數(shù)來(lái)禁用這個(gè)功能。但是需要注意的是,這個(gè)修改只對(duì)以后創(chuàng)建的表生效,對(duì)于已經(jīng)存在的表沒(méi)有影響。你可以使用以下命令將deferred_segment_creation參數(shù)設(shè)置為false:
alter system set deferred_segment_creationfalse;
方法二:查詢空表并生成Alter語(yǔ)句
其次,我們可以通過(guò)查詢空表并生成Alter語(yǔ)句的方式來(lái)手動(dòng)分配segment。你可以使用以下命令查詢空表:
select table_name from user_tables where NUM_ROWS0;
通過(guò)以上命令,我們可以得到一張空表的列表。接下來(lái),我們可以使用以下語(yǔ)句生成一些Alter語(yǔ)句,幫助我們分配segment:
select 'alter table ' || table_name || ' allocate extent;' from user_tables where num_rows0;
執(zhí)行以上語(yǔ)句后,將會(huì)生成一系列的Alter語(yǔ)句。你可以將這些語(yǔ)句保存到一個(gè)sql文件中。
方法三:導(dǎo)出結(jié)果集并執(zhí)行
在生成的sql文件中,你可以進(jìn)行一些替換操作,將公共的部分替換為空字符。例如,將"insert into user_tables ('ALTERTABLE'||TABLE_NAME||'ALL')"替換為空字符,將"values ('','');"替換為空字符。然后,你可以執(zhí)行這些語(yǔ)句,從而手動(dòng)分配segment到空表上。
最后,在執(zhí)行完以上操作后,你可以再次執(zhí)行exp命令,這樣就可以完整地導(dǎo)出所有表的數(shù)據(jù)了。
通過(guò)以上方法,你可以很方便地解決Oracle 11G命令行導(dǎo)出表不全的問(wèn)題,并確保所有表的數(shù)據(jù)都被正確導(dǎo)出。