2011年5月18日 星期三

Toad for Oracle的Import Utility Wizard, 有個畫面寫錯啦~

以前公司的資料庫是用IBM DB2
那時我們裝的DBMS就是Toad
然後現在使用是Oracle
再去逛Toad發現原來Toad有為各DB推出對應的DBMS
Toad在網路上搜尋一下
名聲還滿高的
所以這次就使用了Toad for Oracle

我們知道SQL語法各家DB廠商都略有不同
所以如果你用ORM框架
例如知名的Hibernate, 它會自動幫你將操作物件的動作
轉成各DB適用的SQL
所以這大概也是這類ORM框架受歡迎的原因之一
不過這是題外話

這次工作上有需要將遠端A資料庫下甲使用者所有TABLE的資料
備份到本機B資料庫
所以研究了一下Oracle的匯出匯入指令
在電腦有安裝Oracle DB的情況下
像我是安裝Oracle Database 10g Express Edition Release 10.2.0.1.0
就可以在命令列輸入exp或imp
然後它自動會引導你完成後續動作
滿方便的
像是命令列精靈一樣

接著再研究到Toad for Oracle
嗯嗯~它也有匯出匯入功能
而且是視覺化精靈
一步一步引導你完成步驟
比命令列好用許多

我執行備份的步驟
1.在Toad for Oracle
先選擇A資料庫的連線
工具列->Database->Export->Export Utility Wizard,
然後選擇匯出TABLE
照著精靈指示操作後
最後會得到*.DMP檔案
(我猜DMP的全名是 DATA DUMP)
2.再選擇B資料庫的連線
工具列->Database->Import->Import Utility Wizard,
一樣選擇匯入TABLE
(其實它的選項還有匯入User, 匯入Tablespace等.
不過既然當初匯出Table, 這裡當然就是選匯入Table啦!)
然後選擇要匯入的檔案, 接著就開始執行
--由於我的B資料庫原本空無一物
所以匯入時, 會順便建立 TABLE
以及TABLE的資料
(如果欲匯入的TABLE已存在於B資料庫了,
會發生什麼事?
答:還沒研究到那....
20110610更新:資料會附加在既有資料後面
如果有一模一樣的, 則該筆資料會匯入失敗
例如以下錯誤訊息:
. 正在將 TESTLA 的物件匯入 TESTLA 中
. . 正在匯入表格                       "TESTLA1"
IMP-00019: 資料列遭拒由於發生 ORACLE 錯誤 1
IMP-00003: ORACLE 錯誤 1 發生
ORA-00001: 違反必須為唯一的限制條件 (TESTLA.TESTLA1_PK)
資料欄 1 Steven
資料欄 2 Jay      

匯入了                                                             0 列
已順利終止匯入作業, 但含有警告.

後來google到有人說這種匯入方式是用sql的insert句子執行的
所以效率慢且無法選擇你要replace還是append等匯入模式

但oracle 10g後多了另外一種匯入匯出的功能: Data Pump
可以提升匯入匯出的速度
並且可以自行選擇要匯入的選項, 有
skip: 如已存在就跳過處理下一筆
append: 附加在現有資料後面
replace: 如已存在取代現有資料
truncate : 如已存在則砍掉現有資料再新增
參考來源: 這裡那裡

所以做個總結吧!
Import/Export Utility Wizard ->用傳統的insert語句達成, 速度較慢, 無法選擇匯入方式, 參數較少較簡單
Data Pump Import/Export Wizard ->用某種神秘的技術加速匯入匯出速度, 可以選擇四種匯入方式, 參數較多較複雜, 執行的使用者最好需具備DBA的權限, 因為過程中會建立資料夾之類的
)

今天的標題是:
Import Utility Wizard, 有個畫面寫錯啦~

就是在選擇匯入檔案時
它老兄給我出現下列這個圖















紅框處它竟然寫Export file name
害我覺得很疑惑
阿現在是說, 他會自動從A資料庫匯出一個檔
然後再自動將此檔匯入到B資料庫
所以現在是要我選擇匯出的檔案名稱嗎?
(功能這麼強大?)

可是當我看到另一個紅框處標示的"Open",
我就釋懷了
這的的確確是要我選擇Import file name.
所以畫面上的Export file name完全是筆誤

沒有留言:

張貼留言