背景
需要把测试环境82库的一个有30条数据导入开发环境200库中,plsql图形界面有文本导入,最开始采用导csv的形式,
导出效率也很快,但是导入时会出现乱码,也设置了本地编码的环境变量NLS_LAGUAGE与数据库保持一致
,但导入始终是乱码。所以通过下面两种方法解决
方法一、采用oracle最原始dump文件的导出再导入的形式
本方法由于导出的是二进制文件,就不会存在编码问题。效率也很高
1、数据导出
1.1、创建导出参数文件
参数文件 expFile.txt 内容如下
路径:C:\Users\wanghao\Desktop
tables=ggcode_test //需要导出的表
rows=y //导出表数据
file=D:\software\oracle11\exp\ggcode_test.dmp //导出文件路径以及文件名
log=D:\software\oracle11\exp\exp.log //导出日志
1.2 执行导出
打开cmd 直接输入
exp ctcheckpasswd@10.248.100.81/ctcore parfile=C:\Users\wanghao\Desktop\expFile.txt
导出时间花了40多秒效率也非常的高
2、数据导入
导入dump文件前,需要坚持导入的数据库中是否有该表,如果有的话需要drop掉,不然导入时会报错
2.1 创建导入参数文件
导入参数文件impFile.txt
路径C:\Users\wanghao\Desktop
file=D:\software\oracle11\exp\ggcode_test.dmp //导入文件路径以及文件名
tables=ggcode_test //导入的表
rows=y //导入数据
fromuser=ctcheck //数据来自用户
touser=ctuat //导入用户
2.2 执行导入
同样在cmd命令行直接输入即可
imp ctuat/passwd@10.248.100.200/ctcore parfile=C:\Users\wanghao\Desktop\impFile.txt
导入差不多50s左右 效率极高
查看结果,成功导入了30w条数数据
方法二、通过创建DBLINK方式
在需要导入的数据库创建dblink,然后通过dblink访问需要获取的表数据插入到目标表中
注意为了安全起见。最后在源数据库重新创建一个用户,该用户只有查询权限,然后用该用户创建
dblink,这样就不会出现通过dbliink修改源库的数据了
创建的blink方法在 :https://blog.csdn.net/whandgdh/article/details/79286848
这里就不需要再赘述。
总结
exp和imp命令导出导入dump文件的形势。通过二进制文件方式导出和导入,不会存在乱码,除非导入导出数据库的编码不一致,同时效率也非常高。但是可能会存在如果用户没有导出 exp_full_database ,导入:imp_full_database权限
需要dba授权。
对于dblink方式也非常的简单,就不存在导出这个步骤,直接通过dblink访问源表,直接插入到目标表。同样这里可能也需要dba创建dba