如何解决pl/sql developer无法大批量执行插入sql语句以及处理sqlplus插入数据中文乱码问题

需求背景:由于系统上线后需要连接第三方数据库,我们想要把第三方数据先备份到本地库,以方便本地调试。但第三方已经是生产环境,对方只能给我们部分视图的查询权限,我们根本看不到任何数据表。基于这样的条件,我们能获取到的仅是通过视图查询后,export出来的sql文件。

1、采用sqlplus插入数据的方法解决pl/sql developer无法大批量执行插入sql语句问题

一开始使用pl/sql developer执行导出的sql文件,选择sql文件后,pl/sql developer要求输入reportid。对于reportid,我的做法是留空,直接点击了“确定”。点击确定后,pl/sql就一直卡住,没有反应了。于是,我们想到的就是文件太大,sql语句过多,因为一开始执行一条sql是没有任何问题的。在强制关闭pl/sql后,我们打开sql文件,复制其中50条sql去执行,果然顺利通过了,后面尝试100条一次,200条一次,300条一次,400条一次,400的时候已经很耗时了,到500的时候又出现卡死不动的情况。如果采用每400条执行一次,我们也可以完成数据备份的目的。但是我们有十种数据,基础数据都有好几万条的,业务数据几百万的量,即使抽取部分也是过万的数据量,十种下来至少要导入十多万数据,如果按每次400条,那不仅耗时,一直复制粘贴也累人,稍有不慎又要从头再导。后来经过研究,我们决定放弃这种复制粘贴的方案,采用sqlplus插入数据的方法。

2、处理sqlplus插入数据中文乱码问题

使用sqlplus执行sql文件,一开始执行了一个14000多条数据的文件,大概一分钟就执行完了,效率果真不是盖的。正着急想去数据库查看成果,没想到被泼了一盘冷水,所有中文类型的字段值都变成了问号和其他字符的组合,也就是乱码了。看到这,首先就truncate table了,然后着手处理中文乱码问题。中间的探索过程就不放上来了,直接上本次处理的操作步骤,以供参考:

1)查看数据库服务器的字符编码:

前提,已经连接上数据库服务器,使用可视化工具连接或者命令行连接均可。

执行查询sql语句:select userenv('language') from dual;

我的返回结果:AMERICAN_AMERICA.UTF8

2)转换sql文件字符编码

使用notepad++,文件过大则使用ultraedit打开sql文件,如果文件字符编码与数据库服务器不一致,则将文件字符编码转换成与数据库服务器一致的编码,我这里是UTF8。转换好后将文件放在oracle用户可访问的路径下即可。最好在文件末尾加上 commit命令,这样在执行完sql后,事务会自动提交,防止人为忘记。

3)设置数据库连接会话字符编码:

前提,使用shell登录linux系统,并切换到oracle用户。

执行命令:export NLS_LANG=AMERICAN_AMERICA.UTF8

可使用echo $NLS_LANG查看结果,如果出现AMERICAN_AMERICA.UTF8,表示设置成功

4)登录数据库服务器

特别说明,使用该export命令,仅对本次回话有效,因此本次连接操作需要在执行export命令后进行。

首先执行sqlplus /nolog;

然后输入:conn username/password

提示连接成功后

输入:start dirToFile/filename

3、小结

使用sqlplus可以解决pl/sql developer执行不了大批量插入sql语句问题。对于sqlplus执行插入sql中文乱码问题,这里仅是提供了其中一种处理方式,仅供参考。

你可能感兴趣的:(oracle)