近日碰到這個問題,在此記錄下。本文使用的是windows server2012,oracle11g。
- 準備:
爲了方便使用,在需要的服務器上裝上oracle客戶端,並在Net Manager中配置好本地的服務(直接裝oracle數據庫是默認配置好的,此步驟可忽略),這樣使用PLSQL會很方便;
實例對應的非sys用戶,本文使用yssl用戶(使用sys用戶也可以);
在指定目錄下新建文件夾,本文在C盤下建立了datapump文件夾,目錄爲: C:\datapump。
- 第一步:
爲了方便dmp文件的相關操作,使用sys用戶,以SYSDBA角色登錄數據庫,執行以下命令創建邏輯路徑並授權:
SQL> create or replace directory datapump as 'C:\datapump';
SQL> grant read,write on directory datapump to yssl;
SQL> grant resource,DBA to yssl;
- 第二步:
準備好par文件,本文使用名爲testdmp的par文件,顯示爲:testdmp.par,文件內容如下:
userid = yssl/yssl@ysdb
directory = datapump
dumpfile = testdmp.dmp
tables =
'cs_class',
'cs_msg',
'cs_log'
logfile = testdmp.log
解釋下上述內容,可根據實際情況進行修改:
userid 對應的是:用戶名/用戶密碼@實例服務名;
directory 對應的是:系統設置的指定目錄,詳情見第一步相關操作;
dumpfile 對應的是:生成dmp的名字;
tables 對應的是:表名,表名用單引號包裹,多表用英文逗號隔開;
logfile 對應的是:日誌名稱。
- 第三步:
使用cmd窗口在testdmp.par相同目錄下執行下列語句:
expdp parfile=testdmp.par
所有需要生成的文件,比如testdmp.dmp和testdmp.log文件,都會在上文設置好C:\datapump目錄下生成。
- 第四步:
在需要導入的oracle上也按照第一步設置好目錄,並將dmp文件拖拽到對應的datapump目錄中,在cmd窗口執行下列語句:
impdp yssl/yssl@ysdb directory=datapump dumpfile=testdmp.dmp DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS TABLE_EXISTS_ACTION=REPLACE
上述內容中,DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS 的作用是忽略導入過程中違反約束的數據;
TABLE_EXISTS_ACTION=REPLACE 是刪除已存在表,重新建表並追加數據。
至此,記錄完成。