引言
在当今的信息技术领域中,新信息在不断地向我们冲击 - 新的软件产品、新的版本和新的功能。使您能跟上这些不断发生的变化的方法之一就是利用您手中 现有的知识。我将向您展示如何使用您目前的 Microsoft® SQL Server 2000 的知识来迅速获得有关 DB2 UDB V8 for Linux、UNIX and Windows 的技能。在本文中,术语“SQL Server”指的是 Microsoft SQL Server 2000,“DB2 UDB” 指的是 DB2 UDB V8 for Linux、UNIX and Windows。本文的重点主要集中在 Windows 平台。
第一个要注意的 SQL Server 和 DB2 UDB 之间的重要区别是 SQL Server 仅在 Windows 平台(Intel 体系结构)上受支持。而另一方面,DB2 UDB 可以在 Linux、UNIX 和 Windows 平台以及许多硬件体系结构中得到支持。针对所有这些平台的代码基本上是相同的,只带有极少数特定于平台的模块。此外,DB2 UDB 产品还可以扩展到 iSeries®(AS/400® 和 z/OS®(大型机))的领域。iSeries 和 z/OS 的 DB2 UDB 成员的代码库与 DB2 UDB for Linux、UNIX and Windows 的不同,因为这些产品利用了各自的硬件体系结构。但是,这些 DB2 系列的功能是非常相似的。在您熟悉了 DB2 UDB for Linux、UNIX and Windows 以后,您可以大胆尝试学习有关其它平台上的 DB2 的更多知识。
系统结构概述
下图 1 展示了基本的 SQL Server 结构。图 2 展示了 DB2 UDB 的结构,请把两者做一下比较。我将在整篇文章中引用这两幅图。
图 1. Microsoft SQL Server 2000 结构
图 2. Linux、UNIX 和 Windows 上的 DB2 UDB V8 系统结构
实例和服务器
尽管在 SQL Server 术语中不经常使用“实例”这个术语,但是 实例的概念在 SQL Server 和 DB2 UDB 中是相似的。用户通常只把它称为“服务器”。对于这两个产品而言,实例提供一个独立的环境,数据库对象在其中创建,并且应用程序在这些对象上运行。由于实例遵循一种“不共享”的体系结构,因此一个实例的对象通常不与其它实例的对象进行交互。图 1 和图 2 将 PROD 实例和 DEV 实例表示为两个概念上彼此独立的框。虽然实例的概念在这两个产品中是相同的,但它的实现却是截然不同的。在 SQL Server 中,您可以有一个“缺省”实例(仅有一个)和一些命名实例。 缺省实例在第一次安装 SQL Server 时创建,并由计算机名来标识。而 命名实例在创建 缺省实例之后创建,并必须通过 computer_nameinstance_name 的格式来进行标识。
要在同一台机器上创建几个 SQL Server 命名实例,您必须对每个新的实例使用安装 CD,并且对每个新的安装都要使用安装 GUI。请注意,在这个过程中,为每个您创建的实例复制 SQL Server 代码,但使用的路径不同。只有某些文件是实例之间共享的。要删除一个实例,您必须使用安装 GUI 来卸载该实例。
在 DB2 UDB 中,当将产品安装在 Windows 平台后,将缺省地创建“DB2”实例。在 Linux 和 UNIX 中,缺省实例名为“db2instl”。要在同一台机器上创建另一个实例,您只须执行 db2icrt <instance name> 命令。对于一台机器上的多个 DB2 UDB 实例,只有 DB2 UDB 代码的 一个副本。
图 3 显示了 DB2 UDB Control Center GUI 中的缺省 DB2 UDB 实例“DB2”和用 db2icrt 命令创建的其它两个实例。
图 3. 显示 DB2 UDB 实例的 DB2 UDB Control Center GUI
要从命令行接口引用一个给定的 DB2 UDB 实例,请使用 DB2INSTANCE 环境变量。该变量让您指定所有命令将应用到的当前的活动实例。例如,如果 DB2INSTANCE 被设置成 PROD,然后您发出 create database MYDB1 命令,那么您将创建和实例 PROD 关联的数据库。如果您想在实例 DB2 上创建该数据库,则您必须首先将 DB2INSTANCE 变量的值更改为 DB2。
标识您想使用的实例的另一个简单方法是如图 3 所示的使用 DB2 UDB Control Center GUI。您可能必须通过右键单击 Instances并选择 Add来将实例添加到 GUI 中,这样就可以在这个工具中看到该新实例的条目。
在 Windows 中创建了一个 DB2 UDB 实例后,一个与实例名同名的相应服务也被创建。可以执行 db2idrop <instance name> 命令来删除 DB2 实例。该命令 不会除去 DB2 UDB 代码。如果是 Windows 的话,它会除去该实例的相应 Windows 服务。
总而言之,SQL Server 和 DB2 UDB 中的实例在概念上是相同的;不同的是在其实现上。SQL Server 对于每个新实例都需要一个不同的 SQL Server 代码的副本,而 DB2 UDB 则不需要。在 SQL Server 中,可以使用 Enterprise Manager GUI 来管理实例,而在 DB2 UDB 中,则使用 Control Center GUI 来达到类似的目的。
Windows 服务
表 1 描述了一些主要的 DB2 UDB Windows 服务。
表 1. DB2 UDB Windows 服务
服务名 | 描述 |
DB2 - <instance name>-<partition number> | 这是一个给定实例的引擎。它处理所有的 SQL 语句并管理数据库。如果启用了分区支持,DB2 可以支持一个数据库在不同机器上的多个分区。因此,< partition number> 表明您正在处理哪个分区。如果没有启用分区,分区号则不会出现。 |
DB2 Governor | 收集连接 DB2 数据库的应用程序的信息,并且基于您定义的规则来监控操作并对一些操作采取行动。例如,您可以指定一条规则将某一工作单元使用的时间限制在一个小时,并且如果超过了这个限制,则强制连接到数据库。 |
DB2 JDBC Applet Server | 为使用 JDBC 类型 3 驱动程序的 DB2 应用程序提供 JDBC 服务器支持。 |
DB2 License Server | 监控是否符合 DB2 许可证。 |
DB2 Remote Command Server | 支持多分区数据库的分区间通信。 |
DB2 Security Server | 当在客户机上执行认证时,认证 DB2 数据库用户。 |
DB2DAS - DB2DAS00 | 这是 DB2 Administration Server。它支持本地的和远程的数据库管理请求。DB2 Administration Server 的 Windows 缺省名称是 DB2DAS00。该服务器与工具目录服务器一起使用来管理作业、警告等。 |
图 4 显示了带有缺省 DB2 实例以及用 db2icrt 命令创建的 PROD 和 DEV 实例的 DB2 UDB Windows 服务。
图 4. DB2 UDB Windows 服务
既然已经理解了 DB2 UDB 使用的 Windows 服务,让我们把这些服务与 SQL Server 上的服务一一对应起来。请看下面的表 2。
表 2. 把 SQL Server Windows 服务映射到 DB2 UDB Windows 服务
SQL Server 服务 | 匹配的 DB2 UDB Windows 服务 |
MSSQLServer 服务。这个服务代表了缺省的 SQL Server 实例。 | DB2 - DB2-0 服务。这个服务代表了缺省的“DB2”实例。 |
MSSQL$<instance_name> | DB2 - <instance_name> |
SQLServerAgent | DB2DAS - DB2DAS00。这个服务代表了 DB2 Administration Server(DAS)* |
SQLAgent$<instance_name> | DB2DAS - DB2DAS00。这个服务代表了 DB2 Administration Server(DAS)* |
Microsoft Distributed Transaction Coordinator (MS DTC) | Sync Point Manager(SPM)用于支持分布式工作单元。数据库配置参数 SPM_NAME 向数据库管理器标识了同步点管理器实例的名称。 |
Microsoft Search | 没有匹配的 DB2 UDB Windows 服务;但是,Net Search Extender 软件可用于类似的目的。 |
* 每台 DB2 机器仅可以有一个 DAS。
数据库
正如图 1 所示,在 SQL Server 中,一个实例可以包含多个数据库。每个数据库都是一个独立的单元;然而,有关所有用户数据库的元数据都保存在 master数据库中,因此查询可以访问两个不同数据库中的表。当创建一个实例的时候,同时也缺省创建了几个数据库,例如 tempdb、master、model 和 Northwind 等等。
SQL Server 采用两个级别来存储元数据:实例级(使用 master 数据库中的系统表)和数据库级(使用用户数据库本身的系统表)。master 和 tempdb 这两个数据库可以被实例中的其它数据库共享。其它例如视图(view)这样的对象在创建用户数据库时也被缺省创建。
正如图 2 所示,在 DB2 UDB 中,一个实例也可以容纳多个数据库,每个数据库