Raul F. Chong 本文向 Microsoft SQL Server 2000 的管理员展示了如何利用您目前的 SQL Server 知识来迅速获得有关 DB2 UDB V8 for Linux、UNIX and 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. Microsoft SQL Server 2000 结构 图 2. Linux、UNIX 和 Windows 上的 DB2 UDB V8 系统结构 实例和服务器 要在同一台机器上创建几个 SQL Server 命名实例,您必须对每个新的实例使用安装 CD,并且对每个新的安装都要使用安装 GUI。请注意,在这个过程中,为每个您创建的实例复制 SQL Server 代码,但使用的路径不同。只有某些文件是实例之间共享的。要删除一个实例,您必须使用安装 GUI 来卸载该实例。 在 DB2 UDB 中,当将产品安装在 Windows 平台后,将缺省地创建“DB2”实例。在 Linux 和 UNIX 中,缺省实例名为“db2instl”。要在同一台机器上创建另一个实例,您只须执行 图 3 显示了 DB2 UDB Control Center GUI 中的缺省 DB2 UDB 实例“DB2”和用 图 3. 显示 DB2 UDB 实例的 DB2 UDB Control Center GUI 要从命令行接口引用一个给定的 DB2 UDB 实例,请使用 DB2INSTANCE 环境变量。该变量让您指定所有命令将应用到的当前的活动实例。例如,如果 DB2INSTANCE 被设置成 PROD,然后您发出 标识您想使用的实例的另一个简单方法是如图 3 所示的使用 DB2 UDB Control Center GUI。您可能必须通过右键单击 Instances并选择 Add来将实例添加到 GUI 中,这样就可以在这个工具中看到该新实例的条目。 在 Windows 中创建了一个 DB2 UDB 实例后,一个与实例名同名的相应服务也被创建。可以执行 总而言之,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 服务
图 4 显示了带有缺省 DB2 实例以及用 db2icrt 命令创建的 PROD 和 DEV 实例的 DB2 UDB Windows 服务。 既然已经理解了 DB2 UDB 使用的 Windows 服务,让我们把这些服务与 SQL Server 上的服务一一对应起来。请看下面的表 2。 表 2. 把 SQL Server Windows 服务映射到 DB2 UDB Windows 服务
* 每台 DB2 机器仅可以有一个 DAS。 数据库 SQL Server 采用两个级别来存储元数据:实例级(使用 master 数据库中的系统表)和数据库级(使用用户数据库本身的系统表)。master 和 tempdb 这两个数据库可以被实例中的其它数据库共享。其它例如视图(view)这样的对象在创建用户数据库时也被缺省创建。 正如图 2 所示,在 DB2 UDB 中,一个实例也可以容纳多个数据库,每个数据库是真正封闭、独立的单元。每个数据库都有自己的目录表空间(存储元数据)、临时表空间和用户表空间。但没有一个数据库能够像 SQL Server 中的 master数据库那样可以跨数据库共享元数据信息。同样,也没有数据库能够像 SQL Server 中的 tempdb 那样可以在其它数据库中被共享以保持临时数据。DB2 UDB 包含了一个称作 系统数据库目录的二进制文件,里面有您从 DB2 机器连接的所有数据库的条目。这个目录在实例级别保存。 图 2 显示了 DB2 UDB 中的每个数据库的独立性。此外,您从图中还可以看到每个数据库都有自己的事务日志,这一点与 SQL Server 也很类似。 当创建一个实例时,缺省情况下不创建数据库。您需要使用 图 5. 使用 Control Center GUI 创建 DB2 UDB 数据库 图 6. 使用 Control Center GUI 创建 DB2 UDB 数据库(续) 在图 6 中,您也可以看到当单击了 Show Command时会发生什么情况。所有的 DB2 UDB Control Center GUI 屏幕都会显示实际上在后台执行的 SQL 语句或命令。这些命令能够保存在脚本中以供今后执行,或者被复制并从命令行处理器(Command Line Processor,CLP)工具或 Command Center GUI 工具中执行。这两个工具分别等同于 SQL Server 的 iSQL 和 Query Analyzer。 一个实例内的数据库通常不会相互交互;然而,如果应用程序有这样的要求,那么可以通过启用 联邦(federation)支持来实现此目的。您可以查看 参考资料一节来获取有关联邦的一篇文章。 容器、表空间和文件组 在 DB2 UDB 中, 表空间是逻辑对象,用作逻辑表和物理容器之间的层。当创建一个表空间时,您可以将它和一个特定的缓冲池(数据库高速缓存)关联起来,并关联到特定的容器。这给了你管理和性能上的灵活性。例如,如果有一个“热门”的表,您可以在它自身的表空间中定义它,而这个表空间又关联到其自身的缓冲池。这样就帮助确保了该表的数据总是在内存中高速缓存。 当用缺省选项创建 数据库时,将创建三个表空间,如表 3 所述。 表 3. 当创建数据库时,缺省创建的 DB2 UDB 表空间
因为数据库是独立的单元,因此不能跨数据库共享表空间。又因为表空间只在一个数据库中是已知的,所以两个不同的数据库可以有同名的表空间。您可以在图 2 中看到,数据库 MYDB1 有一个名为 MYTBLS 的表空间,而数据库 MYDB2 也有一个同名的表空间。 SQL Server 通过与 DB2 UDB 表空间类似的方式来使用文件组。两个不同的数据库可以有同名的文件组,这一点和表空间类似。如图 1 中所显示的,数据库 MYDB1 有一个名为 MyFileGroup 的文件组,而数据库 MYDB2 也有一个同名的文件组。 DB2 UDB 表空间可以被分为 SMS(系统管理空间)或 DMS(数据库管理空间)。SMS 表空间由操作系统管理并仅可以是目录。它们会随着需要自动地增长,因此提供了较好的性能并且不需要太多管理。这与 SQL Server 数据文件的行为(如果您允许自动增长)如出一辙。DMS 表空间由 DB2 UDB 管理,可以是文件或裸设备。这种类型的表空间能获得最佳性能,但需要一定的管理。例如,您需要提前指定希望分配给表空间的空间量,因为增长不是自动进行的。 事务日志的位置和大小可以在数据库 配置文件中指定。 下表 4 显示了 SQL Server 数据库如何与 DB2 UDB 数据库或表空间一一对应。 表 4. SQL Server 数据库如何与 DB2 UDB 数据库或表空间一一对应
对象名称 请注意:这些名称的头三个部分是可选的,取决于使用对象的上下文。 在 DB2 UDB 中,对象的结构由两部分组成: 模式名用来从逻辑上对对象进行分组。模式名不一定和用户标识相匹配。任何具有名为 IMPLICIT_SCHEMA 特权的用户都可以使用不存在的模式创建对象。例如,假设“Peter”具有 IMPLICIT_SCHEMA 特权,并执行了以下命令: 在这种情况下,创建了表 WORLD.TABLEA,其中 WORLD 是新创建的模式。如果 Peter 没有显式地指明该模式,那么表 PETER.TABLEA 也会被创建,因为缺省使用了连接标识。 在 DB2 UDB 中,在发出命令之前您总是显式地连接至一个数据库,这就解释了为什么数据库名称不是对象名称结构一部分的原因。 表、视图和索引 SQL Server 使用 master 数据库来存储有关其它用户数据库的信息,但是用户数据库本身是独立的单元,就象在 DB2 UDB 中一样。因此,在两种产品中,表、视图或索引都可以在两个不同的数据库中拥有相同的名称。SQL Server 允许连接不同数据库(和 SQL Server)的表;DB2 UDB 仅在显式激活联邦的时候才提供此支持。 存储过程、触发器和用户定义函数(UDF) 首先,两个产品都支持所有这些对象。只是SQL Server 使用它专有的 Transact-SQL(T-SQL),而 DB2 使用的是 SQL 过程语言(SQL Procedural Language,SQL PL),两者都是 SQL/PSM 标准的扩展。在 SQL Server 中,Transact-SQL 实际应用于每一件事情,包括实现 SQL Server 命令。在 DB2 UDB 中,情况却不是这样。DB2 使用不同的 API 来实现其命令,并且因为 SQL PL 存储过程被首先转换为 C,所以它需要一个 C 编译器来开发这些存储过程。Transact-SQL 是在 SQL Server 引擎中本机执行的一种解释语言。当运行它时,会变成经过解释的字节代码,并在每次运行时都需要优化。存储过程的 C 语言实现可以提供性能优势,因为代码只编译一次(尤其当运行在无保护方式下);然而,它也增添了对 C 编译器的需求。在 DB2 UDB 的未来发行版中,在提供现有功能的基础上,希望能在无需 C 编译器的情况下支持 SQL PL 存储过程,这将允许用户选择他们想要实现 SQL PL 存储过程的方式。 使用 DB2 UDB,您可以在触发器和函数中使用 内联SQL PL,这意味着您不需要 C 编译器。通过这种方法可以支持 SQL PL 语句的一个子集。 配置文件 使用 Control Center,如果右键单击一个给定的实例并选择 Configure Parameters,您将会看到图 7 所示的窗口。 在数据库级别,右键单击一个给定的数据库并选择 Configure Parameters,将显示图 8 所示的窗口。 DB2 UDB 提供了许多可以用来配置系统的参数;然而,如果您喜欢用一种简单的方法来自动配置系统,请使用 图 9. DB2 UDB Configuration Advisor 除了配置文件之外,DB2 UDB 通常还把 DB2 注册表变量用于特定于平台的配置。注意, DB2 注册表变量与 Windows 注册表没有任何关系。用户可以使用 安全性 支持两种方式的认证:
一旦经过认证,用户还不能对 SQL Server 进行任何操作,除非他/她被分配了一个角色或一个给定的特权。 角色被用于将用户分组为一个独立的单元,在这个单元上将应用许可权。因此,您不用将单独的许可权授予几个用户,相反,您可以创建一个包括所有这些许可权的角色,然后再把这个角色分配给用户。 在 DB2 UDB 中,用户不存在于数据库中,而是由操作系统进行管理的。因此,DB2 UDB 的认证在某种程度上有点类似于 SQL Server 的 Windows 认证;但是,在任何数据库表中都不会保存数据库登录信息。任何操作系统用户都有可能潜在地使用 DB2 UDB;然而,除非他们被赋予了给定的 DB2 UDB 权限或特权,否则他们能做的并不是很多。通过 Control Center GUI 可以很方便地处理权限和特权的赋予和撤销。您可能首先必须将一个用户或组从可用的操作系统用户或组中添加到 Control Center。 另外,在 DB2 UDB 中不使用术语“角色”;而是使用术语“权限(authority)”,这类似于 SQL Server 的固定的服务器和数据库角色。DB2 UDB 不支持 MS SQL Server 的用户定义的数据库角色;但是,一个操作系统组可以被赋予权限和特权来实现角色功能。DB2 UDB 支持的权限有:SYSADM、SYSCTRL、SYSMAINT、DBADM 和 LOAD。 使用 GRANT SQL 语句不能赋予 SYSADM、SYSCTRL 和 SYSMAINT 权限。这些特殊的权限只能从数据库管理器配置文件来设置。 具有 SYSADM 权限的 DB2 UDB 用户相当于具有 sysadmin 角色的 SQL Server 用户。 DB2 UDB 还使用术语“特权”,这等同于 SQL Server 的许可权。有数据库 特权(connect、createtab 等)和 数据库对象特权(schema、table、view 等)。图 10 显示了从 Control Center GUI 中获得的 DB2 UDB 安全性信息。图中大部分的选项卡对应了 DB2 UDB 所支持的特权。 下表 5 将 SQL Server 的安全性概念和 DB2 UDB 中的一一对应起来。 表 5. 将 SQL Server 的安全性概念和 DB2 UDB 中的一一对应起来
工具 使用命令行 图 12 显示了 DB2 UDB CLP 实用程序。我们首先从命令提示窗口执行命令 db2cmd 来打开命令窗口。这将初始化运行 CLP 所需要的 DB2 环境。然后,我们通过执行命令 db2 来调用 CLP。 SQL Server 和 DB2 UDB 都提供了同样是 GUI 工具的命令行接口。SQL Server 中有 Query Analyzer。而在 DB2 UDB 中对等的是 Command Center,如图 13 所示。 结束语 作为对 SQL Server 和 DB2 UDB 体系结构的最后回顾,让我们比较一下图 14 和图 15。它们分别使用 SQL Server Enterprise Manager 和 DB2 UDB Control Center 显示了各自的数据库对象。 图 14. MS SQL Server Enterprise Manager - 总结 图 15. DB2 UDB Control Center - 总结 下一步该怎么做?
|
利用您的 Microsoft SQL Server 2000 技能来学习 DB2 UDB V8
最新推荐文章于 2021-07-27 12:20:16 发布