今天在Maclean的oracle群里看到有个家伙说,expdp 的文件split 再cat 之后 导不进数据库,下面是我的实验结果
注:数据库的用户名是demo_ls 只有一张表 总的大小不超过1M
$sqlplus / as sysdba
建目录,为数据泵导出
SQL>create directory dmpdir as '/oracle/dmp';
SQL> grant read on directory dmpdir to demo_ls;
数据泵导出
$expdp demo_ls DUMPFILE=expdpdemo.dmp directory=dmpdir schemas=demo_ls;
分割
$split -b 330k expdpdemo.dmp expdpdemo_
此时可以看到在/oracle/dmp目录有多个文件如expdpdemo_a*
合并
$cat expdpdemo_* > expdpdemo_new.dmp
再导入数据库
$./impdp crmii/abs directory=dmpdir dumpfile=expdpdemo_new.dmp table_exists_action=replace
- - relpace 表示当表存在时,先drop,再create。
还有三个选项,分别是 skip(default),append 追加数据 truncate 先清空表,再插入数据
导入时有一个错误,是用户名demo_ls已存在,先删除用户 drop user demo_ls cascade 再impdp 完全没问题。
另外再试expdp/impdp之前也试了exp/imp,分割再分离,也没有问题。
由于数据量较小,测试可能不充分,但我想在大数据量下,这么分割再合并是没有问题
再试了一次,把一个10G左右的库expdp(不到10分钟),分割,再合并,发现与原文件的大小一样,
$diff -c crmii.dmp crmii_new.dmp
两则没有不同之处,所以分割再合并之后,可以正常导入