解答:expdp 丟失試圖的解決方法。
一、expdp 丟失試圖原因
在使用Oracle的expdp命令導出數據時,如果導出的數據中包括試圖(view),但並沒有對試圖進行手動導出,則在導入數據時會出現試圖丟失的情況。expdp並不會主動導出試圖信息。
expdp方案中的view基於原表,因此如果在導出expdp時,定義視圖源表的選項,「include=view」應該必須添加碎片,「include=table」會同時將源表和視圖導出。
二、解決方法一:手動導出試圖
通過添加以下的選項,手動導出試圖信息:
expdp system/xxxx schemas=icnit1,include=view directory=META_DIR dumpfile=icnit1_exp.dmp logfile=icnit1_exp.log
其中,schemas指導出的用戶,directory指導出的目錄,dumpfile為導出文件名,logfile為導出日誌文件名。
這種方法需要手動導出試圖,並在導入時手動導入。
三、解決方法二:使用remap_schema選項
在expdp時,通過remap_schema選項將某個schema映射成新的schema,然後再創建目標schema並將試圖導出,實現試圖信息的導出。具體步驟如下:
- 在目標用戶下創建一個和原用戶同名的用戶;
- 使用remap_schema選項將原用戶映射到新用戶上;
- 使用include=view選項將與映射後的新用戶相關的試圖導出。
示例代碼如下:
expdp system/xxxx directory=META_DIR dumpfile=icnit1_exp.dmp logfile=icnit1_exp.log remap_schema=icnit1:icnit1_beta include=view
這種方法可將導出的expdp文件中包含試圖信息,但是在導入時需要先手動創建試圖。
四、解決方法三:使用full選項
使用full選項可以導出指定用戶的所有schema、視圖和其他對象。示例代碼如下:
expdp system/xxxx full=y directory=META_DIR dumpfile=icnit1_exp.dmp logfile=icnit1_exp.log
使用此方法會導出所有相關對象,但是會增加導出文件的大小,同時也包含不需要的對象,導入時需要先手動篩選和創建需要的對象。
五、解決方法四:使用dbms_metadata.get_ddl生成建議腳本
可以使用dbms_metadata.get_ddl函數在命令行中生成代碼來生成和重建view,語法如下:
select dbms_metadata.get_ddl(object_type, object_name, owner) from user_objects where object_type='VIEW';
生成的語句可以重新構建view對象。
此方法可以生成完整的視圖定義,並且不需要包含導出文件中的所有對象信息,可減少導出文件的大小。
原創文章,作者:AOKDR,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/373597.html