Oracle小技巧_不同表空間不同用戶導入導出數據dmp


【博主注:數據庫方面 ITPUB網站及博客內容非常豐富】
 

轉載來源 ITPUB 博客

經常有人會問:原來的數據在USERS表空間里面,我想把它IMP進APP表空間,我已經修改了目的用戶的默認表空間,為什么結果還是IMP到USERS表空間中了呢。

關於此問題,作如下解釋:
Oracle並沒有提供什么參數來指定要導入哪個表空間,數據默認將導入到原本導出時數據所在的表空間中,但是我們可以通過以下的方法來實現導入到不同的表空間。

下面是網絡上搜集的3個方法:


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的使用,此處不作詳細解釋。
 


樓主成功方法,基本是方法2,但略有不同。
 
步驟1:新建表空間和臨時表空間(略),新建用戶。
 
create user orange identified by 12345678;
grant resource,connect,dba to orange;
revoke unlimited tablespace from orange;
alter user orange default tablespace newtablespaces temporary tablespace newtablespacestemp;   -- 設置默認表空間為新建的表空間
alter user orange quota unlimited on newtablespaces ;    -- 設置對默認表空間/新表空間配合為無限制配額

步驟2:導出原表空和原用戶的數據表結構(不含數據)。

// 這是CMD命令
// rows=n 表示不導出數據
exp apple/pwd@dblink file=E:\dbtable.dmp rows=n

// 導入數據表,更換表的所屬用戶
// tablespaces=newtablespaces 參數一定要加
imp orange/pwd@dblink file=E:\dbtable.dmp fromuser=apple touser=orange ignore=y tablespaces=newtablespaces

 步驟3:導出原來的全部數據,導入到已經建好的表結構中。

// 導出原表空間和原用戶的數據庫表及數據
exp apple/pwd@dblink file=E:\dbtabledata.dmp 

// 導入數據到新用戶和表空間中
// tablespaces=newtablespaces 參數一定要加
imp orange/pwd@dblink file=E:\dbtabledata.dmp fromuser=apple touser=orange ignore=y tablespaces=newtablespaces

 

注意:

1.導入時如果不加參數 tablespace=XXX,總是報錯:ORA-01950:對表空間無權限。

2. 對臨時表空間不能執行配額操作,對永久表空間可以。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM