使用PDE文件导出数据和传统EXP/IMP方式的区别

oracle数据库导出导入常用的有两种方式:

         其一是:使用命令行调用exp和imp命令来实现。可以通过设定命令参数来实现自己的功能需要。具体的参数含义可以在windows命令行下运行:exp help=y和imp help=y来查看具体的参数说明。这里导出的文件是dmp格式的文件。其运行原理在附录。

         其二是:通过使用PL/SQLdeveloper工具tool菜单里的import和export图形化工具中的Plsql developer导出方式来实现。这种方式可以选择三种文件导出格式dmp(也就是第一种方式上面oracle标准格式),sql格式,pde格式

两种方式主要的区别就在于他们导出的文件格式所带来的区别,下面分别介绍三种导出文件格式的区别。

 

         DMP格式:首先是通用性的问题,dmp文件是oracle原生的导入导出文件,它本身是二进制文件,导入导出速度快,压缩率高,移植性好可以跨平台使用但是只限于oracle数据库之间,还可以包含权限,但是导入到另一个数据库时受到数据表空间、用户名等约束,这是可以用PLSQLdeveloper工具tool菜单中的Export User Object导出你想要的表空间和表的sql脚本或者你可以直接写sql新建表空间和表。还有一点这个工具是向下兼容的也就是说高版本的oracle数据库导出的文件不可以导入到低版本的oracle数据库中,低版本的dmp文件也只能导入到只比他高一个版本的oracle数据库中(附录中列出了对于版本问题的简单总结)。高版本想低版本导数据就要就要选择其他两种文件格式了。

         然后是速度问题,通过dmp文件导入数据库,默认是先导入数据,再创建索引,所以dmp方式速度上会比较高N+log2N。

         不过在实际的工作环境中exp/imp命令方式的最大难点在于错误处理,因为该方式涉及到的各项约束较多可能会出现某些数据导入不成功,此时排查错误并修正数据需要仔细甄别。另外oracle版本的问题在实际工作中也是一个比较麻烦的问题。

 

         SQL格式,顾名思义,sql格式的文件就是一个sql的运行脚本文件,这决定了这个文件可以在几乎所有的主流数据库运行,还可以在文本编辑器上查看修改,通用性比较好,但是正因为需通用于大部分主流数据库,所以它的sql文件里,只能保存通用类型,如oracle的大数据类型clob,blob在使用sql导入导出时,就会发生错误。遇到其他数据库的特定类型,也是如此。而且假使表比较多,数据量比较大的话,得到的相应的sql文件也比较多,不方便管理和使用。         

         不过效率上sql不如上面的dmp文件,适合小批量的数据处理。

        

         PDE格式,这是PLSQLdeveloper这个oracle数据库管理工具特有的格式,只能通过PLSQL developer导出数据产生,也只能通过PLSQL developer将其中数据导入到数据库。文件也不能通过编辑器查看和编辑。不过这种方式不受源数据表空间、用户名等约束,且数据量更小。可以处理clob,blob等大类型,但是也只能用于oracle。不过通过pde文件导入数据是,默认是先建立了索引,之后再向表中插入数据,插入数据时要维护索引(N*log2N),所以速度比较慢,建议当通过pde导入数据时,可以选择不保留索引,或者先创建table,然后删除索引,最后导入数据;

        

         综上所述:

         如果你面对的数据库是oracle而且使用的是PLSQLdeveloper 管理来管理你的oracle。你大可以不再用命令行exp和imp命令,plsql的oracle 方式也可以在功能上完全代替exp和imp,操作上也更方便。如果使用pde方式来导数据,效率适中,可视化操作方便,导入导出的时候可以不必考虑版本、表空间等问题,也可以处理大类型,但是数据量很大时我个人经验i5标准电压笔记本cpu几十万条的数据都已经慢到不行了,pde类型的速度还是太慢,此时导入导出时必须去掉索引数据迁移完成之后再建立索引,再进一步如果面对的是一个大型的数据库有几百张表,你要把整个数据库迁移,那么删除所有索引的做法就显得不那么有效,这时候就建议使用dmp文件的方式。sql模式则适合那些表较少,数据也少的数据库的迁移,如果需要甚至可以用文本编辑器修改导出的文件。

 

附录:

1. 调用exp和imp命令来实现数据导入导出的原理:

       exp用户进程通过服务器进程连接到数据库,开启shadow进程,同时执行select语句查询数据库中的数据,通过buffer cache并通过SQL语句处理层再转移出exp导出文件,即exp进程需要占用服务器上的SGA和PGA资源。imp读取exp导出的.dmp文件,构造DDL语句,插入创建表与其他对象以及添加数据的语句

imp/exp导出三种模式
exp的导出数据的方式:
1、全库导出(这种方式一般不用)
2、按用户导出
3、按表导出

三种模式
(1)表方式,将指定表的数据导出/导入。
(2)用户方式,将指定用户的所有对象及数据导出/导入
(3)全库方式,将数据库中的所有对象导出/导入导出:
imp/exp高级应用


2.Oracle的imp/exp组件是我们常用的工具,它的一个操作原则就是向下兼容。下面是据此总结的几个使用规则和相关测试:

    规则1:低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,但高版本的exp/imp不能连接到低版本的数据库服务器

    规则2:高版本exp出的dmp文件,低版本无法imp(无法识别dmp文件)

    规则3:低版本exp出的dmp文件,高版本可以imp(向下兼容)

    规则4:从Oracle 低版本的Export数据可以Import到Oracle高版本中,但限于Oracle的相邻版本

    下面的博客链接有实际测试结果。