利用 MySQL 技能学习 DB2 Express: DB2 与 MySQL 的管理任务和基本任务

转向 DB2 Universal Database 的技术迁移

您的数据库环境需要具有跨数据库的技能吗?如果您熟悉 MySQL,那么可以使用您已经拥有的很多技能来学习 DB2® Express。本文是关于利用 MySQL 技能学习 DB2 的系列文章的第一部分,将对管理任务、数据类型、SQL、锁定等进行比较。

Allan Tham, 售前服务专家,ASEAN Techline, EMC

Allan ThamAllan Tham 为业务伙伴提供 DB2 Content Manager Technical 售前支持。他帮助业务伙伴解决各种技术问题。Allan 是经过认证的 DB2 Content Management 管理员。在加入 IBM 之前,Allan 曾经在终端用户环境中做过三年的 Oracle DBA。



2006 年 4 月 03 日

简介

管理不同类型的数据库是大多数数据库管理员的一种工作方式。很少出现 DBA 只管理一组同类数据库的情形。在企业的数据中心,会有各种不同的后端存储库来存放数据,比如数据库中的电子表格、图像、视频/音频形式的数据,而这些后端存储库包括 DB2 Universal Database™、Oracle、Microsoft® SQL Server、Informix®、Sybase 或者诸如 MySQL 之类的开放源码数据库。大多数公司要求 DBA 具有跨数据库管理这些不同的数据库的技能,对于企业数据中心而言,对各种数据源具有丰富知识的人才是不可或缺的。

本系列文章将帮助您根据现有的 MySQL DBA 技能学习 DB2 Express。本文是这一系列的第一部分,将带领您快速了解 DB2 Express,文中主要将介绍 DB2 Express 的特性和功能,以及与开放源代码数据库 MySQL 相比 DB2 Express 所具有的优势。

本文对一般性管理任务进行了比较,但并没有深入讨论可管理性、稳定性和可伸缩性的问题,也不会讨论两种数据库引擎的编写方式,或者优化程序的工作方式。本文的目的是通过概括开始了解技能转移过程,或者为那些希望进行这种比较的人描述一下这两种产品。

对于关心成本的入门级用户,IBM 提供了 DB2 Express 的免费版本,该版本称为 DB2 Express-C。DB2 Express-C 与 DB2 Express、Workgroup Edition 和 Enterprise Edition 具有相同的代码基础。随着业务的增长,客户往往转而采用 DB2 Workgroup 或 Enterprise,这些产品通过 Data Partitioning Feature (DPF) 和 High Availability Disaster Recovery (HADR) 提供了真正满足企业需求的高可用性和高性能。DB2 Express-C 适合 C/C++、Java™、.NET® 和 PHP 开发人员,可以免费 下载 使用。不过要注意的是,DB2 Express-C 有 2-WAY CPU 和 4GB RAM 的限制。关于不同版本的比较,请参阅 DB2 UDB 分布式平台的 比较表 来获得版本比较。


主题

本文包括以下内容:

下面我们来详细说明各个主题。


安装

首先来看看 MySQL 和 DB2 Universal Database Express 的安装步骤。两者的安装过程都很简单。

MySQL 安装

与 DB2 Express 相比,安装 MySQL 服务器的步骤略多一些(安装代码后还需要配置)。不过,两种数据库服务器都很容易安装。MySQL 和 DB2 Express 都允许在安装后使用 GUI 管理工具配置数据库。

关于 MySQL 安装程序的一点说明 —— 包含内容

对于 MySQL 5.0.18 Windows® 安装程序,服务器安装没有包含 GUI 管理程序或查询浏览器。安装 MySQL 服务器后,机器上将包括:

  • MySQL Command Line Client
  • MySQL Manual
  • MySQL Server Instance Configuration Wizard

如下面的 图 1 所示:

图 1. MySQL 安装内容
安装内容

要使用 GUI AdministratorQuery Browser,则必须单独下载安装程序。要注意的是,不同平台需要下载不同的安装程序。而 DB2 Express 一次就安装了所有必需的管理工具和设施,无需另外下载。

DB2 Universal Database 安装

DB2 logoDB2 Universal Database Express 安装非常简单,参照下列步骤即可。

  1. 在欢迎屏幕上单击 Install Product
    图 2. 欢迎屏幕
    欢迎屏幕
  2. 单击 Next
    图 3. 选择要安装的产品
    选择要安装的产品
  3. 单击 Next
    图 4. 安装向导
    安装向导
  4. 接受许可协议,然后单击 Next
    图 5. 接受许可协议
    接受许可协议
  5. 作为例子,我选择了 Typical。您还可以选择 Custom 或 Compact。然后单击 Next
    图 6. 安装选项 —— Typical、Compact 和 Custom
    安装选项 —— Typical、Compact 和 Custom
  6. 需要安装的驱动器和目录。可以保留默认值。
    图 7. 安装目录
    安装目录
  7. 输入 db2admin 口令。db2admin ID 是为 DB2 服务器管理创建的默认用户。
    图 8. 用户信息
    用户信息
  8. 单击 Next。注意,在这里可以配置协议和启动选项。
    图 9. 配置实例
    配置实例
  9. 单击 Next开始安装。
    图 10. 开始安装
    开始安装
  10. 单击 Next。注意,在这里可以配置协议和启动选项。
    图 11. 完成安装
    完成安装

完成安装后,DB2 Express 的安装布局如下表所示(概括性的)。默认的 DB2 Express 安装目录是 C:\Program Files\IBM\SQLLIB。下表只是 DB2 Express 在 Windows 平台上的布局,Linux® 和 UNIX® 具有不同的路径设置。

表 1. DB2 Express 安装布局
目录名内容
/adsm包括用于口令加密的 dsmapipw.exe
/BIN包含启动、停止和管理数据库所需的所有二进制文件
/bnd包含所有的绑定包
/conv包含代码页的转换表
/DB2DB2 实例相关文件,比如,其中包括 db2 日志文件 db2diag.log
/DB2DAS00包含 DB2 Admin Server- (DAS) 相关文件,如 dump 目录中的 db2dasdiag.log。如果有多个 DAS,该目录名将带有数字,如 DB2DAS01 等。通常一个 DAS 就足够用了
/java包含 JDBC™ 驱动程序
/samples包含大量实例代码
/TOOLS包含 DB2 工具的多数 JAR 文件
/tutorials包含各种教程

系统结构

本文中将讨论两种系统结构:

  • 内存结构
  • 容器

首先来看看 DB2 Express 主要内存布局的基本结构。关于内存管理的详细说明,请参阅 developerWorks 文章 “The DB2 UDB memory model: How DB2 uses memory”(链接请参见 参考资料 部分)。

内存结构

图 12. DB2 Express 内存结构
DB2 Express 内存结构

各部分的功能如下:

  • Package Cache —— 用于存储静态和动态 SQL 语句的内存
  • Buffer Pool —— 用于在写入磁盘之前暂存数据的内存
  • Log Buffer —— 在日志写入磁盘前存储所有数据库更改的内存

容器

根据使用的表类型不同,MySQL 可以使用单个文件、多个文件或者表空间来存储数据。在这一节的最后,表 2 总结了 MySQL 和 DB2 Express 使用的容器。

图 13. MySQL 容器
MySQL 容器

DB2 logo

与 MySQL 不同,DB2 Express 总是存储在表空间中。表空间是文件系统中的物理容器的逻辑表示。下面是表空间的一些特点:

  • 一个数据库至少要有一个表空间。默认情况下,标准 DB2 Express 安装将创建三个表空间:
    • Syscatspace —— 存储系统目录信息
    • Tempspace1 —— 存储系统临时表。临时表空间可以是系统定义的,也可以是用户定义的。最好从系统临时表空间创建用户临时表空间
    • Userspace1 —— 存储系统临时表。临时表空间可以是系统定义的,也可以是用户定义的。最好从系统临时表空间创建用户临时表空间

    物理文件系统中的 DB2 Express 容器布局如下。C:\DB2\ 是数据库管理的默认数据库路径。也可以使用命令 list active databases 找到数据库路径。DB2 数据库结构是按以下这种方式安排的,其中每一层分别表示:

    图 14. DB2 Express 容器布局
    DB2 Express 容器布局
    • Drive/Directory —— CREATE DATABASE 命令中指定的驱动器或目录
    • DB2 Instance Name —— DB2 Instance 所有者的名字
    • NODE0000 —— 数据库分区号,0 表示没有分区的数据库
    • SQL00001 —— 数据库 ID,从 1 开始编号
    • SQLOGDIR —— 数据库的默认日志目录
    • SQLT0000.0 —— 目录表空间,SYSCATSPACE
    • SQLT0001.0 —— 临时表空间,TEMPSPACE1
    • SQLT0002.0 —— 用户表空间,USERSPACE1

    管理员可以随时创建更多的表空间,例如使用 清单 1清单 2 中所示命令。(关于完整的 创建表空间的语法,请访问 Information Center。)

    清单 1. 在 DB2 Express 中创建系统表空间
    Create System Temporary Tablespace systemp1_space
     	managed by system      
    	using ('c:\systemp1_space','d:\systemp1_space')
    清单 2. 在 DB2 Express 中创建用户表空间
    Create User Temporary Tablespace usertemp1_space
    	managed by database   
    	using (file 'c:\userdata1\usertemp1_space' 10000, 
                                file 'd:\userdata2\usertemp1_space' 20000)
  • 可以将表分解到不同的表空间中。
  • 视图、触发器和存储过程也可以保存在表空间中。
  • 管理员可以根据需要创建任意多个表空间和任意多个容器。支持自动扩展特性。
  • 表空间可以是系统管理的(SMS),也可以是数据库管理的(DMS)。

DB2 数据库管理员经常要决定容器是由系统管理,还是由数据库管理。这种决策由几方面因素决定,如可管理性、业务需求(如数据库的规模和增长速度)和性能问题。通常 SMS 更适合较小的环境,需要的时候,系统可以提供更多的空间。对于更繁琐庞大的环境,最好使用 DMS,因为管理员可通过自动扩展特性来分配空间。不过在一个数据库中结合使用两种方法的例子也不少见,比如把目录和临时表放在 SMS 中,而索引和数据则放在 DMS 中。

表 2 MySQL 和 DB2 Express 容器的差别。

表 2. 容器的区别
数据库表类型说明
MySQLMyISAM索引文件用 .MYI,数据文件用 .MYD。索引和数据分别使用一个文件。
MySQLInnonDB在路径参数 innodb_data_file_path 指定的表空间中存储数据。默认情况下该值为 ibdata1:10M:autoextend。可使用多个数据文件。
MySQLMerge.MRG 文件包含应该只作为一个表使用的表的名称,.FRM 包含表的定义。使用多个数据文件。
DB2 Express所有类型存储在可跨越多个磁盘的表空间中。有两种类型的容器:
  • System Managed (SMS) —— 操作系统文件管理
  • Database Managed (DMS) —— 数据库管理程序管理

要确定使用哪一种表空间,SMS 还是 DMS,请阅读 DB2 Information Center 上的 SMS 与DMS 的比较


可执行文件

首先看一看 MySQL 中主要的可执行文件和 DB2 Express 中的对应文件。然后重点介绍后者特有的可执行文件。本文主要讨论 Windows 操作系统上的可执行文件。这两种数据库在 Linux 和 UNIX 上的可执行文件可能不一样。

表 3. MySQL 和 DB2 Express 中的可执行文件
MySQL 的可执行文件名DB2 Express 的可执行文件名说明
MySQLInstanceConfig.exeDB2 Control CenterMySQLInstanceConfig 用于配置实例。DB2 使用 Control Center 配置实例。请参阅本文中的 数据库配置 一节。
myisamchk.exe检查 MyISAM 表的完整性DB2 使用 Control Center 完成同样的检查。对于索引可使用 Index 窗口中的 Check Index,或者使用 Tablspace 窗口中的 Check Index。对于表,可以使用 CHECK 约束来确保完整性。SET INTEGRITY 也用于表的完整性。比如通过对表执行 Control Center 操作可以设置表的完整性。

db2dart 工具可用于检查数据库的结构完整性。与 db2dart 类似的是 inspect。检查备份镜像的完整性使用 db2ckbkp 命令。要检查整个数据库的健康状况,可使用 Health Center GUI。

myisampack.exe压缩 MyISAM 表在创建表的语句中使用 VALUE COMPRESSION ,可以在列或表级别上使用节省空间的行格式来减少空间占用。需要使用 Backup & Restore 数据库 API 来提供压缩,从而减少空间。
mysql.exeMySQL 的 Windows 客户机DB2 Runtime Client —— 一种单独的产品,可访问远程 DB2 数据库单独安装。
mysqladmin.exeMySQL Admin 客户机 —— 使用该命令可以执行的管理任务包括:
  • 创建数据库
  • 删除数据库
  • 刷新日志、表、状态
  • 处理列表
  • 关闭数据库
  • 启动从数据库
  • 停止从数据库
DB2 命令提示符基本上可用于客户机和管理任务。要访问 DB2 命令提示符,可切换到 All Programs -> IBM DB2 -> Command Line Tools
mysqlbinlog.exeMysqlbinlog 至少有三种用途:
  • 记录所有的数据库事务
  • 备份和恢复
  • 复制
DB2 Express 支持联机日志和存档日志。出于 MySQL 相同的目的,所有事务都被记录下来。DB2 Express 支持单个事务的无限多个活动日志,所以长期事务永远不会失败(只要物理磁盘空间足够)。支持的最大日志空间为 256 GB。

此外,默认情况下 DB2 把错误记录到 db2diag.log 中。可使用工具 db2diag 分析这个日志文件。根据严重程度,错误可分为以下级别:

  • Info
  • Warning
  • Error
  • Severe
  • Critical
  • Event
mysqlcheck.exe检查数据库是否健康,比如检查、修复、分析或优化表。比如 mysqlcheck -u root -p awtDB2 没有直接匹配的程序检查表错误。所有的表错误都被写入 db2diag.log 文件,用时间戳指向转储记录。这个转储文件不是为胆小的人准备的,它们是供 DB2 支持代表使用的。不过可以对表执行一些操作,比如:
  • Quiesce —— 比如,quiesce tablespaces for table <Schema Name>.<Table Name> Share|Intent to Update|Exclusive
  • Reorg —— 比如,reorg table <Schema Name>.<Table Name>
  • Reorg index —— 比如,reorg indexes all for table <Schema Name>.<Table Name> allow no access
  • Runstats —— 比如,runstats on table <Schema Name>.<Table Name> on all columns allow write access
  • Set Integriy —— 比如,set integrity for <Schema Name>.<Table Name> off no access cascade deferred
mysqld.exe运行 MySQL 服务器 —— 有很多选项(若想了解更多信息,请输入 mysqld --help --verbose可使用 db2start 启动 DB2 Express 数据库实例。也可通过将 db2instance 环境参数设置为需要启动的实例来启动多个实例。停止实例使用 db2stop

注意,启动和停止 DB2 实例需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

mysqldump.exe该工具导出表、表中的某些行、整个数据库或者一组数据库DB2 Export —— DB2 Express 支持导出四种格式的表或表中的某些行。受支持的四种文件格式为:
  • IXF —— 集成交换格式文件
  • ASC —— 不带分隔符的 ASCII 文件
  • DEL —— 带分隔符的 ASCII 文件
  • WSF —— Worksheet 格式的文件

导出操作很简单,比如要从 Employee 表导出数据:export to employee.del of del messages emp.log select * from allanwtham.employee

mysqlimport.exe该工具用于在纯文本文件中导入数据 DB2 Import —— 支持与 DB2 Export 相同的四种格式
NALoadDB2 Load —— 向数据库中高速加载数据
NAAuditdb2audit —— 用于检查未知的或者意料之外的数据访问的审计设施
NAExplaindb2expln —— 解释静态 SQL 语句选择的访问计划
NAConfiguration Assistantdb2ca —— 配置远程访问
NAdb2adminDB2 Admin Server (DAS) —— 有关的管理任务

数据库表类型

MySQL 对不同的用途使用不同的表。可以在一个数据库中混合使用这些不同的表。具体使用哪种表取决于用户的需要。表类型如下(最常见的是 MyISAM 和 InnoDB):

  • SAM

    SAM 是较早期的表类型。这种表类型主要用于支持遗留数据库。它已经被 MyISAM 表类型代替,并且计划不再支持这种表类型。

  • MyISAM

    MyISAM 是默认的表类型。要在 MyISAM 中创建表,可以保留默认值或者用 ENGINE 关键字明确指定,比如:

    清单 3. 使用 MyISAM 创建表
    Create table employee (
      empno int not null auto_increment primary key,
     firstnme varchar(30),
     lastname varchar(30),
     deptno int
      ) engine=MYISAM;

    MyISAM 表类型是非事务安全的表类型。对于高度并发的多重读/写,不应该选择这种表类型。MyISAM 不能保证原子性、一致性、隔离和持久性 (ACID)。不过,MyISAM 允许进行压缩和全文搜索。对于 MyISAM 类型,索引存储在 .MYI (MyIndex) 文件中,数据本身存储在 MYD (MyData) 文件中。MyISAM 表类型没有表空间的概念 —— 所有的数据/索引都存储在文件中。检查/修复 MyISAM 使用工具 myisamchk,压缩表使用 myisampack。MyISAM 中只有一种锁定机制,即表级锁定,因此不适用于访问比较频繁的环境。

  • InnoDB

    越来越多的企业需要使用这种表类型。InnoDB 是一种兼容 ACID 的表类型。InnoDB 表类型在表空间中存储数据和索引,允许使用不同文件系统中的多个表。最初由 InnoBase Oy 开发的这种表类型适合于快速、高性能、事务安全的环境。InnoDB 使用更小粒度的锁定机制 —— 行级别的锁定。详情请参阅 锁定机制 一节。

    创建 InnoDB 类型的表要在 ENGINE 表创建语句选项中指定关键字 Innodb,请参阅下面的例子。

    ENGINE
    Create table employee (
     empno int not null auto_increment primary key,
     firstnme varchar(30),
     lastname varchar(30),
     deptno int
     ) engine=InnoDB;
  • BerkeleyDB (BDB)

    这种表类型的用途与 InnoDB 相同。由 Sleepycat 开发的这种表类型存储在 B 树中,它支持页级锁定。

  • Merge

    Merge 类型是 MyISAM 的衍生物,用途是绕开单个巨大文件问题。它允许位于不同磁盘上的多个 MyISAM 文件根据创建表语句中的 MERGE 规范来执行查询。要插入合并表,则必须将 INSERT_METHOD 选项指定为 firstlast。默认情况下只能执行 SelectUpdateDelete

  • Heap

    将整个表保存在内存中。使用这种类型速度很快,但是一旦崩溃就会造成数据丢失。最好暂时性地使用这种类型。

DB2 logo DB2 Express 将数据存储在容器中,无论该容器是系统管理的容器,还是数据库管理的容器。默认情况下,在 DB2 Express 中创建的表与 ACID 兼容。没有用于创建与 ACID 不兼容的表的选项。创建表的语法非常类似。

比如要创建表 employee:

清单 5. 在 DB2 Express 中创建表
Create sequence sq1;
Create table employee1 
   (empno int not null default next_value of sq1,
    firstnme varchar(30), 
    lastname varchar(30), 
    deptno int, 
    primary key (empno))

ACID —— 定义

请参阅 ACID 的 wiki 定义

  • 原子性 —— 事务中的任务要么全部完成,要么全部不做。事务必须是完整的,否则必须取消(回滚)。
  • 一致性 —— 每个事务必须保持数据库的完整性约束 —— 声明的一致性规则。不能存放矛盾的数据。
  • 隔离 —— 两个同时执行的事务不能互相干扰。事务内部的中间结果对其他事务不可见。
  • 持久性 —— 完成的事务不能再撤销或者丢弃结果。它们必须(比方说)在 DBMS 崩溃并重启后保持不变。

DB2 Express 支持四种表类型,即:

  • 临时表 ——

    也称为公用表表示,这种表是 SQL 语句执行期间存在的临时表。可以根据需要引用任意多次,不需要重新计算。可使用这种表类型代替视图。

  • 类型化的表 ——

    使用结构化类型定义的表。结构化类型是包含一系列属性的数据类型。

  • 概括表 ——

    定义从查询中派生的表。主要在数据仓库环境中使用。

  • 物化查询表 ——

    定义从多表查询中派生的表。主要用于数据仓库环境。

除了表以外,还有其他类型的数据库对象,如索引、函数、触发器和存储过程等,这些对象共同组成了实用的关系数据库。表 4 比较了两种数据库的这些对象:

表 4. 数据库对象的异同
对象名MySQL 中的可用对象DB2 Express 中的可用对象说明
用户定义表×两种类型的用户定义表
  • 临时表(公用表表示)
  • 类型化表
MySQL 中的派生表有点类似于 DB2 Express 临时表
用户定义函数两者都支持标量和列用户定义函数
用户定义数据类型×三种用户定义的数据类型 ——
  • 显式类型
  • 结构化类型
  • 引用类型
存储过程DB2 Express 支持 SQL 和 Java 存储过程
视图MySQL 从版本 5 开始支持视图
可更新视图DB2 Express 还支持类型化视图
触发器MySQL 从版本 5 开始支持触发器
递归 SQL×与递归函数类似,DB2 Express 的递归 SQL 可递归地使用结果集来得到最终结果
序列×MySQL 本身不支持序列,但是可以 模拟一个序列

数据库配置

MySQL 中需要在配置文件 my.cnf 的 [mysqld] 节指定配置参数。Windows 系统上提供了多个配置样板,如 my-medium.ini,还提供了其他 my-xxx.ini 文件。MySQL 在 Windows 上提供了示例配置文件 *.ini。下面给出了 my-medium.ini 中的一节。注意,不需要取消所选相关表类型的注释。

清单 6. MySQL 示例配置文件
...
# The MySQL server
[mysqld]
port		= 3306
socket		= /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1 M
table_cache = 64
sort_buffer_size = 512K 
net_buffer_length = 8K
read_buffer_size = 256K 
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
...
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /usr/local/var/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /usr/local/var/ 
#innodb_log_arch_dir = /usr/local/var/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

对于 DB2 Express,可使用 Control Cenrter 或者命令行处理程序(CLP)获取和设置数据库或者实例的配置文件。要使用 Control Center 配置数据库,请右击选中的数据库并选择 Configure Parameters

图 15. 右击配置参数
配置参数

可以动态改变这些值(一些参数只有在数据库管理程序停止并重新启动后才生效)。配置参数可分为以下几类:

  • 应用程序
  • 环境
  • 日志
  • 维护
  • 性能
  • 恢复

请参阅 DB2 Information Center 中完整的 参数列表

图 16. DB2 Express 数据库配置参数
DB2 Express 数据库配置参数

也可用 CLP 查询和设置配置参数。更新数据库配置的语法如下:

清单 7. 更新 db 配置的语法
	>>-UPDATE--+-DATABASE-+--+-CONFIGURATION-+---------------------->
           '-DB-------'  +-CONFIG--------+
                         '-CFG-----------'
                                   .----------------------.
                                   V                      |
        >--+---------------------+--USING----config-keyword value-+----->
        '-FOR--database-alias-'
        .-IMMEDIATE-.
        >--+-----------+-----------------------------------------------><
        '-DEFERRED--'

比方说,如果要查询管理服务器参数,可使用 db2 get admin cfg 命令。要获得数据库 SAMPLE 的 db 配置,则可以使用 db2 get db cfg for SAMPLE 命令。

因为 IBM 也在致力于 DB2 UDB 产品的自动化研究,DB2 UDB Express 通过 DB2 Control Center 提供了自动化特性。使用向导(如 Create Database with AutomationDesign AdvisorConfiguration AdvisorConfigure Automatic Maintenance 等)是自动化常见管理任务所采用的步骤,这些管理任务包括备份、配置和数据库对象自动维护等。比如,管理员可使用 Configuration Advisor 配置数据库。这一特性就避免了管理员费尽心思地去寻找最适合数据库的配置参数。Configuration Advisor 能够建议最适用的配置参数。为了获得最优的数据库性能,建议管理员尽量使用该特性。


图形用户界面 (GUI)

GUI 管理不可避免将成为很多管理员的首选。GUI 不仅能够快捷方便地执行某些任务,而且可以在忘掉了命令语法(或者如果根本没有学习过这种命令)的时候提供帮助。通常,易用性是推动用户使用 GUI 管理工具的主要因素。

MySQL 提供的两种主要 GUI 是 MySQL Administration 和 Query Browser。那些原来管理 MySQL 的管理员并不是非常喜欢 GUI 管理。命令行通常仍然是他们的最爱。目前最新的 MySQL Administrator 是 1.1.6 版。图 17 中显示了 MySQL 的登陆页面:

图 17. MySQL Admin —— 登录
MySQL Admin —— 登录

登录后就可以在 GUI Administrator 中执行下列任务(只是一部分):

  • 服务控制 —— 启动和停止服务
  • 启动参数 —— myISAM 和 InnoDB 的参数、缓冲区和缓存、日志文件、安全和网络设置
  • User Admin —— 为用户和组分配权限,口令管理
  • Health —— 内存和连接的健康性检查
  • 备份和恢复
图 18. MySQL Admin —— 任务
MySQL Admin —— 任务

也可使用 WAMP(目前为 1.6.0 版)提供的 phpMyAdmin。

DB2 标志

关于 DB2 Express GUI,有很多方面值得一说。所有的管理任务都可使用该 GUI 完成,其中包括一般管理、健康检查和设置等,如 图 19 所示:

图 19. DB2 Express GUI 管理 —— 不同的方面
DB2 Express GUI 管理 —— 不同的方面

在所有的管理 GUI 工具中,您可能会发现 DB2 Control Center 是最常用的。可以通过单击 Windows 桌面上右下角托盘上的绿色硬盘启动 DB2 Control Center:

图 20. DB2 Express GUI Administration - Control Center
DB2 Express GUI Administration - Control Centre

DB2 Express Control Center 是与上下文有关的。右击一个项目会根据上下文产生不同的下拉菜单。比如,右击某个数据库会看到下列任务选项:

图 21. DB2 Express Control Center —— 与数据库有关的任务列表
DB2 Express Control Centre —— 和数据库有关的任务列表

DB2 Control Center 的一个优点是可使用 SHOW COMMAND 按钮查看对该任务等效的命令。有时候可以选择将命令保存到脚本中,让它在指定的时候运行。事实上,很多有用的特性这里没有提到,其中包括 Design Advisor 和 Configuration Advisor。这些特性将在后面的文章中介绍。


命令行处理程序

MySQL 提供了命令行控制台 (mysql.exe)。可以使用这个控制台执行管理任务。

图 22. MySQL 命令提示符
MySQL 命令提示符

DB2 标志

DB2 Express 提供了与 MySQL 类似的控制台。启动该控制台的一种方法是 All Programs -> IBM DB2 -> Command line tools -> Command Windows

所有管理任务都可以在这个控制台中执行。

图 23. DB2 Express 命令提示符
DB2 Express 命令提示符

SQL 比较

必须承认,并非所有的 SQL 语句都能够真正从一个数据库移植到另一个数据库。对于将 SQL 从 MySQL 迁移到 DB2 Express 而言也是如此。本文将通过下面几个方面说明 SQL 语句的差别。这些只是为了缓解两种系统之间的区别、避免手足无措而进行的小小尝试。此外要注意的是,并不是 DB2 Express 支持的所有数据库特性目前都获得了 MySQL 的支持。比如,外键约束能力只能在为 MySQL 5.1 提供以下支持的情况下用于 InnoDN,如下所示:

  • 适用于除 InnoDB 之外的所有表类型的外键
  • MyISAM 表的热备份
  • 重命名数据库
  • 列级约束

我们从以下角度看一看两者的异同:

  • Select 语句

    标准 SQL 支持 DISTINCT、GROUP BY、ORDER BYHAVING 这些关键字。MySQL 和 DB2 Express 都在这一点上提供了很好的支持。但是为了限制返回的结果集,MySQL 使用了关键字 LIMIT,而 DB2 Express 使用 FETCH FIRST n ROWS 来限制返回的结果集。如 图 24 中显示的示例 fetch:

    图 24. 在 DB2 Express 中使用 Fetch n Rows
    在 DB2 Express 中使用 Fetch n Rows

    MySQL 和 DB2 Express 都支持在 SQL 语句中使用 CASE 表达式进行条件检查。例如,可以指定符合特定条件的查询结果。下面的示例将根据收入对雇员进行分类:

    清单 7. Set Transaction 的语法
    Select empno, firstnme, lastname, 
       case
         when integer (salary) > 40000 then 'High'
         when integer (salary) > 30000 and integer (salary) < 40000 then 'Medium'
         else 'Low'
        end
    from employee

    此外,DB2 Express 还支持嵌套表表达式。嵌套表可以看成是在一个 SQL 语句中定义和使用的局部临时表。

    MySQL 中的单值子查询 (single value subquery) 等同于 DB2 Express 中的标量全选择 (scalar full select)。

  • 连接 —— 下表总结了 MySQL 和 DB2 Express 中的连接特性:
    表 5. 连接类型
    连接类型MySQLDB2 Express说明
    内连接内连接表示存在于连接表中的行。传统上两者都对这种连接使用逗号。它是指定表的笛卡尔积。但在 MySQL 中也称为叉积。DB2 Express 不使用关键字 cross
    交叉连接与内连接相同。
    左[外]连接左连接或左外连接表示匹配值和只出现在左表中的的值。比如在 MySQL 中,如果需要从 tableA 中选择所有不在 tableB 中的行,则使用的 SQL 语句是: select tableA.* from tableA left join tableB on tableA.id=tableB.id where tableB.id is null
    右[外]连接与左连接正好相反。表示连接表中出现的匹配值和那些仅在右表中出现的匹配值。
    全[外]连接×全外连接表示连接表中出现的匹配值和那些仅在左表或右表中的某一个表中出现的匹配值。其使用具有惟一性。
    直接连接×MySQL 中的 Straight join 等同于 join,只不过左表总是先于右表读取。虽然 DB2 Express 中没有使用这个关键字,但在 DB2 Express 可以完成同样的目标。
    自然连接×MySQL 中的自然连接 相当于内连接。虽然 DB2 Express 中没有使用这个关键字,但在 DB2 Express 可以完成同样的目标。

    可使用 GUI SQL Assist 指定连接类型。下面的例子说明如何使用 SQL Assist 设置连接选项。

    图 25. 使用 SQL Assist 建立 DB2 连接
    使用 SQL Assist 建立 DB2 连接

授权和权限

MySQL 中有两种级别的权限 —— 管理和用户。所有权限都可分别使用 GRANT 和 REVOKE 语句授予和收回。可以授予用户 create、select、update、delete、insert、execute、index 等权限,也可授予 alter、drop 和 shutdown 等系统权限。(请参阅 MySQL 提供的权限。)根用户在默认情况下具有下列权限:

图 26. MySQL 中的权限
MySQL 中的权限

DB2 标志

DB2 Express 同时提供了授权(authorization)和权限(privileges)。授权是一组预定义的更高的管理权限,可以授予执行一般任务的用户或用户组,比如连接数据库、创建、撤销、备份和恢复数据库,而权限则包括用户权限和系统权限,通常用于对象操作。新安装的 DB2 Express 提供下列授权级别:

虽然 SYSADM 具有最高的权限,但用户执行备份和恢复这类任务通常只需要 SYSMAINT 授权。因此,充分了解授权对为用户分配适当的权限非常重要。了解发出 get authorizations 命令需要什么权限,该命令用于查询系统编目表 SYSCAT.DBAUTH。图 27 显示了使用 get authorizations 命令的结果:

图 27. DB2 Express —— 当前用户的授权
DB2 Express —— 当前用户的授权

DB2 Express 权限和 MySQL 非常类似。权限(包括用户和系统权限)可使用 GRANT 或 REVOKE 命令授予和收回。有三种类型的权限:

  • 控制权限 —— 该权限通常保留给对象的创建者。这是所有者权限。比如,如果用户 A 创建了表 B,用户 A 就被自动授予表 B 的控制 权限。
  • 一般权限 —— 该权限允许执行特定的任务。可通过明确或暗中授予该权限来对数据库对象执行 SELECT、UPDATE、DELETE 等任务。
  • 暗含权限 —— 在将更高的权限授予用户时授予该权限。比如当用户执行一个包时,虽然没有明确授权,但为了使包能够成功执行,应立即自动授予隐含权限。

图 28 显示了一些可授予用户的权限。

图 28. DB2 Express —— 使用 Control Center 管理权限
DB2 Express —— 使用 Control Center 管理权限

注意,也可用 CLP 执行 GRANT 和 REVOKE 语句。


锁定机制

MySQL InnoDB 提供了事务安全的语句,支持标准 SQL-1992 中所述的四种隔离级别。为了达到事务安全,MySQL 实现了 ACID 的要求。默认情况下,MySQL 对所有事务使用 Repeatable Read 隔离级别。但可使用 Set Transaction 语句更改后续会话的隔离级别。也可在 SQL 语句中使用 SESSION 或 GLOBAL。SESSION 表示下一个链接将使用特定的隔离设置,而 GLOBAL 表示以后的所有连接都是某个隔离设置。Set Transaction 语法如 清单 8 中所示:

清单 8. Set Transaction 的语法
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL
    {READ UNCOMMITTED | READ COMMITTED
    | REPEATABLE READ | SERIALIZABLE}

针对受支持的四种隔离级别,表 6 列出了出现幻像读、脏读或不可重复读的可能性(从高到低)。

  • √ —— 会发生
  • × —— 不会发生
表 6. 隔离级别和读特征 —— 会或者不会
隔离级别幻像读不可重复读脏读
可序列化×××
可重复读××
读取提交的结果×
读取未提交的结果

DB2 标志

DB2 Express 提供了类似的隔离级别。按照从强到弱的次序分,DB2 Express 支持的四种隔离级别依次为:

  • 可重复读 —— RR
  • 读稳定 —— RS
  • 游标可靠性 —— CS
  • 未提交读 —— UR

每种隔离级别都提供了特定的事务安全,隔离级别的选择是根据更严格的隔离级别对性能的影响进行的一种权衡。比如,读取只读的查找表不需要可重复读级别,未提交读级别就足够了。嵌入式 SQL 语句的默认隔离级别为游标可靠性 (CS)。更改隔离级别的方法有两种(视情况而定):

  • 在标准 DML 语句中可使用关键字 With 来更改级别。比如 select * from employee with UR
  • 如果使用命令行,那么可以输入 change isolation level 命令。
  • 如果使用 DB2 调用级接口,那么可在 db2cli.ini 文件中指定隔离级别。

表 7 列出了 DB2 的隔离级别和读特征,按照从强到弱的顺序依次为:

  • √ —— 会发生
  • × —— 不会发生
表 7. 隔离级别和读特征 —— 会或者不会
隔离级别幻像读不可重复读脏读
可重复读(RR)×××
读稳定(RS)××
游标可靠性(CS)×
未提交读(UR)

DB2 Express 支持表空间和表的显式锁定。如果 DB2 发现锁定某一个表比锁定该表中多个行的代价要小,那么 DB2 Express 会提供锁扩展。Locklist 和 Maxlocks 这些参数会影响锁扩展的方式。


PHP 开发支持

随着 PHP 在 Web 开发平台上的应用越来越广泛,开发人员常常希望获得能够快速安装且功能强大的开发环境,以避免争议。MySQL 在分发包中提供了一种快速安装工具 WAMP(目前版本为 1.6.1)。IBM 和 Zend Core 共同提供了类似的 PHP 开发组合。

DB2 标志

Zend Core for IBM 是一种无缝集成、开箱即用、易于安装并且支持 PHP 的开发和生产环境。该产品包括与 IBM DB2 Universal Database 和 IBM Cloudscape® 的紧密集成、对 XML 和 Web 服务的本机支持、支持日渐广泛被采用的 Service Oriented Architectures (SOA)。Zend Core for IBM 为数据库驱动的应用程序提供了快速开发和部署的基础。通过提供一致的 API,它提供了从易于使用的轻量级 Cloudscape 数据库到战略数据库 DB2 的升级路径。有关的更多信息,请参阅 Zend Core for IBM 页面


LOB、视频/音频管理

虽然目前数据管理领域中呼声最高的是企业内容管理(ECM)领域,但 MySQL 在很大程度上是一种结构化数据管理产品。ECM 用户必须设法找到支持 MySQL 作为后端系统的 ECM 处理程序。MySQL 使用 BLOB 数据类型系列处理非结构化数据。

DB2 标志

另一方面,IBM 提供了 DB2 Content Manager 作为结构化和非结构化数据的内容资料库。为了满足目前的随需应变业务要求 —— 80% 的数据都是非结构化形式的,人们认为企业内容管理(ECM)在企业环境中是不可或缺的。如果对企业内容¹管理(ECM)有正确的理解,那么您可能认为从头建立一个企业内容管理系统很简单。我们来看看一家典型企业中的各种数字内容、遇到的困难以及 IBM DB2 Content Manager 提供的丰富功能如何满足这些需要。

内容可能指:

  • 发票、结算表、报告
  • 传真和扫描的书面内容
  • SCM、CRM 和 ERP 数据
  • 电子邮件和桌面文档
  • 音频、视频和图片
  • Web 内容

客户经常面临的问题是数据使用不同的格式,存在于不同的位置。没有集中的资料库,用户就无法有效地共享数据,更不用说通过协作确保畅通的业务连续性了。无法使用业务过程工作流,用户就很难创建或者搜索 Web 内容。这是多数企业都会遇到的困境。

构建时要考虑可伸缩性,DB2 Content Manager 采用了一个三层的体系结构,其中包括 Library Server 中的几种索引和 Resource Manager 中的对象存储。灵活的用户授权许可允许为适应业务的需要部署任意多个 Resource Managers。比方说,纽约的总部可使用两个 Resource Manager,而西雅图、亚特兰大和范库弗各有一个 Resource Manager。为降低网络通信量,可以提供局域网缓冲。IBM DB2 Content Manager 支持层次化存储管理,可以按照适当的周期定期将对象迁移到外部设备上。比方说,可以在 DASD 上保存六个月后将对象迁移到外部磁盘上,保存三年后再迁移到磁带上保存七年。

IBM DB2 Content Manager 还提供了身份验证、权限和访问控制,保证用户和用户组操作的安全。从文档级动作,创建、读取、更新、删除、打印的细粒度权限和注释修改,到 Resource Manager 集合访问控制,IBM DB2 Content Manager 都可以保证正确实现访问和使用。用户可打开事件日志来进一步审计内容系统。

从内容的创建到管理和分发,IBM 生命期管理主要依赖于 IBM DB2 Content Manager 提供的丰富特性。下面是 IBM DB2 Content Manager 的一些特性:

  • 即时扫描
  • 成批装载不同格式的内容
  • 通过 Windows 客户机、web 客户机和 portlet 提供了本机内容查看器
  • 检入/检出
  • 过程工作流(可用 GUI 工作流创建程序建立)
  • 版本化
  • 注释
  • LDAP 集成
  • 事件日志(用户活动和管理活动)
  • 与 SAP & Siebel 的集成
  • 与记录管理(如 IBM DB2 Record Management)的集成,以确保符合规章
  • 与客户现有业务线的集成
  • 包括在应用程序内部或者其他 Web 服务中使用的 Web 服务接口
  • XML 模式映射

如果进行内部内容系统开发,IBM DB2 Express 会为此提供 LOB/CLOB 数据类型。


数据类型

MySQL 和 DB2 Express 具有类似的数据类型。要注意的是,DB2 Expess 同时支持内建数据类型和用户定义数据类型(前面已经提到)。关于 DB2 Express 数据类型如何组织的概述,请参见 图 29

图 29. DB2 Express —— 数据类型层次结构
DB2 Express —— 数据类型层次结构

在进行了上面的查看之后,现在让我们将 MySQL 数据类型映射到 DB2 Express 中的等效类型(或者最匹配的类型),然后比较以下三个主要种类。

  • 数字
  • 字符串
  • 时间和日期

关于数据库对象的异同,请参阅 表 8

关于 DB2 SQL Limits 的完整说明,请参阅 Information Center。


备份和恢复

备份和恢复是在介质失效的情况下确保业务连续性的基本要求。MySQL 备份和恢复选项在很大程度上依赖于底层的表类型。比如 MyISAM 和 InnoDB 表类型都允许进行数据库冷备份。不过从 MySQL 4.0 版开始,还以商业附件的形式提供了 InnoDB 热备份(InnoDB 是 Oracle Corp. 的产品),但 MySQL 5.1 仍然不支持 MyISAM 的热备份。

DB2 标志

DB2 Express 从一开始就提供了冷备份和热备份。所谓冷备份,就是当用户处于离线状态时,不访问正在备份的数据库。这就意味着,使用冷备份时,如果遇到介质失效的情况,上一次备份以后的数据将丢失。而热备份允许事务继续写入日志,无需关闭正在备份的数据库。通过适当的规划,热备份可以确保介质失效的情况下不损失数据。24x7 环境需要这种备份。

DB2 Express 有两种记录法,即循环记录法和存档记录法。循环记录法(循环写入,写满后覆盖)可以进行冷备份,档案记录法(存档已经提交的内容)支持热备份。

选择冷备份还是热备份取决于在 db config 中设置的参数:

  • LOGFILSIZ —— 日志文件大小。总数为 4KB(默认 250)
  • LOGPRIMARY —— 主日志个数(模认为 3)
  • LOGSECOND —— 主日志填满时可以分配的次级日志个数。
  • NEWLOGPATH —— 更改后续日志文件存储的位置。只在数据库重新激活时生效。
  • MIRRORLOGPATH —— 写入日志的后备路径,以免单点失效。
  • OVERFLOWLOGPATH —— 指定前滚操作中的日志位置,以便在多个位置访问日志。

冷备份很简单。首先关闭数据库,然后发出备份命令,如 db2 backup database <db_name> to c:\backup

热备份同样简单。首先打开日志保留参数,然后发出命令,如 db2 backup database online <db_name> to c:\backup

冷备份和热备份都可以通过在 DB2 Express Control Center 中点击几下鼠标来完成。另外,DB2 Express 还提供了增量备份和 delta 备份。

  • 增量备份 —— 备份最近一次成功的完全备份以后的所有更改。
  • Delta 备份 —— 备份上一次成功的完全备份、增量备份或 delta 备份以后的所有更改

关于备份和恢复问题,将在以后的文章进行更详细的讨论。


结束语

本文考察了 MySQL 和 DB2 Express 数据库服务器的某些方面,并从安装、系统结构(如内存和容器)、备份和恢复方法等方面进行了简单的比较。前面已经提到,本文的目的是让现在的 MySQL 数据库管理员对 DB2 Express 有一般性的了解。


免责声明

我们尽最大努力撰写本文。如果发现不当之处,请与作者联系。


致谢

特别感谢 Rahul Kitchlu 对本文的审阅。

参考资料

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=107264
ArticleTitle=利用 MySQL 技能学习 DB2 Express: DB2 与 MySQL 的管理任务和基本任务
publish-date=04032006