Oracle用DMP导入导出部分表

一直都是用Oracle的dmp语句来导入导出整个库,但是这次为了减低工作量,采用了部分表更新的方式,所以选择了部分导出。

刚开始的时候打算像MySQL一样采用SQL语句导入导出的方式,结果也就4000多条数据而已,2M的一个SQL语句,直接让PL/SQL立扑了。看来对于Oracle这方法行不通。于是还是想到使用dmp,但是我本机只是安装了一个简化的客户端,捣鼓了半天还是没办法用dmp,于是只能在服务器上做这个操作。

语句就很简单了,导出:
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)

导入:
imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1)  ignore=y

但是发现似乎只要是数据库中还存在那两张表,就没办法正确的导入进去,必须要先Drop掉,才可以顺利的导入进去,这次速度就快多了,不到10秒就完成了。

如果有多个以某个字符开头的表,比如AAA_A,AAA_B这样的,要实现批量导出可以先运行:

select  table_name   from   user_tables t WHERE t.TABLE_NAME LIKE 'AAA_%'

将导出的文件形成一个CSV,然后编辑它,把它变成类似table1,table2这样的模式(正则表达式很容易做到这点)

然后为了能够顺利的导入,最好先truncate表,于是把这个文件再次操作一下变成类似

truncate table AAAA_A;
truncate table AAAA_B;
...

这样的形式,然后保存为SQL文件,例如1.sql

然后在字符界面下运行:

sqlplus  system/manager@TEST   @D:\1.sql

批处理执行SQL文件即可,然后再导入表,就不会报告那么多错误了

评论

此博客中的热门博文

远程记录OpenWRT日志

用OpenWRT打造自动翻墙路由器(详解篇)

转一下关于Fuck的用法