標籤:oracle資料庫中exp/imp
最近使用oracle9i時,遇到了Database Backup和恢複的問題,很多時候與exp和imp的命令使用有關。針對遇到的問題,簡單的總結。
問題的背景,就是需要對某張表匯入和匯出。資料庫database1,dateabase2在資料庫中涉及的使用者主要是 user1,user2,備份的對象主要是表table1。
對於exp和Imp命令的內容網上較多的解說,這裡主要解決具體的問題,使用的只是常用的命令項。
1.從database2中匯出表 table1
exp userid=system/[email protected] tables=(user1.table1) rows=y log=d:\log.txt file=d:\table1.dmp
這個一般沒有什麼問題,最好是在命令列視窗中運行。把database2資料庫中user1方案中的table1匯出。匯出似乎有一個原則,哪個方案(使用者)的表,只有擁有者可以執行。也就是說,雖然使用的是system使用者,但是在exp時,資料庫會把使用者切換為user1,就是table1的擁有者,在開始exp。不過一般匯出時還是使用許可權相對高一些的使用者比如sysem。
exp userid=lj/[email protected] full=n tables=(CT231) rows=y log=d:\log1.txt file=d:\ct2311.dmp
2. 在Imp時,遇到的問題如下:
1)許可權對等的使用者才可以執行匯入。
如果這樣寫命令,imp user2/[email protected] tables=(table1) rows=y log=d:\log.txt file=d:\table1.dmp
提示:有dba許可權的使用者匯出,匯入也要是用同等許可權的使用者匯入。就是要匯入的使用者user2,不具有dba的許可權,不允許匯入
2)IMP-00033: 警告: 在匯出檔案中未找到表
imp system/[email protected] rows=y log=d:\log.txt file=d:\table1.dmp
--IMP-00033: 警告: 在匯出檔案中未找到表
通過查詢相關資料,應該是沒有指定方案的備份對象,就在命令中加入了touser=user2,運行問題還是存在,imp system/[email protected] rows=y log=d:\log.txt file=d:\table1.dmp touser=user2 --IMP-00033: 警告: 在匯出檔案中未找到表
又思考是不是必須在database1中建立一個與user2不同命的方案,又建立了user3方案,還是同樣的問題。imp system/[email protected] rows=y log=d:\log.txt file=d:\table1.dmp touser=user3 --user3實在database2 資料庫中建立的使用者(方案)不同於database1中user1。
在繼續的查閱中,很多人都指出了一個問題,就是命令在使用的時候,必須要保證最低的完整,就是方案,擁有者要指明,也就是fromuser=user1 ,touser=user2 要給出。問題就解決了。
imp system/[email protected] fromuser=user1 touser=user2 rows=y log=d:\log.txt file=d:\table1.dmp
其實touser也可以指明在目標資料庫中的不同名使用者,不僅可以是user2,還可以是其他的使用者,這樣table1在目標資料庫中的擁有者就變換成指明的使用者。這樣就可以更改某一張表的owner,在Oracle資料庫中通常資料對象的所有者是不能更改的。
資料表的匯入匯出可以多張表。一般是很難保證資料表條件約束和建立的其他對象的完整。如果指明是owner=(),就是說要匯出某個方案,此時就不能指定tables=(),這樣會有衝突。
整個資料庫匯入匯出也是可以的。當然也可以全庫匯出,只匯入需要的部分方案,只需修改命令參數使用。
oracle資料庫中exp/imp之初次使用