【匯入匯出】將資料匯入到其他使用者

楊奇龍發表於2010-08-15

要將資料匯入到其他使用者下,在進行imp 時要使用 FROMUSER   和 TOUSER 這兩個引數

FROMUSER: 指定物件的原有屬主    TOUSER:指定物件的新屬主,即要匯入的使用者 如匯入原scott 使用者下的dept 表和emp 表到 yang 使用者下
1)  C:\Documents and Settings\Administrator>exp   file=f:\dump\scott.
dmp log=f:\dump\scott.log tables=(emp,dept)
Export: Release 11.1.0.6.0 - Production on 星期日 8月 15 22:54:27 2010
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
連線到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已匯出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即將匯出指定的表透過常規路徑...
. . 正在匯出表                             EMP匯出了          14 行
. . 正在匯出表                            DEPT匯出了           4 行
成功終止匯出, 沒有出現警告。

在YANG使用者下 ,檢視匯入結果:

SQL> show user
USER 為 "YANG"
SQL> select username,default_tablespace from user_users;
USERNAME      DEFAULT_TABLESPACE                              
--------------------   -------------------------                  
YANG                   EXAMPLE    ---yang 的預設表空間                                 
SQL> select table_name,tablespace_name from user_tables;
TABLE_NAME                  TABLESPACE_NAME                                 
------------------------------ ------------------------------                  
TEST                                   EXAMPLE                                         
CLOB_CONTENT             EXAMPLE                                         
EMP                                      USERS    --匯入的物件所屬表空間                                
DEPT                                    USERS

2)什麼原因呢?
   imp 時在匯入資料時會首先建立表結構,這個表結構來自exp 匯出的資料庫,其中包含該物件在源端資料庫中 的儲存屬性,(比如這個emp表 其屬性說明它存在users 表空間裡) 在匯入到目標資料庫中時仍然會尋找並儲存到那個表空間,如果找到,就匯入到那個表空間裡!如果找不到,就報錯,你猜呢,當然會報錯了....

3)解決辦法:
首先顯示的授予使用者指定的表空間 的儲存許可權,我的yang 表空間是example ,然後收回UNLIMIT tablespace 許可權(UNLIMIT tablespace:擁有操作所有表空間的許可權)   

SQL> conn as  sysdba
已連線。
SQL> alter user yang quota unlimited on example;
使用者已更改。
SQL> revoke unlimited tablespace from yang;
撤銷成功。

4) 再次執行匯入,(先將emp 和dept 刪除掉!)

SQL> conn
已連線。
SQL> drop table emp purge;----為了再次匯入,當然也可以使用ignore =y 引數
表已刪除。
SQL> drop table dept purge;
表已刪除。
SQL> set timing on
SQL> select username,default_tablespace from user_users;
USERNAME                       DEFAULT_TABLESPACE                              
------------------------------ ------------------------------                  
YANG                           EXAMPLE                                         
已用時間:  00: 00: 00.01
SQL> select table_name,tablespace_name from user_tables;
TABLE_NAME                     TABLESPACE_NAME                                 
------------------------------ ------------------------------                  
TEST                                    EXAMPLE                                         
CLOB_CONTENT              EXAMPLE                                         
EMP                                      EXAMPLE -這次的結果符合期望                                     
DEPT                                     EXAMPLE
                                         
已用時間:  00: 00: 00.18

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

相關文章