您好,登錄后才能下訂單哦!
最近使用oracle9i時,遇到了數據庫備份和恢復的問題,很多時候與exp和imp的命令使用有關。針對遇到的問題,簡單的總結。
問題的背景,就是需要對某張表導入和導出。數據庫database1,dateabase2在數據庫中涉及的用戶主要是 user1,user2,備份的對象主要是表table1。
對于exp和Imp命令的內容網上較多的解說,這里主要解決具體的問題,使用的只是常用的命令項。
1.從database2中導出表 table1
exp userid=system/mypawd@dateabase2 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/ljjtw@hmis1 full=n tables=(CT231) rows=y log=d:\log1.txt file=d:\ct2311.dmp
2. 在Imp時,遇到的問題如下:
1)權限對等的用戶才可以執行導入。
如果這樣寫命令,imp user2/mypawd@dateabase1 tables=(table1) rows=y log=d:\log.txt file=d:\table1.dmp
提示:有dba權限的用戶導出,導入也要是用同等權限的用戶導入。就是要導入的用戶user2,不具有dba的權限,不允許導入
2)IMP-00033: 警告: 在導出文件中未找到表
imp system/mypasswd@database2 rows=y log=d:\log.txt file=d:\table1.dmp
--IMP-00033: 警告: 在導出文件中未找到表
通過查詢相關資料,應該是沒有指定方案的備份對象,就在命令中加入了touser=user2,運行問題還是存在,imp system/mypasswd@database2 rows=y log=d:\log.txt file=d:\table1.dmp touser=user2 --IMP-00033: 警告: 在導出文件中未找到表
又思考是不是必須在database1中建立一個與user2不同命的方案,又創建了user3方案,還是同樣的問題。imp system/mypasswd@database2 rows=y log=d:\log.txt file=d:\table1.dmp touser=user3 --user3實在database2 數據庫中建立的用戶(方案)不同于database1中user1。
在繼續的查閱中,很多人都指出了一個問題,就是命令在使用的時候,必須要保證最低的完整,就是方案,擁有者要指明,也就是fromuser=user1 ,touser=user2 要給出。問題就解決了。
imp system/mypasswd@database2 fromuser=user1 touser=user2 rows=y log=d:\log.txt file=d:\table1.dmp
其實touser也可以指明在目標數據庫中的不同名用戶,不僅可以是user2,還可以是其他的用戶,這樣table1在目標數據庫中的擁有者就變換成指明的用戶。這樣就可以更改某一張表的owner,在Oracle數據庫中通常數據對象的所有者是不能更改的。
數據表的導入導出可以多張表。一般是很難保證表約束和創建的其他對象的完整。如果指明是owner=(),就是說要導出某個方案,此時就不能指定tables=(),這樣會有沖突。
整個數據庫導入導出也是可以的。當然也可以全庫導出,只導入需要的部分方案,只需修改命令參數使用。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。