兩個資料庫結構相同,但使用者、表空間名稱都不同,如何把一個資料庫中的使用者導到另一個

tolywang發表於2005-01-19

轉載

經常有人會問:原來的資料在USERS表空間裡面,我想把它IMP進APP表空間,我已經修改了目的使用者的預設表空間,為什麼結果還是IMP到USERS表空間中了呢。

關於此問題,作如下解釋:
Oracle並沒有提供什麼引數來指定要匯入哪個表空間,資料預設將匯入到原本匯出時資料所在的表空間中,但是我們可以透過以下的方法來實現匯入到不同的表空間。


1.在IMP時候使用INDEXFILE引數
當給此引數指定了某一檔名,IMP的時候所有的index將不會直接匯入到表空間中,而是在指定的檔案中生成建立index的指令碼。
然後用文字編輯器開啟此檔案,直接編輯指令碼中的storage引數,修改為想要匯入的表空間名稱。
然後重新執行IMP,使用INDEXS=n引數將除Index之外的Objects匯入。
最後進入SQL*PLUS,直接執行剛才編輯的指令碼,生成索引。
該方法適用於將index以及constraints匯入指定的表空間。

2.改變目的使用者的預設表空間
這就是上面說的經常有人提問的方法。但是上述的問題之所以沒有成功,是因為缺少了下面的幾步。
首先,收回目的使用者的"UNLIMITED TABLESPACE"許可權:
revoke unlimited tablespace from username;
其次,取消目的使用者在原資料匯出表空間中的配額,這樣才能迫使IMP把資料匯入到使用者的預設表空間中去。
然後,將希望匯入的表空間設為目的使用者的預設表空間,並新增配額。
最後,執行IMP。

3。使用TOAD
TOAD是強大的Oracle資料庫管理軟體,是Quest出品的第三方軟體,我們可以使用其中的Rebuild Multi Objects工具來實現將多個Object轉移到指定的表空間。
於是我們可以不管三七二十一,先IMP,然後再用TOAD作事後的修改。
關於TOAD的使用,此處不作詳細解釋。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84240/,如需轉載,請註明出處,否則將追究法律責任。

相關文章