經常有人會問:原來的數據在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的使用,此處不作詳細解釋。