基于PLSQL的数据库备份方法及如何解决导出clob和blob类型数据报错的问题
基于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类型数据报错的问题的更多相关文章
- 最简便的MySql数据库备份方法
http://www.kankanews.com/ICkengine/archives/194.shtml 使用MYSQL进行数据库备份,又很正规的数据库备份方法,同其他的数据库服务器有相同的概念,但 ...
- SQL Server数据库备份方法
数据库备份,是在数据丢失的情况下,能及时恢复重要数据,防止数据丢失的一种重要手段.一个合理的数据库备份方案,应该能够在数据丢失时,有效地恢复重要数据,同时需要考虑技术实现难度和有效地利用资源. 数据库 ...
- linux系统下mySQL数据库 备份方法和脚本
数据库备份1.创建个备份存储目录mkdir /root/backup/2.以下内容写到dbbackup.sh #!/bin/bash cd /data/db_backup/mysqldump -uad ...
- MS-SQL数据库备份方法
一.手动备份 打开企业管理器 --> 右键点击需要备份的数据库 --> 所有任务 --> 备份数据库 或者: 查询分析器: use master backup database 数 ...
- sqlserver数据库备份方法
须事先准备一个工具curl,把它放在c盘.然后,在数据库所在服务器安装7z.最后把这2个存储过程执行,在sqlserver的代理中新建作业,即可实现备份操作. --备份指定数据库到本地和远程指定位置( ...
- 数据库:ubantu下MySQL数据库备份方法
1.编辑/etc/crontab文件设定定时任务,在制定时间执行backup_databases.sh vi /etc/crontab # /etc/crontab: system-wide cron ...
- 使用mybatis操作mysql数据库SUM方法返回NULL解决
使用SQL语句用函数SUM叠加的时候,默认查询没有值的情况下返回的是NULL,而实际可能我们要用的是返回0 解决: SELECT SUM(total) FROM test_table 改成: SE ...
- Mysql数据库每天定时执行备份方法
此数据库备份方法是简单的数据库备份方法,就是从Mysql的数据文件下,将数据库文件拷贝到指定的文件夹目录下 1.创建txt文件,添加脚本 net stop mysql xcopy D:\MySql\D ...
- mysql 数据库备份和恢复
物理备份对比逻辑备份 物理备份是指直接复制包含数据的文件夹和文件.这种类型的备份适用于大数据量且非常重要,遇到问题需要快速回复的数据库. 逻辑备份保存能够代表数据库信息的逻辑结构(CREATE DAT ...
随机推荐
- 关于计算机中的《补码》,公式:-n=~n+1 引伸:~n=-n-1
在计算机系统中,数值一律用补码来表示(存储).主要原因是使用补码可以将符号位和其他位统一处理:同时,减法也可以按加法来处理.另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃.补 ...
- log4j输出日志到flume
现需要通过log4j将日志输出到flume,通过flume将日志写到文件或hdfs中 配置flume-config文件 将日志下沉至文件 a1.sources = r1 a1.sinks = k1 a ...
- kibana显示elasticsearch集群中flume到入的日志
日志通过flume导入elasticsearch集群见这里:flume 日志导入elasticsearch kibana介绍 kibana主页 kibana是一个功能强大的elasticsearch数 ...
- 数据结构与算法——优先队列类的C++实现(二叉堆)
优先队列简单介绍: 操作系统表明上看着是支持多个应用程序同一时候执行.其实是每一个时刻仅仅能有一个进程执行,操作系统会调度不同的进程去执行. 每一个进程都仅仅能执行一个固定的时间,当超过了该时间.操作 ...
- Neon Intrinsics各函数介绍
#ifndef __ARM_NEON__ #error You must enable NEON instructions (e.g. -mfloat-abi=softfp -mfpu=neon) t ...
- Chrome 完整版官方下载
Chrome下载默认不是完整版本,需要长久等等.so... 在下载地址后加参数:?standalone=1 解决问题.
- unsigned int与int相加问题
作者 : 卿笃军 一道unsigned int与int类型的相加题目.引发了我对这个问题的思考. 首先要明确两个问题: 问题一. unsigned int 和 int究竟哪个能表达出来的数上限大呢? ...
- lvs+keepalived+bind实现负载均衡高可用智能dns
整体架构: 1.IP地址规划: Dns1:172.28.0.54 Dns2:172.28.0.55 Dr服务器主:172.28.0.57 Dr服务器从:172.28.0.67 Vip:172.28.0 ...
- Dictionary及KeyValuePair使用
/// <summary> /// 除去数组中的空值和签名参数并以字母a到z的顺序排序 /// </summary> /// <param name="dicA ...
- POI 实现合并单元格以及列自适应宽度
POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...