动机
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() 在 sqllibadm.fenced 的所有者指定的 fenced 用户 id 和组 之下执行。因此,导出的文件具有与 sqllibadm.fenced 相同的所有者和组。因此一定要确保这个用户和组对指定的目录有写特权,而且用来访问文件的用户 id 也有访问权。简单的解决方案是将 sqllibadm.fenced 的所有者改为实例所有者。更安全的解决方案是让这两个 ID 成为同一个组的成员,然后只将 sqllibadm.fenced 的组所属权改为这个组。这样就能够通过组成员关系访问产生的文件。
规范
DROPSCHEMA()
这个过程将删除模式中定义的所有对象,并最终删除这个模式本身。
参数
要删除的模式的名称。SQL 标识符是大小写敏感的。要删除模式 "MYSCHEMA",模式名必须是大写的:'MYSCHEMA'。
如果另一个模式中的对象依赖于要删除的模式,那么应用删除对象的常规规则。因此,在大多数情况下,依赖对象也会被删除或失效。但是,一些对象(比如 SQL 函数)实施 RESTRICT 语义。如果遇到这种情况,那么这个过程将失败。
更多内容请看PCdog.com--DB2存储和备份 DB2恢复和迁移 MySQL数据备份专题
