Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101961201
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-12 09:54:18

   来源:IBM developerWorks 中国网站    

动机

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()

这个过程将删除模式中定义的所有对象,并最终删除这个模式本身。

参数

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

如果另一个模式中的对象依赖于要删除的模式,那么应用删除对象的常规规则。因此,在大多数情况下,依赖对象也会被删除或失效。但是,一些对象(比如 SQL 函数)实施 RESTRICT 语义。如果遇到这种情况,那么这个过程将失败。

DROPSCHEMA 过程在事务控制下执行,它自己不执行提交或回退。所以,要想让模式的删除持久化,必须提交删除操作。同样,如果发生错误,那么过程的调用者需要决定是否将过程回退。

BACKUPSCHEMA(,)

这个过程将模式中的所有对象逻辑备份到文件系统中。支持的对象是:

表,包括统计数据。不支持范围簇表(RCT)、物化查询表(MQT)和有类型的表。

视图,但是不包括有类型的视图。

函数,包括源、SQL 和外部函数。注意,对外部函数的可执行代码不进行备份。函数的统计数据也不备份。

阅读(382) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~