在以前获取的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脚本文件恢复数据问题记录的更多相关文章

  1. [转]SQL server2008 导入超大SQL脚本文件(超过10M)

    同事给我一个sqlserver的学习库,sql脚本导出有300m,gui执行有内存溢出的错误报出来,所以问了一下度娘,学而时习之:) 1. SQL server2008 导入超大SQL脚本文件(超过1 ...

  2. SQL Server将数据导出到SQL脚本文件

    http://www.studyofnet.com/news/list-8883.2-1-4.html 一.SQL Server 2008将数据导出到SQL脚本文件 1.打开SQL Server200 ...

  3. MySQL执行外部sql脚本文件命令是报错:unknown command

    使用source导入外部sql文件: mysql> source F:\php\bookorama.sql; -------------- source F: -------------- ER ...

  4. 如何执行一个mysql的sql脚本文件

    sql脚本是包含一到多个sql命令的sql语句,我们可以将这些sql脚本放在一个文本文件中(我们称之为“sql脚本文件”),然后通过相关的命令执行这个sql脚本文件.基本步骤如下:一.创建包含sql命 ...

  5. Navicat 导入sql脚本文件

    Navicat 导入sql脚本文件 我在组建自己工作用的数据库时要导入.sql脚本文件,用cmd窗口导入太慢,navicat的导入向导里又无导入sql脚本的选项, 但不是navicat中没有导入sql ...

  6. 解决sql脚本文件太大无法打开的问题

    as we known,sql数据库高版本向低版本还原是不太可能但是又经常会碰到的事,今天实测了一种方法 步骤:任务—>生成脚本—> 下一步->高级,选择数据库版本和编写脚本数据类型 ...

  7. SQL数据库从高版本到低版本的迁移,同时解决sql脚本文件太大无法打开的尴尬问题

    as we known,sql数据库高版本向低版本还原是不太可能但是又经常会碰到的事,今天实测了一种方法 步骤:任务—>生成脚本—> 下一步->高级,选择数据库版本和编写脚本数据类型 ...

  8. shell脚本中执行mysql sql脚本文件并传递参数

    1 shell 文件内容替换 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法. 调用sed命 ...

  9. MySQL执行外部sql脚本文件的命令

    sql脚本是包含一到多个sql命令的sql语句,我们可以将这些sql脚本放在一个文本文件中(我们称之为“sql脚本文件”),然后通过相关的命令执行这个sql脚本文件.基本步骤如下:1.创建包含sql命 ...

随机推荐

  1. node 基础小结

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  2. Mac系统下Eclipse代码联想功能(代码助手,代码提示)快捷键

    Eclipse for mac 代码提示(代码助手,代码联想)快捷键修改一.每次输入都自动提示点击Eclipse,使其成为第一响应者,preferences->Java->Editor-& ...

  3. IONIC 打包安卓apk详细过程

    参照以下链接: https://blog.csdn.net/qq_20264891/article/details/79319408 当 cordova 项目安装的 android 平台版本 与 系统 ...

  4. (转)bash条件判断之if语句

    http://blog.51cto.com/64314491/1629175---------bash条件判断之if语句(一) http://blog.51cto.com/64314491/16292 ...

  5. CentOS7 wget 安装Redis,开机启动配置

      安装 GCC yum install gcc yum install tcl 安装wget yum install wget 1. 下载Redis wget http://download.red ...

  6. 深入理解JavaScript系列(50):Function模式(下篇)

    介绍 本篇我们介绍的一些模式称为初始化模式和性能模式,主要是用在初始化以及提高性能方面,一些模式之前已经提到过,这里只是做一下总结. 立即执行的函数 在本系列第4篇的<立即调用的函数表达式> ...

  7. Exists/In/Any/All/Contains操作符

    Exists/In/Any/All/Contains操作符 适用场景:用于判断集合中元素,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就 ...

  8. Linux必会必知

    一.前言 Linux作为一个开源系统,被极客极力推崇,作为程序员不来了解一下,那就亏了 Linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次 ...

  9. ajax上传数据

    ---恢复内容开始--- ajax上传数据,(简洁版) 1.上传普通同表单标签内容. 1.获取表单的内容 1. var file=$('#file').val();(放在点击事件后面) 2. var ...

  10. IOC和DI到底是什么?

     在学习Spring框架的时候,我们总是能见到IOC这个单词,也时常听到DI这个词,那么他们分别是什么意思呢?接下来就讲讲个人对于这两个概念的理解  一.IOC和DI概念 IOC(控制反转):全称为: ...