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文件即可,然后再导入表,就不会报告那么多错误了
刚开始的时候打算像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文件即可,然后再导入表,就不会报告那么多错误了
评论
发表评论