基于PLSQL的数据库备份

zxxcjb123

贡献于2013-01-06

字数:2621 关键词: Oracle 数据库服务器 SQL

资料编码 产品名称 使用对象 华为工程师 产品版本 编写部门 资料版本 V1.0 基于PLSQL的数据库备份 拟 制: 周啟锋 日 期: 2009-07-23 审 核: 日 期: 审 核: 日 期: 批 准: 日 期: 华 为 技 术 有 限 公 司 版权所有 侵权必究 基于PLSQL的数据库备份方法 内部公开 修订记录 日期 修订版本 描述 作者 华为机密,未经许可不得扩散 基于PLSQL的数据库备份方法 内部公开 华为机密,未经许可不得扩散 基于PLSQL的数据库备份方法 内部公开 目 录 第1章 导入数据的苦恼 1 第2章 PL/SQL Developer导入导出工具 1 2.1 导出功能介绍 2 2.2 导入功能介绍 3 2.3 如何解决导出clob和blob类型数据报错的问题 4 华为机密,未经许可不得扩散 基于PLSQL的数据库备份方法 内部公开 关键词: PLSQL 数据备份 CLOB BLOB 摘 要: 我们一直在寻求一个好的工具,这个工具可以将业务数据库的表数据进行导出,并且支持灵活的数据导入要求,以便进行测试数据库搭建和紧急故障恢复。 本文就plsqldev工具提供的“PL/SQL Developer”导出表的工具做一个比较详细的介绍。并且专门针对“PL/SQL Developer”无法导出的CLOB和BLOB数据类型的操作方法做了细致的描述。 缩略语清单: 参考资料清单: 华为机密,未经许可不得扩散 基于PLSQL的数据库备份方法 内部公开 第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…”下,可以进行数据的导出和导入。 2009-09-29 华为机密,未经许可不得扩散 第页, 共5页 基于PLSQL的数据库备份方法 内部公开 2.1 导出功能介绍 Where clause: 使导出操作支持where条件,比如你只需要导出每张表的10000条记录,可以在输入框里输入“rownum < 10001”。 Compress file: 选中后支持导出文件的压缩,节省存储空间,但是压缩会占用多余的时间。 Include storage: 导出的文件中包含建表信息,如果需要在导入的时候能支持建表操作,需要选中该项。 2009-09-29 华为机密,未经许可不得扩散 第页, 共5页 基于PLSQL的数据库备份方法 内部公开 2.2 导入功能介绍 Drop tables: 支持在导入数据前先删除表,选择该项后,默认选择“Create tables”选项,并且“Truncate tables”和“Delete table”操作变成灰色不可用状态。 Create tables: 支持在导入数据前先创建表,比如我们已将建好了用户,这个时候需要导入表而之前又没有执行建表脚本的时候,可以选中此项。 Truncate tables: 支持在导入数据前先清空表数据,想恢复表数据到建测试环境的时候可以使用这个选项,该选项和“Delete tables”互斥。 Delete tables: 支持在导入数据前删除表数据,这个选项目前还没有发现比较特殊的使用意义,该选项和“Truncate tables”互斥。该选项的导入速度大大慢于“Truncate tables”,一般使用“Truncate tables”。 2009-09-29 华为机密,未经许可不得扩散 第页, 共5页 基于PLSQL的数据库备份方法 内部公开 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" 2009-09-29 华为机密,未经许可不得扩散 第页, 共5页 基于PLSQL的数据库备份方法 内部公开 3、 在导出表功能的表选择框里单击右键选择“Load Object selection”,选择上一步制作的文件,完成表的选择。 4、 选择合适的参数,进行导出操作。 5、 用oracle export方式导出包含clob和blob的数据。 2009-09-29 华为机密,未经许可不得扩散 第页, 共5页

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ]
3 人已下载

下载文档

相关文档