基于PL/SQL的数据库备份方法

PL/SQL Developer是Oracle 数据库中用于导入或导出数据库的主要工具,本文主要介绍了利用PL/SQL Developer导入和导出数据库的过程,并对导入或导出时的一些注意事项进行了说明,接下来我们就一一介绍。

导出步骤:

1、tools ->export user object 选择选项,导出.sql 文件。

2、tools ->export tables-> Oracle Export 选择选项导出.dmp 文件。

导入步骤:

注:导入之前最好把以前的表删除,当然导入另外数据库除外。

1、tools->import tables->SQL Inserts 导入.sql 文件。

2、tools->import talbes->Oracle Import然后再导入dmp 文件。

一些说明:

Tools->Export User Objects导出的是建表语句(包括存储结构)。PS :这种方式只能导出属于这个用户的表,其他用户的表不能导出,建议用命令行(exp,imp)导出。

Tools->Export Tables里面包含三种导出方式,三种方式都能导出表结构以及数据,如下:

• Oracle Export

• Sql Insert

• pl/sql developer

第一种是导出为.dmp 的文件格式,.dmp 文件是二进制的,可以跨平台,还能包含权限,效率也很不错,用得最广 。

第二种是导出为.sql 文件的,可用文本编辑器查看,通用性比较好,但效率不如第一种,适合小数据量导入导出。尤其注意的是表中不能有大字段 (blob,clob,long ),如果有,会提示不能导出(提示如下: table contains one or more LONG columns cannot export in sql format,user Pl/sql developer format instead)。

第三种是导出为.pde 格式的,.pde 为Pl/sql developer 自有的文件格式,只能用Pl/sql developer 自己导入导出,不能用编辑器查看。

PS :只有"Oracle Export" 方式导出再导入后,表结构和索引结构没有发生变化,另两种方式都改变了索引类型。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

第1章 导入数据的苦恼

最近,一直再为搭建测试数据库的事情烦恼,主要碰到如下困难:

1、使用oracle dump 方式导出的数据在导入的时候不能随意选择一张表的数据进行导入;一般业务的表的数量都有1000左右,在出现由于某张表数据异常导致的故障时,用dump 文件进行恢复基本不可行或者很费事;

2、表存在外键约束和触发器,使用oracle dump import 方式导入表的时候不能非常简单的禁止触发器和外键,导致大量错误产生,导入的表的数据不全,部分表数据没有导入;

3、当修改了某些表的数据后需要将这些表的数据恢复到测试环境搭建时的数据,import 不能将这些表的数据清空后重新导入。

4、当修改了某些表的字段后需要将这些表的数据恢复到测试环境搭建时的数据,import 不能将这些表重建后重新导入。

预览:

那么有没有一个工具能够解决上面我们这位工程师的苦恼呢?

第2章 PL/SQL Developer导入导出工具

PL/SQL Developer位于PLSQL DEV工具的“Tools ”菜单下的“Export tables„”和“Import tables „”下,可以进行数据的导出和导入。

2.1 导出功能介绍

Where clause: 使导出操作支持where 条件,比如你只需要导出每张表的10000条记录,可以在输入框里输入“rownum < 10001”。

Compress file: 选中后支持导出文件的压缩,节省存储空间,但是压缩会占用多余的时间。

Include storage: 导出的文件中包含建表信息,如果需要在导入的时候能支持建表操作,需要选中该项。

2.2 导入功能介绍

预览:

Drop tables:支持在导入数据前先删除表,选择该项后,默认选择“Create tables”选项,并且“Truncate tables”和“Delete table”操作变成灰色不可用状态。

预览:

Create tables :支持在导入数据前先创建表,比如我们已将建好了用户,这个时候需要导入表而之前又没有执行建表脚本的时候,可以选中此项。

Truncate tables :支持在导入数据前先清空表数据,想恢复表数据到建测试环境的时候可以使用这个选项,该选项和“Delete tables”互斥。

Delete tables :支持在导入数据前删除表数据,这个选项目前还没有发现比较特殊的使用意义,该选项和“Truncate tables”互斥。该选项的导入速度大大慢于“Truncate tables”,一般使用“Truncate tables”。

2.3 如何解决导出clob 和blob 类型数据报错的问题

当表字段中含有clob 和blob 类型数据时,使用PL/SQL Developer导出会报stream read error 的错误,导出操作终止,说明PL/SQL Developer方式导出不支持这种类型,oracle export方式可以支持这种类型。 由于需要导出的表很多,PL/SQL在导出前都要对需要导出的表进行分析,通常都会花费十几分钟的时间,然而由于某张表存在clob 和blob 类型数据时就会异常终止,那之前的操作时间就会浪费,为了导出所有表需要将导出的表进行标记,只导出没有clob 和blob 类型数据的表。我们通常的做法是在导出表的时候用ctrl 或者shift 按键进行手工选择,通过导出的日志记录不能导出的表,然后手工将这些表反选出待导出的表。但是这样操作费时费力,需要通过不停反复的操作,才能知道哪些表不能导出。 下面介绍一下如何使用oracle 系统视图all_tab_columns和PL/SQL在导出表的时候提供的Object selection功能快速导出不包含clob 和blob 的表数据。

1、使用下面的sql 语句拼出Object selection的文件内容。

--不包含clob 和blob 的表 select distinct('TABLE "'||a.OWNER ||'"."'||a.TABLE_NAME||'"') from sys.all_tab_columns a where a.OWNER = 'ICDPUB' and a.TABLE_NAME not in (select t.TABLE_NAME from sys.all_tab_columns t where t.OWNER = 'ICDPUB' and t.DATA_TYPE in ('CLOB','BLOB'))

注意:上面的sql 语句里的ICDPUB 是用户名

2、按照上面的语句的执行结果生成Object selection的文件(后缀是.osf ),文件的内容如下:

PL/SQL Developer Object Selection File 1

TABLE "ICDPUB"."ACTIVE_ALARMS"

TABLE "ICDPUB"."ALLAPPOINT"

TABLE "ICDPUB"."ALLOPTIONVIEW"

TABLE "ICDPUB"."ALLOTCONFIG"

TABLE "ICDPUB"."ALLPAPERAUTHVIEW"

TABLE "ICDPUB"."ALLPAPERVIEW"

TABLE "ICDPUB"."ALLQUESTIONVIEW"

3、在导出表功能的表选择框里单击右键选择“Load Object selection”,选择上一步制作的文件, 完成表的选择。

4、选择合适的参数,进行导出操作。

5、用oracle export方式导出包含clob 和blob 的数据。

基于PLSQL的数据库备份方法及如何解决导出clob和blob类型数据报错的问题的更多相关文章

  1. 最简便的MySql数据库备份方法

    http://www.kankanews.com/ICkengine/archives/194.shtml 使用MYSQL进行数据库备份,又很正规的数据库备份方法,同其他的数据库服务器有相同的概念,但 ...

  2. SQL Server数据库备份方法

    数据库备份,是在数据丢失的情况下,能及时恢复重要数据,防止数据丢失的一种重要手段.一个合理的数据库备份方案,应该能够在数据丢失时,有效地恢复重要数据,同时需要考虑技术实现难度和有效地利用资源. 数据库 ...

  3. linux系统下mySQL数据库 备份方法和脚本

    数据库备份1.创建个备份存储目录mkdir /root/backup/2.以下内容写到dbbackup.sh #!/bin/bash cd /data/db_backup/mysqldump -uad ...

  4. MS-SQL数据库备份方法

    一.手动备份 打开企业管理器 --> 右键点击需要备份的数据库 --> 所有任务 --> 备份数据库 或者: 查询分析器: use master  backup database 数 ...

  5. sqlserver数据库备份方法

    须事先准备一个工具curl,把它放在c盘.然后,在数据库所在服务器安装7z.最后把这2个存储过程执行,在sqlserver的代理中新建作业,即可实现备份操作. --备份指定数据库到本地和远程指定位置( ...

  6. 数据库:ubantu下MySQL数据库备份方法

    1.编辑/etc/crontab文件设定定时任务,在制定时间执行backup_databases.sh vi /etc/crontab # /etc/crontab: system-wide cron ...

  7. 使用mybatis操作mysql数据库SUM方法返回NULL解决

    使用SQL语句用函数SUM叠加的时候,默认查询没有值的情况下返回的是NULL,而实际可能我们要用的是返回0 解决: SELECT SUM(total)   FROM test_table 改成: SE ...

  8. Mysql数据库每天定时执行备份方法

    此数据库备份方法是简单的数据库备份方法,就是从Mysql的数据文件下,将数据库文件拷贝到指定的文件夹目录下 1.创建txt文件,添加脚本 net stop mysql xcopy D:\MySql\D ...

  9. mysql 数据库备份和恢复

    物理备份对比逻辑备份 物理备份是指直接复制包含数据的文件夹和文件.这种类型的备份适用于大数据量且非常重要,遇到问题需要快速回复的数据库. 逻辑备份保存能够代表数据库信息的逻辑结构(CREATE DAT ...

随机推荐

  1. Redis源代码分析(十三)--- redis-benchmark性能測试

    今天讲的这个是用来给redis数据库做性能測试的,说到性能測试,感觉这必定是高大上的操作了.redis性能測试.測的究竟是哪方面的性能,怎样測试,通过什么指标反映此次測试的性能好坏呢.以下我通过源代码 ...

  2. 甲骨文Java Archive

    甲骨文Java Archive 甲骨文Java Archive提供自助下载访问我们的一些历史的Java版本. 警告: 这些旧版本的JRE和JDK来帮助开发人员提供了在旧系统调试问题. 他们没有更新最新 ...

  3. Win7如何开启Messenger服务

    1 如图所示,在WIN7系统中没有找到Messenger这个服务.因为Messenger在Windows 7/Server 2008 R2里都去掉了   2 而在XP系统中,开启了Messenger服 ...

  4. Unity3D的三种坐标系

    来自:http://blog.csdn.net/luxiaoyu_sdc/article/details/13168497 1, World Space(世界坐标): 我们在场景中添加物体(如:Cub ...

  5. Oracle基础 程序包

    一.程序包 程序包是一种数据库对象,它是对相关PLSQL类型.子程序.游标.异常.变量和常量的封装.程序包包含两部分内容: 1.程序包规范:可以声明类型.变量.常量.异常.游标和子程序. 2.程序包主 ...

  6. Gradle学习小结

    build.gradle(依赖配置) // 普通java工程 apply plugin: 'java' // Idea工程 apply plugin: 'idea' // war工程,需要有webap ...

  7. 给UITextField设置头或尾空白

    有时候,我们需要在UITextField的头尾加入一些空白,如下图所示: 其中,黄色和红色部分代表空白. 实现起来,比较简单,只需要设置UITextField的leftView.leftViewMod ...

  8. Android中常用布局单位

    Android在UI布局时经常用到一些单位,对单位混用直接会影响UI的显示,要想正确的在布局中使用每种单位就必须先真正的熟悉它. UI显示效果的影响因素:屏幕尺寸.屏幕密度.分辨率:而android手 ...

  9. 搭建nginx服务器和直播流媒体服务器

    1.nginx简单说明 ①  Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少,并发能力强. ...

  10. HDU 4883 TIANKENG’s restaurant Bestcoder 2-1(模拟)

    TIANKENG's restaurant Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/O ...