基于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. hdata datax交流总结

    http://blog.csdn.net/zlm838687/article/details/74781522 hdata datax交流总结 今天和阿里云的同学就数据同步做了简要的交流,下面就交流的 ...

  2. PS如何使用制作图片投影效果

    如果仅仅是同样大小的背景(灰色或者黑色),则只要新建一个和比原图大三个像素的文件(比如这里原图片为100×100,我就建立一个103×103的文件)把图片放在左上角,剩下的部分填充灰色或者黑色.然而这 ...

  3. Android无数据线调试方法

    平时在Android设备上调试程序.通常是将Android设备用数据线和PC机相连. 可是,在没有数据线的情况下也能够: 1.将PC机和Android设备连到同一网段. 2.获取Android设备的I ...

  4. react-navigation + react-native-vector-icons

    1.安装 yarn add react-navigation react-native-vector-icons 2.创建 root.js import React, {Component} from ...

  5. 【BIEE】08_修改浏览器标题栏显示内容

    打开分析,我们可以看到标题栏中显示的BIEE默认的,现在想要把这个修改为自定义的 打开文件路径: D:\obiee\Oracle_BI1\bifoundation\web\msgdb\l_zh-CN\ ...

  6. JavaScript Array pop(),shift()函数

    pop() 删除数组的最后一个元素并返回删除的元素 shift() 删除并返回数组的第一个元素

  7. Java除法结果带小数、进一法的实现 Java问题通用解决代码

    http://blog.csdn.net/windone0109/article/details/5355379进一法: 即省略的位上只要大于零都要进一位 :  四舍五入法: 即省略的位上小于五都要舍 ...

  8. android应用中插入admob广告

    Step One  登陆admob,注册用户 直接登陆http://www.admob.com/,用google的账号登陆 Step Two 登陆admob后,在站点和应用程序选项中 选择并添加and ...

  9. Windows键

    Windows键+D: 最小化或恢复windows窗口   Windows键+U: 打开“辅助工具管理器”    Windows键+CTRL+M 重新将恢复上一项操作前窗口的大小和位置 Windows ...

  10. Atitit.Java exe bat  作为windows系统服务程序运行

    Atitit.Java exe bat  作为windows系统服务程序运行 1. 使用SC命令+srvany.exe (不错,推荐)+net start1 1.1. First 创建一个java的运 ...