设为首页 加入收藏

TOP

备份和恢复DB2 模式(一)
2011-04-22 09:25:20 来源: 作者: 【 】 浏览:38040次 评论:0

动机
SQL 语言提供了模式的概念,用来对所有类型的 SQL 对象进行分组。可以将 SQL 语言中的模式 理解成文件系统中的目录。DB2 UDB for Linux, UNIX, and Windows 很好地支持 SQL 模式概念,可以将 USER 与 CURRENT SCHEMA 隔离开,并为例程解析提供了 PATH。
使用模式很容易,但是它们的管理就不同了。模式的重命名、模式级备份和恢复以及模式的复制等任务比较困难,因为必须手工进行脚本编程,而且对象及其依赖性可能很复杂。
本文提供一个具有简单接口的过程库,使用户能够将给定模式中的所有对象备份到文件系统中、在另一个模式下恢复备份以及删除给定模式中的所有对象。
安装
下载并解压缩本文包含的 backupschema.zip 文件之后,会得到以下文件:

backupschema.sql 这个文件包含一些 DDL 语句,这些语句安装过程以及各个 helper 例程和表。在默认情况下,所有对象使用的模式是 "ADMIN"。如果要改变这个模式,只需修改这个文件开头的 SET SCHEMA 和 SET PATH 语句,将 "ADMIN" 替换为您选择的模式名。
为了执行这个脚本,作为 DB2 管理员连接到数据库,然后执行 db2 -tvf backupschema.sql。

这些过程使用 SYSPROC.ADMIN_CMD() 存储过程进行导出并使用 SYSPROC.DB2LOAD() 存储过程进行装载。(SYSPROC.ADMIN_CMD() 是在 DB2 V8.2.2(FP 9)中引入的。因此,需要的最低版本是 V8.2.2。)SYSPROC.ADMIN_CMD() 在 sqllib\adm\.fenced 的所有者指定的 fenced 用户 id 和组 之下执行。因此,导出的文件具有与 sqllib\adm\.fenced 相同的所有者和组。因此一定要确保这个用户和组对指定的目录有写特权,而且用来访问文件的用户 id 也有访问权。简单的解决方案是将 sqllib\adm\.fenced 的所有者改为实例所有者。更安全的解决方案是让这两个 ID 成为同一个组的成员,然后只将 sqllib\adm\.fenced 的组所属权改为这个组。这样就能够通过组成员关系访问产生的文件。
规范
DROPSCHEMA(<SCHEMA>)
这个过程将删除模式中定义的所有对象,并最终删除这个模式本身。
参数

<SCHEMA> 要删除的模式的名称。SQL 标识符是大小写敏感的。要删除模式 "MYSCHEMA",模式名必须是大写的:'MYSCHEMA'。

如果另一个模式中的对象依赖于要删除的模式,那么应用删除对象的常规规则。因此,在大多数情况下,依赖对象也会被删除或失效。但是,一些对象(比如 SQL 函数)实施 RESTRICT 语义。如果遇到这种情况,那么这个过程将失败。
DROPSCHEMA 过程在事务控制下执行,它自己不执行提交或回退。所以,要想让模式的删除持久化,必须提交删除操作。同样,如果发生错误,那么过程的调用者需要决定是否将过程回退。
BACKUPSCHEMA(<SCHEMA>,<DIRECTORY>)
这个过程将模式中的所有对象逻辑备份到文件系统中。支持的对象是:

表,包括统计数据。不支持范围簇表(RCT)、物化查询表(MQT)和有类型的表。
视图,但是不包括有类型的视图。
函数,包括源、SQL 和外部函数。注意,对外部函数的可执行代码不进行备份。函数的统计数据也不备份。
SQL 过程和外部过程。注意,对外部过程的可执行代码不进行备份。
不同的数据类型。注意,不支持结构化数据类型。
索引,但是不包括索引扩展。
所有约束。
序列,包括它们的高水位标志。
支持的所有对象上的注释。
支持的所有对象上的特权。
这个备份过程可以包括 PATH、SCHEMA 和 PREP 选项。
不支持联邦对象(比如 NICKNAME)以及数据库分区特性(DPF)。
参数

<SCHEMA> 要备份的模式的大小写敏感名。

<DIRECTORY> 对象要备份到的文件系统目录。这个目录必须存在,在 UNIX 或 Linux 上以斜线结尾,在 Windows 上以反斜线结尾;例如 'D:\TEMP\MYSCHEMA\'。如果这个目录是 NULL 或空字符串,那么不导出文件。这个过程只用 DDL 语句填充 DDLLOG 表。COPYSCHEMA 过程要使用这个方式。

在成功地备份之后,这个目录包含以下对象的 IXF 文件:

备份的模式中的表。
SYSSTAT 视图,包含表、列和索引统计数据。
DDL 日志,包含重建所有对象所需的信息。
用户可以在这个目录中添加其他文件,比如外部例程的可执行代码。完成之后,可以根据需要用 zip 和 tar 对这个目录进行压缩、打包或传输。
RESTORESCHEMA(<SCHEMA>,<TABLESPACEINFO>,<LOADDIRECTORY>,<MESSAGEDIRECTORY>)
这个过程恢复以前用 BACKUPSCHEMA 备份的模式。使用当前用户的 ID 创建所有对象。如果恢复的任何对象引用另一个模式中的对象,而被引用的对象在目标数据库中不存在,那么这个过程将失败。这个过程执行内部提交。
如果恢复到与 BACKUPSCHEMA 不同的模式中,那么所有包含 SQL 体(比如视图、SQL 例程和检查约束)的 SQL 对象在它们的定义中必须没有显式地引用源模式。例如,CHECK (MYSCHEMA.MYTABLE.C1 > 0) 无法成功地恢复到 "MYSCHEMA" 之外的模式中,而 CHECK (MYTABLE.C1 > 0) 可以。为了能够在 RESTORESCHEMA 中指定其他模式,建议在定义 SQL 对象时利用特殊寄存器 CURRENT PATH 和 CURRENT SCHEMA,而不是显式地指定局部模式。
参数

<SCHEMA> 要将对象恢复到的模式的大小写敏感名。如果这个模式已经存在,那么先删除它。如果模式是 NULL 或空字符串,那么这个过程采用备份时的模式名进行恢复。COPYSCHEMA 过程采用这种方式。

<TABLESPACEINFO> 包含要添加到每个表定义中的表空间信息的字符串。这个子句可能包含 IN <tablespace>、LONG IN <lobtablespace> 和 INDEX IN <indextablespace> 子句。如果应该使用默认值,那么这个参数可以是空字符串或 NULL。
例如:'IN DATA8K INDEX IN INDEX4K'

<LOADDIRECTORY> 文件系统中存放 BACKUPSCHEMA 生成的文件的目录。这个目录在 UNIX 或 Linux 上必须以斜线结尾,在 Windows 上必须以反斜线结尾;例如 'D:\TEMP\MYSCHEMA

Tags:备份 恢复 模式 责任编辑:admin
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Oracle&Sybase UDF移植至DB2 下一篇没有了

最新文章

热门文章

推荐文章

相关文章