Oracle使用超大SQL脚本文件恢复数据问题记录
Posted 逍客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle使用超大SQL脚本文件恢复数据问题记录相关的知识,希望对你有一定的参考价值。
在以前获取的Oracle数据库备份一般都是dmp文件,创建表空间和用户就直接使用imp或者impdp导入即可。
这一次遇到的情况比较特殊,对方提供数据时给我的是使用SQLPlus导出的SQL脚本文件,是Linux系统中导出的,因为很难让对方再次提供数据,因此只有用这个来导入数据。导入速度慢不说,还挺麻烦,不过没办法,问题总得解决。
在这个过程中遇到两大问题:
1. SQL脚本文件太大(超过1G),Windows上看不了内容,不知道怎么导入到数据库中。
一般SQLPlus执行SQL脚本文件倒是容易,登录到SQLPlus,然后在界面中输入"@SQL文件名",回车就可以执行。
但是这一次是进行数据恢复,对方导出的SQLPlus中应该是有表空间和用户信息的,如果预先创建对应的表空间和用户等信息,在SQLPLus中执行SQL脚本恢复数据就会遇到错误。
2. SQL脚本的文件编码问题导致使用sqlplus执行时报错。
错误提示为“ORA-01756:引号内的字符串没有正确结束”,在网上查了,是sql脚本的字符编码和Oracle的字符编码不一样导致的。
我的Oracle是安装在windows系统,用的是GBK编码,但SQL脚本文件的字符集是UTF-8,需要将SQL脚本文件转换成GBK字符编码才行。
小的SQL脚本使用Notepad++或notepad2文本编辑器打开,改下编码保存即可。大的SQL脚本可以用UltraEdit应该可以转换字符编码。不过UltraEdit收费,我没买。所以在网上找了方案,可以用powershell来转换字符编码。1.6G的SQL脚本文件,花了一个来小时才转换完成。
下面是解决此问题的步骤:
1. 首先查看下SQL脚本的内容,获取下关键的表空间和用户等信息:
在Windows中可以使用在命令行提示符中输入“type SQL文件名”来查看脚本内容,输出create table和create index脚本段后就可以使用Ctrl+C组合键退出读取进程。
在输出内容中找到表空间信息,以及授权语句中的用户名等。
2. 根据步骤1中获取到的表空间和用户信息,创建对应的表空间和用户。
3. 使用PowerShell将SQL脚本文件转换为当前系统默认的字符编码:
Windows 7 系统中可以在开始菜单中的“搜索程序和文件”输入框中输入powershell,找到PowerShell的命令行界面。
使用cd命令切换到脚本文件所在目录:“cd 路径”
然后执行下面的来转换字符编码:
Get-Content -path .\aa.sql|Out-File .\aa-output.sql -Encoding "default"
转换过程可以按F5刷新看下输出文件的大小变化(powershell中没提示转换进度),过一段时间不再变化就应该是完成了,在powershell的窗口中按回车键,如果powershell界面光标闪烁,可以输入新的命令了,就能确认转换过程完成了。
4. 使用sqlplus登录Oracle,然后在输入”@SQL脚本文件名“命令执行,等待执行完成即可。
注:sqlplus中使用SQL脚本导入上百万数据真慢,没注意看了,转个字符编码花了一个小时,导入数据花了一两个小时。
以上是关于Oracle使用超大SQL脚本文件恢复数据问题记录的主要内容,如果未能解决你的问题,请参考以下文章
Oracle数据库RMAN备份恢复脚本分享,附SQL实时查看进度