oracle遷移數據庫用dump命令(exp、imp命令)

場景

公司需要遷移數據庫。有幾個表的數據量比較大,有2000萬條數據。

navicat 遷移

navicat的遷移數據庫的方式最簡單,但是原理是sql導出和插入,實測速度大概3000條/秒 。 3小時只導入了60萬條數據。 遠遠無法滿足要求。

pl/sql進行遷移

用pl/sql的導出dmp導出速度可以達到 10萬/秒。但是導入很慢,只有 100條/秒。
用pl/sql的導出dpe導出速度可以達到 10萬/秒。
還是無法滿足要求。

解決方案

決定採用oracle自帶的命令行導出方式。

單表導出導入

單表操作過程:

# 源庫 切換到oracle用戶 導出命令
# directory=dpdata1 用來設置文件夾,但是實測不成功,先不管
exp userid=zhangsan/1234@crm tables=t_user file=t_user .dmp;

# 目標庫 切換到oracle用戶 導入命令
imp lisi/1234@crmnew file=t_user.dmp  full=y  ignore=y;

然後循環所有表即可:

-- 查看錶名 和 大概條數
SELECT table_name,num_rows FROM user_tables order by num_rows desc;

庫導出導入(未成功)

用單表的方式,循環可以完成。 但是比較麻煩。 oracle也有導庫的方式,實測沒有成功。

-- 導出庫
expdp zhangsan/1234@crm schemas=crmdata dumpfile=mydump.dmp ;

報錯:only a DBA can import a file exported by another DBA

是因爲沒有授權。

sqlplus / as sysdba;
grant imp_full_database to jxskdata;

授權之後不報這個錯了,繼續報錯。

報錯信息

UDE-03113: operation generated ORACLE error 3113
ORA-03113: end-of-file on communication channel
Process ID: 1001
Session ID: 785 Serial number: 195

再次執行報錯:

UDE-12514: operation generated ORACLE error 12514
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

太麻煩了,不搞了。

導入命令:

impdp lisi/1234@crmnew SCHEMAS=crmdata dumpfile=mydump.dmp ;

其他

這篇文章介紹的不錯:
expdp / impdp 用法詳解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章