背景
今天進行UAT數據還原到SIT時,兩個環境Oracle數據庫用戶和表空間不一致,剛開始沒在意,經過一翻反復導入導出發現最終導入的只有表結構,數據始終無法導入。
導入的表結構 .sql文件和表數據 .dmp文件均無問題。
由於數據庫表結構里存在BLOB字段,PLSQL無法導出.sql結果的數據文件,只能通過dmp文件方式導出。經過網上無數PLSQL教程的指導和嘗試,發現無法解決此問題。直接敲命令的方式太麻煩沒有進行嘗試。不得不說還有人轉文章更坑,連導出數據的步驟都是錯的。下面進入正題。
版本
PL/SQL: Version 10.0.5.1710 01.706090
DB :Oracle Database 11g Enterprise Edition Release 11.2.0.3.0
執行步驟
a、導出原數據庫表結構:PL/SQL –> Tools –> Export User Objects
1:這個是所屬用戶,這個需要修改為默認用戶,把原來所屬用戶去掉
2:這個選項要去掉
b、導出原數據庫表數據:PL/SQL –> Tools –> Export Tables
Grants : 授權,如果兩邊用戶不同,這個選項千萬不要選,導出的數據重點就在這,只有這個選項會讓數據和用戶體系有關聯。
這樣我們需要的表結構和數據都可以導出完成了。由於我們表數據量大,跑一次就得半小時,就這個玩意兒坑了我兩個小時。
c、導入表結構到新數據庫:PL/SQL –> Tools –> Import Tables –> SQL Insert
這個沒什么難度,找對地方、找對文件直接干就能成功了。
d、導入表數據到新數據庫:PL/SQL –> Tools –> Import Tables –> Oracle Import
同樣的問題在這個:
Grants: 這個不要選,如果導出的數據里Grants存在,在這導入時不選擇是否能成功?由於我這操作麻煩就沒有再次嘗試了。
Show:這個據說選擇了的話,數據就無法導入進去了,沒驗證,反正也沒啥用,就不選了。
總結
小問題也能帶來大麻煩,表面看來只是一個選項選擇的問題,里面其實涉及含義很多。
1、如果是數據庫遷移或者還原,那么Grants這種權限類,表空間類的選項肯定是要選擇的。
2、對於不同用戶、表數據導入就只關注數據本身,原數據庫表的權限之類的屬性就會和新表引起沖突導致導入失敗。