Windows上DB2 UDB脚本编制简介(1)

发表于:2007-07-13来源:作者:点击数: 标签:
除了提供对结构化查询语言(Structure Query Language,SQL)的支持外,IBM DB2 Universal Database 还提供一组丰富且广泛的管理应用程序编程接口(API)。因为正确维护 DB2 UDB 系统所需的所有日常任务都依靠 DB2 管理 API,所以这些 API 就为 DB2 UDB 的管

除了提供对结构化查询语言(Structure Query Language,SQL)的支持外,IBM® DB2® Universal Database™ 还提供一组丰富且广泛的管理应用程序编程接口(API)。因为正确维护 DB2 UDB 系统所需的所有日常任务都依靠 DB2 管理 API,所以这些 API 就为 DB2 UDB 的管理提供了一个编程接口。

例如,DB2 控制中心(Control Center)就是一个调用 DB2 管理 API 来执行 DB2 系统、实例和数据库管理任务的基于 Java 的图形用户界面(GUI)工具。DB2 UDB 还提供了象 DB2 CLP 这样的命令行工具来执行类似任务,这些工具也调用 DB2 管理 API。

除了 DB2 UDB 命令行工具,DB2 通用数据库还提供一组丰富的系统实用程序,称为 DB2 系统命令。这些命令通常被用来执行尚未集成到 GUI 工具的任务。通常从操作系统的 shell(如 Windows shell — Wshell),也称为命令提示符,调用 DB2 UDB 系统命令。

您可以在几乎所有的脚本语言(从简单的 Windows shell 脚本到用 JScript、VBScript、Object REXX 或 PerlScript 编写的较复杂脚本)中将 SQL、DB2 命令、DB2 UDB 系统命令和操作系统命令结合起来,以便使简单重复的任务自动化或调度这些任务,从而形成更复杂的任务或您能想到的任何 DB2 管理任务。

一般说来, 脚本(scripting)指的是一种被解释的语言。脚本在文本文件中创建,执行后编译成汇编程序或字节代码。Windows 提供了几种环境,它们可用于执行脚本编制语言。其中,执行系统管理任务最常用的两个环境是 Windows shell(Wshell)和 Windows Scripting Host(WSH)。

本文描述在 Windows 平台上可用于 DB2 UDB 的几种不同的脚本编制接口,首先将概述 DB2 管理 API、DB2 命令行工具和 DB2 系统命令。我将向您介绍用 Windows shell 编制 DB2 UDB 脚本的最佳技术,并提供可从本网站下载的几个有用示例。

DB2 管理 API

作为 DB2 UDB for LinuxUNIX® 和 Windows 的一部分,DB2 管理 API 一直包含在 DB2 UDB 中,有文档记录并得到支持。随着 DB2 UDB 不断提供其它功能,如分割镜像(Split Mirror Images),API 集也随之继续扩展以支持这些特性。用这些 API 编程的样本源代码也和 DB2 UDB 的开发者版本一起提供。

DB2 管理 API 正式支持以下编程语言:

  • C/C++
  • COBOL
  • Fortran
  • REXX

由于象 Java、Perl 和 Visual Basic 这样的编程语言(随便列举几个)不断涌现,所以这份列表可能乍一看显得相当短。但是,大多数编程语言都可以调用用其它语言编写的 API,其中 C API 受到最普遍的支持。除了可以通过 C、COBOL、FORTRAN 和 REXX 直接访问 DB2 管理 API 之外,还可以通过其它方法间接访问这些 API,譬如通过 Java 本机接口(Java Native Interface,JNI)。事实上,现今与 DB2 UDB 一起提供的 DB2 管理工具几乎全都是用 Java 编写的,而 Java 却不在 DB2 管理 API 正式支持的编程语言的简短列表上。DB2 控制中心使用 IBM 开发的 Java 本机接口(JNI)访问这些 API。

对于那些不能直接访问 DB2 管理 API 的编程语言和脚本语言(如 VBScript、Jscript 和 Perl),还有另一种方法。DB2 CLP 作为命令行界面,可通过 DB2 命令(DB2 Command)提供对几乎所有 DB2 管理 API 功能的间接访问。

DB2 UDB 命令行工具

DB2 UDB 命令行工具是 DB2 UDB 的组件,这些工具支持对 DB2 命令以及 SQL 语句的处理。在 Windows 上可使用三种命令行工具:

  • DB2 命令中心(Command Center)
  • DB2 命令行处理器(CLP)
  • DB2 命令窗口

您可以通过单击 Start -> Programs -> IBM DB2 -> Command Line Tools找到这些工具。

DB2 命令中心

第一个命令行工具是 DB2 命令中心(图1),它提供一个处理命令和 SQL 语句的 GUI。您可以用交互方式或脚本(批处理)方式工作,或者将两种方式结合使用。通过单击 Start -> Programs -> IBM DB2 -> Command Line Tools -> Command Center启动 DB2 命令中心。

图 1. DB2 命令中心

DB2 命令中心

图1是 DB2 命令中心的抓屏。在本例中,我们导入了如清单1所示的样本 DB2 备份脚本。您可以通过从 Script菜单选择 Import来导入脚本。

DB2 命令行处理器(CLP)

一般而言,可以把 DB2 命令行处理器(CLP)当作用于调用 DB2 命令的 DB2 提示符 DB2 => ,就象 Windows 命令提示符 C:\ 用于调用操作系统命令一样。也可以从任一 DB2 命令行工具调用 DB2 系统命令(稍后讨论)和操作系统命令,只要在命令前加一个感叹号 ! 即可。

图2显示了 DB2 CLP 以及关于如何获取 DB2 命令帮助的一些基本信息。单击 Start -> Programs -> IBM DB2 -> Command Line Tools -> Command Line Processor,启动 DB2 CLP。

图 2. DB2 命令行处理器

命令行处理器

要了解有关 DB2 UDB V8.1 中 DB2 CLP 新增功能的更多信息,请阅读 Paul C. Zikopoulos 撰写的 DB2 开发者园地文章定制DB2 通用数据库命令行处理器。

DB2 命令窗口

您可以把 DB2 命令窗口看成一个 DB2 shell( db2cmd.exe ),它扩展 Windows shell( cmd.exe )以提供对 DB2 命令和 SQL 语句的支持。在 DB2 命令窗口中输入的命令必须是以大写、小写或大小写结合的 DB2 开头。操作系统命令(如 dir )直接被传递到 Windows shell(cmd.exe),不需要感叹号( ! )。

DB2 CLP 与 DB2 命令窗口的主要区别在于 CLP 提供 DB2 命令提示符 DB2 => ,而 DB2 命令窗口提供 Windows 命令提示符,DB2 命令和操作系统命令都可以在其中输入。在 Windows 上用 DB2 命令窗口可以最有效地执行 DB2 UDB 脚本编制,因为它方便地支持对 SQL 语句、DB2 命令、DB2 系统命令和操作系统命令的调用。

提示:如果您试图从 Windows shell 直接运行 DB2 命令,您将得到以下错误消息:

clearcase/" target="_blank" >cccccc border=1>


 DB21061E  Command line environment not initialized. 

这表明这种 shell 不能处理 DB2 命令。您只需通过输入 db2cmd.exe 来启动 DB2 命令窗口,以初始化命令环境即可。

您可以设置几种选项来更改 DB2 CLP 的缺省行为。您可以通过输入 list command options 命令获取这些选项的列表,如图3所示。从 DB2 命令窗口调用 DB2 脚本最常用的几个选项将在下面的示例中演示。

图 3. DB2 命令窗口和选项
命令窗口和选项

有关使用 DB2 CLP 编制 SQL 和 DDL 语句脚本的更多信息,请阅读 Blair Adamache 撰写的 DB2 开发者园地文章DB2 的命令行处理器和脚本编制。DB2 命令选项在 DB2 UDB Command Reference 中也有详细的文档记录。

尽管 DB2 脚本可以包含 SQL 语句、DB2 系统命令和操作系统命令,但它只是有一个或多个 DB2 命令的文本文件。虽然不是必需的,但通过使用适当的文件扩展名形成一个标准的 DB2 脚本命名约定通常是个很好的方法。 表1显示了几种最常用的文件扩展名。

表 1. 脚本的常用文件扩展名

文件扩展名 描述
.db2 包含 DB2 命令的 DB2 脚本
.ddl 包含数据定义语言(DDL)语句的 DB2 脚本
.sql 包含 SQL 语句的 DB2 脚本

作为说明之用, 清单1包含一个非常简单的 DB2 脚本,该脚本使用数个 DB2 命令备份 sample 数据库。可以从任一 DB2 命令行工具执行该脚本。本文中用到的全部脚本都可以下载。这些脚本使用缺省的 DB2 实例(DB2)和样本数据库(SAMPLE)。其中的一些脚本将要求您安装 Windows 资源包(Windows Resource Kit)。

清单 1. 备份 sample 数据库的样本 DB2 脚本(db2backup.db2)



-- 

-- This is a sample DB2 Backup Script 

--

ATTACH TO DB2;

BACKUP DATABASE SAMPLE;

DETACH;

TERMINATE;

您可以使用以下语法从 DB2 命令窗口执行以上 DB2 脚本:



db2 -tvf db2backup.db2 -l db2backup.log -r db2backup.rpt

在上面的示例中,使用了以下 DB2 命令选项来执行 DB2 脚本文件( db2backup.db2 ):

-t 指明在缺省情况下用分号(;)终止每条命令
-v 指明应将每条命令显示到标准输出
-f 指明从输入文件读取命令
-l 指明将命令记录到输出文件中
-r 指明将结果保存到报告文件中

使用 -l 选项将所有 DB2 命令记录到日志文件( db2backup.log )并且使用 -r 选项将命令的输出保存到报告文件( db2backup.rpt ),这始终是一个很好的方法。这两个选项的区别在于:

  • -l 选项记录每条命令的开始和结束并记录日期和时间
  • -r 选项将每条命令的输出保存到文件中。

同时使用这两个选项可以让您利用报告文件查看脚本的执行摘要,并利用日志文件查看每条命令的详细信息。

也可以从 Windows shell 调用 DB2 命令窗口本身,只需从 Windows shell(命令提示符)输入 db2cmd 即可。它有一些有用的开关,可以在调用它时向它传递这些开关。 表2描述了这些选项:

表 2. DB2 命令窗口的选项

开关 描述
-c 执行 DB2 命令窗口,然后终止。
-w 一直等到 DB2 命令窗口终止。
-i 从进行调用的 shell 继承环境。
-t 从进行调用的 shell 继承标题。

通过首先调用 DB2 命令窗口,您可以从任一 Windows shell 执行清单1中的脚本,如下面的示例所示:



db2cmd -c -w -i db2 -tvf db2backup.db2 -l db2backup.log -r db2backup.rpt

DB2 命令窗口提供所执行的每条命令的返回码。 表3列出了返回码。

表 3. DB2 CLP 返回码

代码 描述
0 成功执行 DB2 命令或 SQL 语句
1 SELECT 或 FETCH 语句没有返回任何行
2 DB2 命令或 SQL 语句警告
4 DB2 命令或 SQL 语句错误
8 命令行处理器系统错误

:如果您正用交互方式执行语句,那么 DB2 CLP 不会提供每条命令的返回码。

DB2 系统命令

DB2 系统命令是一组命令行实用程序,您可以用来执行那些由于种种原因尚未集成到 DB2 控制中心或其它 GUI 工具的任务。通常从操作系统 shell(如 Windows 命令提示符)调用 DB2 系统命令,但也可以从 DB2 命令中心、DB2 任务中心、DB2 CLP、DB2 命令窗口,当然还可以从您惯用的脚本语言调用。

有近百条 DB2 系统命令可用。请参阅 DB2 Command Reference以获得这些命令的完整列表,以及详细的文档。通读 DB2 UDB 修订包发行说明以查找新的 DB2 系统命令始终是个很好的方法,因为常常都是通过修订包添加新命令或增强现有命令的。

表4是一个非常简短的列表,它列出了一些比较常用的 DB2 系统命令,这些命令在脚本编制时非常有用。乍一看,其中的一些命令可能看起来不太象脚本编制命令,因此提供了对命令的描述,以使您清楚如何在脚本中使用它们。

表 4. DB2 系统命令的示例

命令 描述
db2audit DB2 提供一个审计工具来帮助检测对数据未知或不曾预料的访问。可利用该实用程序使安全性审计自动化,如脚本编制方案所述。
db2batch 从平面文件或标准输入读取 SQL 语句,动态地准备并描述语句,然后返回结果集。在设计用于对不同实例和数据库配置参数进行基准测试的脚本中,可使用这一 DB2 命令。在调用该实用程序之前,要重新启动实例并捕获系统信息,如 DB2 注册表、实例和数据库配置。
db2exfmt 格式化说明表的内容。在设计用于 SQL 调优的脚本中,可使用这一 DB2 命令,因为可以用它自动化 SQL 语句的解释、抽取和格式化。用这一 DB2 命令进行脚本编制可允许解释、抽取和格式化大量的 SQL 语句以供以后复查。
db2chkbk 该实用程序可用于测试备份镜像的完整性,并确定是否可以复原该镜像。当在数据库备份脚本的末尾要生成备份完成报告时,该实用程序将非常有用。
db2flsn 返回数据库事务日志文件的名称,该文件包含由指定的日志顺序号(LSN)标识的日志记录。当为了恢复而启用日志保留,而且您正在运行数据复制并需要确定在何处开始修剪事务日志时,这一实用程序作为数据库事务日志修剪脚本的一部分将非常有用。




  

原文转自:http://www.ltesting.net