需求描述:目前遠程服務器有兩個數據庫AA和BB,兩個數據庫的數據庫版本都為10.2.1.0.1,兩個數據庫中的用戶不一樣,但數據庫中的表結構都是一樣的,數據庫AA表中的數據比數據庫BB表中的數據多很多,現在需要把數據庫AA中幾十張表的數據遷移到數據庫BB的表中。如果在數據庫AA中存在的數據,但在數據庫BB中沒有的數據,則需要把這些數據導入到數據庫BB中。
比如:數據庫AA 的數據庫名稱為AA,所有的表都在A_UserName用戶下,改用戶的密碼為A_Password;
數據庫BB 的數據庫名稱為BB,所有的表都在B_UserName用戶下,改用戶的密碼為B_Password;
假設本機是一臺windows系統的PC機,裝有Oracle數據庫10.2.1.0.1的版本(服務器版或客戶端版都可以),在該系統已經配置好數據庫的監聽器($ORACLE_HOME\NETWORK\ADMIN\tnsnames.ora).
下面導出、導入兩個表為例子(當然幾十個表也是沒有問題的)
1 導出數據庫AA中兩表的所有數據:
D:\>expA_UserName/A_Password@AAtables=(DH_REP_WORK,DRILL_ADM_YEAR_TARGET) file=20081029 log=20081029.log
Export: Release 10.2.0.1.0 - Production on 星期三 10月 29 16:11:20 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved. |
連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production With the Partitioning, OLAP and Data Mining options
|
已導出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即將導出指定的表通過常規路徑...
. . 正在導出表 DH_REP_WORK導出了 1 行
. . 正在導出表 DRILL_ADM_YEAR_TARGET導出了 40 行
成功終止導出, 沒有出現警告。 |
從上面可以看出來成功導出來遠程數據庫AA中兩表的數據。
2 導入到數據庫BB中(請先看下面的錯誤原因)
D:\>impB_UserName/B_Password@BBtables=(DH_REP_WORK,DRILL_ADM_YEAR_TARGET) file=20081029 log=20081029imp.log
Import: Release 10.2.0.1.0 - Production on 星期三 10月 29 16:13:33 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production With the Partitioning, OLAP and Data Mining options
經由常規路徑由 EXPORT:V10.02.01 創建的導出文件IMP-00013: 只有 DBA 才能導入由其他 DBA 導出的文件IMP-00000: 未成功終止導入
不能導入原來是B_UserName用戶沒有具有DBA角色的權限。
3、登陸到數據庫BB中,用超級用戶sys給B_UserName用戶授權
SQL> grant dba to B_UserName;
Grant succeeded. |
4 、現在重新導入到數據庫BB中,為了減少日志的錯誤使用ignore=yes(忽略錯誤),rows=y是導入表中的數據,grants=no表示不導入授權(假如在數據庫AA中表DH_REP_WORK授權給了test用戶,但數據庫BB中沒有test用戶,則不用執行授權給test用戶)。
D:\>imp B_UserName/B_Password@BB tables=(DH_REP_WORK,DRILL_ADM_YEAR_TARGET) rows=y ignore=yes grants=no file=20081029 log=20081029Imp.log
執行上面的語句,可能會有些錯誤提示,一般是在數據庫BB中的已經存在該數據,由于主鍵的唯一性,所以不能插入。但數據庫AA中存在、但數據庫BB中不存在的數據就可以順利的插入到數據庫BB中了。
5、登陸到數據庫BB中,用超級用戶sys回收B_UserName用戶dba的角色:
SQL> revoke dba from B_UserName;
Revoke succeeded. |