利用 MySQL 技能学习 DB2 Express,第 4 部分: DB2 与 MySQL 数据转移

开始使用 Windows 平台上的 DB2

如果您是一位要同时管理 MySQL 和 IBM® DB2® Express-C 的 DBA,就需要理解这两种数据库服务器的功能差异。本文是系列文章中的第 4 篇,这个系列帮助具有 MySQL 背景的 DBA 学习如何管理 DB2 Express。在本文中,学习在这两种产品中数据转移技术有何差异。讨论的技术包括 Import、Export、Load 以及专门用于数据转移的其他实用程序。

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

Allan Tham 为业务合作伙伴提供 DB2 Content Manager 的售前技术支持,帮助业务伙伴解决各种各样的技术问题。Allan 获得了管理方面的 DB2 Content Management 认证。加入 IBM 之前,Allan 在终端用户环境中工作,他在那里作了三年的 Oracle DBA。



2007 年 2 月 01 日

简介和背景知识

在 2006 年 7 月 28 日,IBM 发布了下一个 DB2 for Linux®, UNIX®, and Windows® 版本,这是一种为满足当今复杂的业务需求而设计的混合型数据服务器。这个版本提供了第一个支持本机 XML 存储的工业强度的数据服务器。压缩、安全和自治功能等其他特性也得到了改进。

developerWorks DB2 for Linux, UNIX, and Windows 信息管理参考资料页面 上可以找到对 DB2 Express-C 9 支持的特性的概述和深入讨论。这些特性包括 PureXML™,这个特性确保企业能够以本机方式利用 XML 功能。有了 DB2 Express-C 9 PureXML 特性,就不再需要将文档存储在大对象(LOB)中或者将它们分解成对象。尽管 IBM DB2 Express-C 非常适合中小型企业的需求,但是它没有提供更高版本中的所有可用特性。DB2 Express-C 不包含其他 DB2 9 版本中的以下特性:

  • Replication(但是支持 Homogeneous Replication)
  • 数据库分区特性
  • Connection Concentrator
  • DB2 Geodetic Extender
  • Query Patroller
  • Net Search Extender
  • Compression
  • Label Base Access Control - LBAC

另外,要记住 IBM DB2 Express-C 9 是 “免费开发”、“免费部署” 和 “免费发布” 的。

从 DB2 Express-C 8 到 DB2 Express-C 9,有许多改进,这些改进超出了本文的范围。但是,数据转移的特性和功能大体上保持不变。本文概述 IBM DB2 Express-C 9.1 的数据转移特性。本文主要关注它们的功能,同时提及 MySQL 的数据转移功能。如果您熟悉 MySQL 的数据转移,那么可以跳过 “MySQL 数据转移” 一节,直接学习 IBM DB2 Express-C 9.1 的数据转移。


讨论的主题 - 概述

本文首先介绍 MySQL 中的数据转移。接下来,本文讨论 IBM DB2 Express-C 的数据转移,这可以分为以下主题。

  • 导入 - Import 实用程序和 DB2 Load
  • 导出 - Export 实用程序
  • 其他可用工具

MySQL 数据转移

MySQL 提供的用于数据转移的实用程序主要有两个。它们是 mysqldumpmysqlhotcopy。尽管这两个实用程序主要用来进行备份和恢复,但是它们可以用来建立现有表或整个数据库的拷贝,因此能够将数据从一个数据库(常常是中小规模的数据库)转移到同一服务器或其他服务器中的另一个数据库中。选择 mysqldump 还是 mysqlhotcopy 取决于要复制的数据库的规模、设置的成本、锁机制、恢复选项、表的类型等等。表 1 对比了 MySQL 提供的这两个实用程序。

尽管有许多建立数据库或部分数据库的拷贝的方法,比如操作系统级复制、select ... into outfile、mysqlsnapshot 以及 InnoDB 的热备份,但是本文只关注 mysqldumpmysqlhotcopy。各种方法之间的比较及其优缺点超出了本文的范围。

例如,对于 mysqldump,要想建立整个数据库的拷贝,最常见的方法可能是发出以下命令:

清单 1. 使用 mysqldump 创建完整的数据库拷贝
mysqldump --opt db_name > backup-file.sql

导入它的方法是发出以下命令:

清单 2. 使用 mysqldump 导入完整的数据库
mysql db_name < backup-file.sql

清单 3 中列出了 mysqldump 支持的一些重要标志。发出 mysqldump -? 命令可以获得完整的列表。

清单 3. mysqldump 选项
  -A, --all-databases Dump all the databases. This will be same as --databases
                      with all databases selected.
  --add-drop-database Add a 'DROP DATABASE' before each create.
  --add-drop-table    Add a 'drop table' before each create.
  --add-locks         Add locks around insert statements.
  --allow-keywords    Allow creation of column names that are keywords.
  --character-sets-dir=name
                      Directory where character sets are.
  -c, --complete-insert
                      Use complete insert statements.
  -C, --compress      Use compression in server/client protocol.
  --create-options    Include all MySQL specific create options.
  -B, --databases     To dump several databases. Note the difference in usage;
                      In this case no tables are given. All name arguments are
                      regarded as databasenames. 'USE db_name;' will be
                      included in the output.
                      Set the default character set.
  --delayed-insert    Insert rows with INSERT DELAYED;
  --delete-master-logs
                      Delete logs on master after backup. This automatically
                      enables --master-data.
  -e, --extended-insert
                      Allows utilization of the new, much faster INSERT syntax.
  --fields-terminated-by=name
                      Fields in the textfile are terminated by ...
  --fields-enclosed-by=name
                      Fields in the importfile are enclosed by ...
  --fields-optionally-enclosed-by=name
                      Fields in the i.file are opt. enclosed by ...
  --fields-escaped-by=name
                      Fields in the i.file are escaped by ...
  --order-by-primary  Sorts each table's rows by primary key, or first unique
                     key, if such a key exists.  Useful when dumping a MyISAM
                     table to be loaded into an InnoDB table, but will make
                     the dump itself take considerably longer.
  --single-transaction
                     Creates a consistent snapshot by dumping all tables in a
                     single transaction. Works ONLY for tables stored in
                     storage engines which support multiversioning (currently
                     only InnoDB does); the dump is NOT guaranteed to be
                     consistent for other storage engines. Option
                     automatically turns off --lock-tables.
   -T, --tab=name      Creates tab separated textfile for each table to given
                     path. (creates .sql and .txt files). NOTE: This only
                     works if mysqldump is run on the same machine as the
                     mysqld daemon.
   --tables            Overrides option --databases (-B).
   --triggers          Dump triggers for each dumped table
   -X, --xml           Dump a database as well formed XML.

尽管 mysqldump 适合对中小规模的表和数据库进行备份,但是 mysqlhotcopy 的能力更强。不过要注意,mysqlhotcopy 不具有 mysqldump 那么大的灵活性。要记住一点,它只能在数据库目录所在的机器上运行。

表 1. mysqldump 和 mysqlhotcopy 的对比
特性/功能mysqldumpmysqlhotcopy注释
复制数据库的子集YesYes它们都允许复制数据库的子集
复制完整的数据库YesYes它们都允许复制完整的数据库
复制多个数据库YesYesmysqldump 使用选项 --all-databases 同时转储多个数据库
mysqlhotcopy 使用标志 --regexp 匹配要复制的数据库
远程支持YesYes它们都支持远程转储数据
文本文件格式YesNoMysqldump 采用文本文件格式
压缩支持YesNoMysqldump 支持压缩
正则表达式支持NoYesmysqlhotcopy--regexp 标志允许使用正则表达式来复制名称与给定的正则表达式匹配的所有数据库
内置YesYes这两个实用程序都是免费的
DDL 包含YesYesMysqldump 允许这个标志
转储演习NoYesmysqlhotcopy 允许使用 --dryrun 标志进行演习而不实际进行数据转储
在转储中包含/排除索引YesYes它们都允许包含/排除索引。Mysqldump 使用 --disable-keys 标志抑制 MyISAM 表的索引创建。而 Mysqlhotcopy 使用 --noindices 标志
在转储时进行锁定NoYesMysqldump 使用 --add-locks 标志,在每个表转储前后加上 lock tablesunlock tables 语句。Mysqlhotcopy 使用 lock tablesflush tables
支持所有引擎YesNoMysqldump 支持所有引擎,而 mysqlhotcopy 只支持 MyISAM 和 ARCHIVE

本文的其余部分讨论 IBM DB2 Express-C 数据转移是如何运作的。


DB2 Import

什么是 DB2 Import?MySQL 的 mysqldumpmysqlhotcopy 有双重用途 —— 备份和恢复以及数据转移,但是 DB2 Import 只有一种用途。DB2 Import(db2import)是 IBM DB2 Express-C 9.1(以及所有其他 DB2 数据服务器版本)提供的一种实用程序,用来将数据从各种格式的文件导入表或可更新视图中。与 MySQL 不同,DB2 使用 db2backupdb2recover 提供备份和恢复机制。文章 “DB2 versus MySQL backup and recovery”(developerworks,2006 年 6 月)概述了 MySQL 和 IBM DB2 Express-C 9.1 的备份和恢复机制。

DB2 Import 有几个关键的特征。为了使用 DB2 Import,必须获得正确的权力和特权,否则就无法顺利地执行导入。下表列出了将文件导入数据库所需的权力和特权:

表 2. DB2 Import 所需的权力和特权
操作权力特权注释
创建新的表SYDADM/DBADMCREATETABDB2 Import 允许在导入期间动态地创建新表。这只能应用于表
在现有的表中插入数据SYDADM/DBADMCONTROL、INSERT 和 SELECT可应用于表和视图
替换现有表中的数据SYDADM/DBADMCONTROL/(INSERT、SELECT、UPDATE 和 DELETE)也应用于视图
在现有的表中追加数据SYDADM/DBADMSELECT 和 INSERT 特权也应用于视图

与大多数管理任务相似,可以从命令行处理程序(CLP)和 DB2 Control Center 运行 DB2 Import。稍后将更详细地讨论导入选项以及它们的运作方式。

DB2 Import 提供了导入来自外部应用程序的文件的灵活方法,包括其他来源,比如市场上的其他数据库。IBM DB2 Express-C 还具有 XML 本机存储功能(而不仅仅是支持 XML)以及相应的导入支持。在 IBM DB2 Express-C 中,可以将 XML 文档导入数据库中。DB2 以本机方式将 XML 按照经过解析的层次化格式存储在 XQuery Data Model(XDM)中。在导入期间,可以检验要导入的 XML 文档。如果启用了检验,在 XML 导入期间对于无效数据会报告错误。

通过在命令行处理程序中发出 db2 ? import 命令,可以获得 DB2 Import 的语法:

清单 4. DB2 Import 语法
 IMPORT FROM filename OF {IXF | ASC | DEL | WSF}
[LOBS FROM lob-path [ {,lob-path} ... ] ]
[XML FROM xml-path [ {,xml-path} ... ] ][MODIFIED BY filetype-mod ...]
[METHOD {L ( col-start col-end [ {,col-start col-end} ... ] )
[NULL INDICATORS (col-position [ {,col-position} ... ] )] |
N ( col-name [ {,col-name} ... ] ) |
P ( col-position  [ {,col-position} ... ] )}]
[XMLPARSE {STRIP | PRESERVE} WHITESPACE]
[XMLVALIDATE USING {XDS [DEFAULT schema-sqlid]
[IGNORE (schema-sqlid [ {,schema-sqlid} ... ])]
[MAP ((schema-sqlid,schema-sqlid) [ {(schema-sqlid,schema-sqlid)} ... ])] |
SCHEMA schema-sqlid | SCHEMALOCATION HINTS }]
[ALLOW {NO | WRITE} ACCESS]
[COMMITCOUNT {n | AUTOMATIC}] [{RESTARTCOUNT | SKIPCOUNT} n]
[ROWCOUNT n] [WARNINGCOUNT n] [NOTIMEOUT] [MESSAGES message-file]
{{INSERT | INSERT_UPDATE | REPLACE | REPLACE_CREATE}
INTO {table-name [( insert-column , ... )] | hierarchy-description}
| CREATE INTO {table-name [( insert-column , ... )] |
hierarchy-description {AS ROOT TABLE | UNDER sub-table-name}
[IN tablespace-name [INDEX IN tablespace-name] [LONG IN tablespace-name]]}
  filetype-mod:
    COMPOUND=x, INDEXSCHEMA=schema, FORCEIN, INDEXIXF, IMPLIEDDECIMAL,
    NOCHECKLENGTHS, NOEOFCHAR, NULLINDCHAR, RECLEN=x, STRIPTBLANKS,
    STRIPTNULLS, NO_TYPE_ID, NODOUBLEDEL, LOBSINFILE, USEDEFAULTS,
    CHARDELx, COLDELx, DLDELx, DECPLUSBLANK, DECPTx, DATESISO,
    DELPRIORITYCHAR, IDENTITYMISSING, IDENTITYIGNORE,
    GENERATEDMISSING, GENERATEDIGNORE, DATEFORMAT=x, TIMEFORMAT=x,
    TIMESTAMPFORMAT=x, KEEPBLANKS, CODEPAGE=x, NOROWWARNINGS,
    NOCHARDEL, USEGRAPHICCODEPAGE
  hierarchy-description:
    {ALL TABLES | (sub-table-name [(insert-column, ...)], ...)} [IN]
    HIERARCHY {STARTING sub-table-name | (sub-table-name, ...)}

除了可用选项之外,还要注意 DB2 Import 支持四种文件格式:

  • DEL:分界的 ASCII,用于在许多数据库管理程序和文件管理程序之间进行数据交换。这种常用的数据存储方法使用特殊的分界符分隔列值。默认的分界符是逗号。
  • ASC:非分界的 ASCII,用于导入或装载来自其他应用程序的数据,这些应用程序可以创建包含对齐的列数据的平面文本文件。
  • PC/IXF:Integrated Exchange Format(IXF)的 PC 版本,这是在数据库管理程序中进行数据交换的首选方法。PC/IXF 是数据库表的结构化描述,其中包含内部表的外部表示。
  • WSF:工作表单格式,用于与 Lotus 1-2-3 和 Symphony 等产品进行数据交换。

现在,我们来看几个使用命令 CLP 的 DB2 Import 示例。然后,看看如何使用 DB2 Control Center 执行相似的任务。为了尝试进行导入,可以 下载 IBM DB2 Express-C 9。安装它之后,运行命令 db2 db2sampl -sql -xml -schema 'db2admin'。(一定要启用数据库的 UTF-8 功能,否则会收到 SQL 1239N 错误。)

本文包含的导入示例是:

  • 导入 XML 数据(带检验或不带检验)
  • 用插入模式导入一个用管道符(|)分界的文件

为了导入 XML 文档,常常需要确保 XML 文档是良好的。未经检验的格式不良的 XML 文档会在导入期间导致问题。一种好做法是,总是注册模式并在导入期间选择检验所针对的正确模式。本文演示在进行检验和不进行检验的情况下如何进行导入。导入 XML 文档很简单。采用的步骤如下:

  1. 确保已经创建了包含 XML 列的表。
  2. 使用 清单 5 中的命令导入 XML 文档而不进行检验。注意,在任何导入中包含消息总是明智的。如果发生任何故障,就可以利用消息文件进行调试。这是快速地纠正问题的简便方法。
    清单 5. 使用命令 CLP 导入 XML 文档
    IMPORT FROM "D:\XMLPoT\labdoc\scripts\data\import.del" 
    OF DEL XML FROM "D:\XMLPoT\labdoc\scripts\data" METHOD P (1) 
          MESSAGES "D:\db2in\xmlemp1.log" 
             INSERT INTO DB2ADMIN.XMLEMP (EMP);

    其中的 D:\XMLPoT\labdoc\scripts\data\import.del 包含指向实际文档的行指针。

    import.del 示例文件的内容如下:
    清单 6. import.del 示例文件的内容
          "<XDS FIL='emp.001.xml' />"
          "<XDS FIL='emp.002.xml' />"
          "<XDS FIL='emp.003.xml' />"
          "<XDS FIL='emp.004.xml' />"
          "<XDS FIL='emp.005.xml' />"
          "<XDS FIL='emp.006.xml' />"
          "<XDS FIL='emp.007.xml' />"

    在成功的装载之后,应该会在消息文件中看到下面这样的消息:
    清单 7. 成功的导入
    SQL3109N  The utility is beginning to load data from file 
    "D:\XMLPoT\labdoc\scripts\data\import.del".
    
    SQL3110N  The utility has completed processing.  
    "42" rows were read from the input file.
    
    SQL3221W  ...Begin COMMIT WORK. Input Record Count = "42".
    
    SQL3222W  ...COMMIT of any database changes was successful.
    
    SQL3149N  "42" rows were processed from the input file.  
    "42" rows were successfully inserted into the table. 
    "0" rows were rejected.
  3. 在大多数情况下,数据是从外部系统获得的,所以最好对 XML 导入进行检验。为此,使用 db2 register xmlschema 命令将 XML 模式注册到 XML 模式存储库(XSR)中,并使用 db2 complete xmlschema 完成这个过程。可以在系统编目表 SYSCAT.XSROBJECTS 中看到已经注册的模式的列表。注册模式之后,就可以在导入 XML 文档的命令中包含 XMLVALIDATE 关键字。
    清单 8. 使用命令 CLP 导入 XML 文档 —— 进行检验
    IMPORT FROM "D:\XMLPoT\labdoc\scripts\data\import.del" 
    OF DEL XML FROM "D:\XMLPoT\labdoc\scripts\data" 
          METHOD P (1) XMLVALIDATE USING SCHEMA DB2ADMIN.XMLEMP 
             MESSAGES "D:\db2in\xmlemp2.log" 
             INSERT INTO DB2ADMIN.XMLEMP (EMP);
  4. 进行检验会确保数据是有效的,任何不符合模式的数据都会在消息文件中记录错误消息。
    清单 9. 出现检验错误的 DB2 Import
    SQL3109N  The utility is beginning to load data from file 
    "D:\XMLPoT\labdoc\scripts\data\import.del".
    
    SQL3148W  A row from the input file was not inserted into the table.  
    SQLCODE "-16196" was returned.
    
    SQL16196N  XML document contains an element "deptno" that is 
    not correctly specified. Reason code = "37"  SQLSTATE=2200M
    
    SQL3185W  The previous error occurred while processing data 
    from row "42" of the input file.
    
    SQL3110N  The utility has completed processing.  
    "42" rows were read from the input file.
    
    SQL3221W  ...Begin COMMIT WORK. Input Record Count = "42".
    
    SQL3222W  ...COMMIT of any database changes was successful.
    
    SQL3149N  "42" rows were processed from the input file. 
     "41" rows were successfully inserted into the table.  
          "1" rows were rejected.
  5. 为了在 DB2 Control Center 中执行相似的任务(带检验的 XML 文档导入),只需执行几个步骤,这些步骤大都很直观,而且有在线帮助。为了调用 DB2 Import,启动 DB2 Control Center,找到目标表,右击并选择 Import,见 图 1
    图 1. 从 DB2 Control Center 调用 DB2 Import
    从 DB2 Control Center 调用 DB2 Import
  6. 指定导入文件、导入模式(INSERT、INSERT_UPDATE、REPLACE)和消息文件。消息会指出在导入期间什么出了错。
    图 2. DB2 Import - 导入文件、模式和消息文件
    从 DB2 Control Center 调用 DB2 Import
  7. 点击 DEL OPTIONS 找到 XML 模式检验复选框。打开它。点击 OPTIONS 选择检验所针对的模式。这是第二个选项,Validate all documents using a specific XML schema,这是最常用的 XML 检验方法。在这种情况下,选择 XMLEMP 并点击 OK
    图 3. DB2 Import - 选择 XML 检验
    选择 XML 检验
  8. 在这一步中,选择要导入的 XML 文档的位置。注意,DB2 Import 实用程序也支持导入 LOB 对象。还可以通过设置默认、忽略和缺失来控制标识列和生成的列。
    图 4. DB2 Import - 选择 XML 文档位置
    选择 XML 文档位置
  9. 最后,可以安排 XML 文档的导入立即执行或重复执行。
    图 5. DB2 Import - 导入的调度
    导入的调度

正如可以使用 DB2 Import 实用程序导入 XML 文档,可以以相同方式使用命令提示 CLP 导入分界的文件。例如,下面的命令将一个以管道符分界的文件导入表 employee:

清单 10. 导入以管道符分界的文件
IMPORT FROM "D:\db2out\employee.dat" OF DEL MODIFIED BY COLDEL| 
      METHOD P (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14) 
         MESSAGES "D:\db2out\employee2.log" 
         INSERT INTO DB2ADMIN.EMPLOYEE 
(EMPNO, FIRSTNME, MIDINIT, LASTNAME, WORKDEPT, PHONENO, HIREDATE, JOB, EDLEVEL, 
SEX, BIRTHDATE, SALARY, BONUS, COMM);

DB2 Import 实用程序支持两种表锁定模式 —— 离线模式和在线模式。在离线模式下(ALLOW NO ACCESS),不允许对正在导入的表进行访问。离线模式是默认模式,因为在导入开始时会获得一个排他锁。但是,在线模式允许用户在导入进行期间访问数据。这个模式允许以特定的间隔进行提交以避免死锁。LOB 对象可以像一般数据那样导入。对于在多个文件中单独存储的 LOB 文件,需要 LOBSINFILE 文件类型修饰符。DB2 Import 不但能够将数据导入表中,还可以导入层次结构、昵称或视图中。

因为支持各种文件格式,而且 DB2 Import 提供了很强的灵活性,所以有时候需要为这个实用程序提供很长的文件类型修饰符列表。完整的修饰符列表可以在 DB2 9.1 Data Movement Utilities Guide and Reference 上找到。常用的一些修饰符是 codepagedateformattimestampformatreclencoldel。尽管 DB2 Import 很灵活,但是它的速度比不上 DB2 Load。对于大型的表,DB2 Load 是更合适的选择。但是注意,尽管 DB2 Load 速度快,但是它不允许将数据装载进层次结构和昵称中。但是,DB2 Import 也有自己的限制。

完整的 IBM DB2 Express-C 导入限制包括:

  • 依赖表中外键引用的主键不能被替换;只允许追加。
  • 不允许将数据导入系统表或具有结构化类型列的表。
  • 不能将数据导入声明的临时表。
  • 不能通过导入实用程序创建视图;只能创建表。
  • 在从 PC/IXF 文件创建表时,不保留引用约束和外键定义。
  • 导入生成的语句的最大语句大小为 2MB。
  • 不能重新创建包含 XML 列的表。

最后,IBM DB2 Express-C 提供了 API 和示例代码,允许用户编写自己的导入。示例代码是在安装 IBM DB2 Express-C 时附带的。


DB2 Load

DB2 Load 是将大量数据从平面文件、磁带或命名管道装载进 DB2 表的另一种方法。但是,DB2 Load 实用程序不允许在装载期间动态地创建表。换句话说,表及其索引需要在装载前存在。

DB2 Load 有四个阶段:

  • 装载:在这个阶段,数据被写入表中;在将数据装载进表中之后,如果需要的话,还要收集索引键和表统计数据。按照 LOAD 命令中 SAVECOUNT 选项指定的时间间隔建立保存点(一致点)以确保恢复。生成消息,指出在保存点上已经成功地装载了多少个输入行。如果发生故障,可以重新启动装载操作;RESTART 选项会自动地从最近的成功的一致点重新启动装载操作,还可以使用 TERMINATE 选项回滚失败的装载操作。
  • 构建:这个阶段要建立索引。在构建阶段,根据在装载阶段收集的索引键生成索引。索引键在装载阶段进行排序,并收集索引统计数据(如果指定了 STATISTICS USE PROFILE 选项,而且配置文件指出要收集索引统计数据)。这些统计数据与通过 RUNSTATS 命令收集的数据相似。如果在构建阶段发生故障,RESTART 选项会自动地在适当的点上重新启动装载操作。
  • 删除:这个删除阶段会删除表中违反惟一键约束的行。通常,违反惟一键约束的行会记录在异常表中(如果指定了异常表的话),关于被拒绝的行的消息被写入 MESSAGE 选项指定的消息文件。为了确保装载过程成功完成,必须检查这些消息以解决任何问题。这常常要求将纠正后的行插入表中。不要尝试删除或修改装载实用程序创建的任何临时文件。一些临时文件对于删除阶段非常重要。与构建阶段相似,如果在删除阶段发生故障,RESTART 选项会自动地在适当的点上重新启动装载操作。
  • 索引复制:在这个阶段中,将索引数据从一个系统临时表空间复制到原来的表空间。只有在指定了 READ ACCESS 选项的装载操作期间,为索引创建指定了系统临时表空间的情况下,才会执行这个操作。

DB2 Load 支持四种格式:

  • ASC(非分界的 ASCII 格式)
  • DEL(分界的 ASCII 格式)
  • IXF(Integrated Exchange Format,PC 版本),这种文件可以是从同一个或另一个 DB2 表导出的
  • 用户定义的 CURSOR(一种针对 SELECT 或 VALUES 语句声明的游标)。这通常要求用户编写脚本。

与 DB2 Import 相似,DB2 Load 要求授予某些权力和特权。需要 SYSADMDBADM 权力,至少要有 LOAD 权力和相关的特权,见下表:

表 3. DB2 Load 所需的权力和特权
操作权力特权注释
INSERT、TERMINATE 和 RESTART 模式的 LoadLOADINSERTINSERT、TERMINATE 和 RESTART 模式的装载需要 INSERT 特权
REPLACE、TERMINATE 和 RESTART 模式的 LoadLOADINSERT 和 DELETEREPLACE、TERMINATE 和 RESTART 模式的装载需要 INSERT 和 DELETE 特权

可以通过命令行处理程序(CLP)、Control Center 中的 Load 向导或者应用程序编程接口(API)db2Load 调用装载实用程序。为了演示 DB2 Load 的功能,我们先使用 CLP。输入 db2 ? load 可以获得 DB2 Load 的完整命令语法。下面的 清单 11 给出了完整的 DB2 Load 语法。尽管它也可以用于分区的环境,但我们仍然主要关注单分区环境,因为 IBM DB2 Express-C 没有附带 Data Partitioning Feature(DPF)。

清单 11. DB2 Load 语法
      LOAD [CLIENT] FROM file/pipe/dev/cursor_name [ {,file/pipe/dev} ... ]
      OF {ASC | DEL | IXF | CURSOR}
      [LOBS FROM lob-path [ {,lob-path} ... ] ]
      [MODIFIED BY filetype-mod [ {filetype-mod} ... ] ]]
      [METHOD {L ( col-start col-end [ {,col-start col-end} ... ] )
                  [NULL INDICATORS (col-position [ {,col-position} ... ] )]
             | N ( col-name [ {,col-name} ... ] )
             | P ( col-position  [ {,col-position} ... ] )}]
      [SAVECOUNT n]
      [ROWCOUNT n] [WARNINGCOUNT n] [MESSAGES msg-file]
      [TEMPFILES PATH pathname]
      {INSERT | REPLACE | RESTART | TERMINATE}
      INTO table-name [( insert-column [ {,insert-column} ... ] )]
      [FOR EXCEPTION table-name [NOUNIQUEEXC NORANGEEXC]]
      [STATISTICS {NO | USE PROFILE}]
      [{COPY {NO | YES { USE TSM [OPEN num-sess SESSIONS]
                       | TO dir/dev [ {,dir/dev} ... ]
                       | LOAD lib-name [OPEN num-sess SESSIONS]}}
                       | NONRECOVERABLE} ]
      [HOLD QUIESCE] [WITHOUT PROMPTING] [DATA BUFFER buffer-size]
      [SORT BUFFER buffer-size] [CPU_PARALLELISM n] [DISK_PARALLELISM n]
      [INDEXING MODE {AUTOSELECT | REBUILD | INCREMENTAL | DEFERRED}]
      [SET INTEGRITY PENDING CASCADE {DEFERRED | IMMEDIATE}]
      [ALLOW NO ACCESS | ALLOW READ ACCESS [USE tblspace-name]] [LOCK WITH FORCE]
      [[PARTITIONED DB CONFIG] partitioned-db-option [{partitioned-db-option}...]]
        filetype-mod:
          NOROWWARNINGS, ANYORDER, BINARYNUMERICS, CODEPAGE=x,
          DUMPFILE=x, FASTPARSE, NOHEADER, TOTALFREESPACE=x,
          INDEXFREESPACE=x, PAGEFREESPACE=x, FORCEIN, IMPLIEDDECIMAL,
          PACKEDDECIMAL, NOCHECKLENGTHS, NOEOFCHAR, NULLINDCHAR=x,
          RECLEN=x, STRIPTBLANKS, STRIPTNULLS, NODOUBLEDEL, LOBSINFILE,
          CHARDELx, COLDELx, DLDELx, DECPLUSBLANK, DECPTx, DATESISO,
          DELPRIORITYCHAR, USEDEFAULTS, DATEFORMAT=x, TIMEFORMAT=x,
          TIMESTAMPFORMAT=x, ZONEDDECIMAL, KEEPBLANKS, IDENTITYMISSING,
          IDENTITYIGNORE, IDENTITYOVERRIDE, GENERATEDMISSING,
          GENERATEDIGNORE, GENERATEDOVERRIDE, USEGRAPHICCODEPAGE
        partitioned-db-option:
          HOSTNAME x, FILE_TRANSFER_CMD x, PART_FILE_LOCATION x, OUTPUT_DBPARTNUMS x,
          PARTITIONING_DBPARTNUMS x, MODE x, MAX_NUM_PART_AGENTS x, OMIT_HEADER,
          ISOLATE_PART_ERRS x, STATUS_INTERVAL x, PORT_RANGE x, CHECK_TRUNCATION,
          MAP_FILE_INPUT x, MAP_FILE_OUTPUT x, TRACE x, NEWLINE, DISTFILE x

接下来,研究如何调用 DB2 Load,从而继续讨论 DB2 Load 的实际使用。同样,有三种调用 DB2 Load 的方法 —— 通过命令行处理程序(CLP)、Control Center 中的 Load 向导或者应用程序编程接口(API)db2Load。例如,为了装载分界的文件,可以发出以下命令(这是比较简单的形式):

清单 12. DB2 Load 命令
LOAD FROM "D:\db2out\employee.dat" OF DEL METHOD P (1, 2, 3, 4, 5, 6, 7, 
8, 9, 10, 11, 12, 13, 14) 
MESSAGES "D:\db2load\employee.log" 
INSERT INTO DB2ADMIN.EMPLOYEE (EMPNO, FIRSTNME, MIDINIT, LASTNAME, WORKDEPT,
                               PHONENO, HIREDATE, JOB, EDLEVEL, SEX, BIRTHDATE, 
                               SALARY, BONUS, COMM) 
COPY NO INDEXING 
MODE AUTOSELECT;

尽管命令行方式灵活而且强大,但是在命令提示语法中选择众多的选项是很麻烦的。调用 DB2 Load 的另一个方法是使用 DB2 Control Center,它会以向导驱动的方式为用户提供在线帮助。DB2 Control Center 可以引导用户轻松地完成成功的装载,即使用户不熟悉 DB2 Load 也没关系。在下面的步骤中,将一个分界的文件装载进表 employee 中,从而体会一下如何在 DB2 Control Center 中进行数据装载。

  1. 选择表 employee 并选择 Load,从而调用 DB2 Load。这时会显示 图 6 所示的屏幕。

    注意,这个向导中有八个步骤。但是,可以通过点击 Next 选用默认设置。每个步骤都提供了不同的选项,根据您的装载需求,其中一些选项是必需的。在这个简单的演示中,第一步采用默认的 Append data to a table。在这种模式下,允许用户在装载期间访问数据。点击 Next 继续。
    图 6. DB2 Load - 步骤 1. 追加还是替换
    DB2 Load - 步骤 1. 追加还是替换
  2. 第二步带领用户选择文件格式(默认格式是 DEL)。在这一步中,选择输入文件和消息文件的位置 —— 本地(即调用 DB2 Load 的地方)还是远程。还可以指定要处理的总行数。点击 Next 继续。
    图 7. DB2 Load - 步骤 2. 指定文件位置
    DB2 Load - 步骤 2. 指定文件位置
  3. 在这一步中,可以指定 LOB 对象的位置。可以指定标识列和生成列行为。另外,可以选择在装载中包含哪些列。接受默认设置并点击 Next
    图 8. DB2 Load - 步骤 3. 指定 LOB 对象的位置
    DB2 Load - 步骤 3. 指定 LOB 对象的位置
  4. 对于索引创建有三个选项:递增式,重新构建,或者让 DB2 Load 自己决定构建索引的最佳方式。有几个应用程序控制级别,而且 DB2 Load 有能力使装载后的性能达到最优。
    图 9. DB2 Load - 步骤 4. 索引、应用程序和性能选项
    DB2 Load - 步骤 4. 索引、应用程序和性能选项
  5. 在 DB2 Load 运行期间,系统可能会崩溃。为了能够从系统崩溃中恢复,DB2 Load 提供了崩溃恢复选项,使用户能够指定一致点。因为 DB2 Load 在事务期间很少进行日志记录,所以有可能需要进行向前恢复。在这一步中,可以选择可恢复(在这里可以保存备份映像的拷贝),或者选择不可恢复从而不允许在发生故障时进行恢复。
    图 10. DB2 Load - 步骤 5. 恢复选项
    DB2 Load - 步骤 5. 恢复选项
  6. 如果您不确定合适的性能参数的话,明智的做法是让 DB2 配置顾问进行选择。在这里可以设置的其他选项是异常表的位置、包含被拒绝的行的异常转储文件以及抑制接收任何警告。
    图 11. DB2 Load - 步骤 6. 更多选项
    DB2 Load - 步骤 6. 更多选项

步骤 7 和 8 允许进行调度(就像对 DB2 Import 进行调度一样)。最后一步是总结您已经选择的选项。

最后(但是并非不重要),您应该注意 DB2 Load 有以下限制:

  • 不支持将数据装载进昵称、层次结构、有类型表、声明的临时表、包含 XML 列的表或具有结构化类型列的表。
  • 如果在 LOAD REPLACE 操作期间发生错误,那么表中原来的数据会丢失。保护措施是保留输入数据的拷贝,从而允许在发生故障时重新启动装载操作。
  • 在新装载的行上不激活触发器。装载实用程序并不实施与触发器相关联的业务规则。

最后,为了总结装载实用程序,我们来看看它与 DB2 Import 之间的差异。下表列出了 DB2 Import 和 Load 之间的一些差异:

表 4. DB2 Import 和 Load 之间的差异
特性/功能DB2 ImportDB2 Load注释
速度相当慢高速装载装载的速度可能是在 DB2 Import 和 Load 之间进行选择的主要标准
文件格式支持ASC、DEL、WSF 和 IXF(请参见前面对这些文件格式的解释)ASC、DEL、IXF 和 CURSORDB2 Load 允许使用用户定义的游标,从而为从应用程序装载数据增加了灵活性。注意,DB2 Load 不支持 WSF
数据源主要是平面文件平面文件、磁带和命名管道DB2 Load 还可以使用 Tivoli Storage Manager(TSM)
目标表、视图、层次结构、昵称只能是表DB2 Load 不支持层次结构
并行性支持几乎没有支持DB2 Load 支持 CPU、DISK 和 FETCH 级并行性
索引重建如果选择进行索引重建,在 DB2 Load 操作之后就会重新构建所有索引
递增式索引DB2 Import 在导入期间逐一插入索引。如果选择递增式索引,在 DB2 Load 操作期间会在现有的索引树上追加索引。另一个选项 Autoselect 让 DB2 决定是进行索引重建,还是递增式地建立索引
保存拷贝可以使用 DB2 Load 保存装载的数据的拷贝。这对于 LOAD REPLACE 操作尤其有用
远程客户机DB2 Import 只能操作调用 DB2 Import 的客户机上本地的文件。但是,DB2 Load 允许远程客户机装载
可恢复DB2 Import 不需要可恢复特性,因为在大多数情况下它用于中小规模的表。尽管如此,它允许指定选项 COMMITCOUNT,从而在发生错误的地方重新启动导入。但主要原因是所有事务都被记入日志。但是,DB2 Load 可以使装载可恢复,因此可以在数据库恢复期间进行前滚。这会将表空间置于备份未决状态。使它们脱离未决状态的惟一方法是完成装载过程
异常表在 DB2 Load 中,可以将装载错误定向到异常表中
XML 装载当前不支持使用 DB2 Load 装载 XML 数据

DB2 Export

为了使用 DB2 Export 导出数据,首先必须具有 SYSADMDBADM 权力,或者参与导出操作的每个表的 CONTROLSELECT 特权。DB2 Export 支持的文件格式与 DB2 Import 相似;包括 DELPC/IXFWSF。正如前面提到的,可以在命令 CLP 中获得命令的完整语法。可以通过发出命令 db2 ? export 获得 DB2 Export 的完整语法。清单 13 列出了完整的 DB2 Export 语法:

清单 13. DB2 Export 语法
EXPORT TO filename OF {IXF | DEL | WSF}
[LOBS TO lob-path [ {,lob-path} ... ] ][LOBFILE lob-file [ {,lob-file} ... ] ]
[XML TO xml-path [ {,xml-path} ... ] ][XMLFILE filename [ {,filename} ... ] ]
[MODIFIED BY {filetype-mod ...}][XMLSAVESCHEMA]
[METHOD N ( column-name [ {,column-name} ... ] )] [MESSAGES message-file]
{select-statement | XQUERY xquery-statement |
HIERARCHY {STARTING sub-table-name |
(sub-table-name [{, sub-table-name} ...])} [WHERE ...] }
filetype-mod:
NODOUBLEDEL, LOBSINFILE, CHARDELx, COLDELx, DLDELx, DECPLUSBLANK
DECPTx, DATESISO, 1, 2, 3, 4, CODEPAGE=x, STRIPLZEROS, NOCHARDEL

可以通过命令行处理程序(CLP)、Control Center 中的 Export 向导或者应用程序编程接口(API)调用 DB2 Export 实用程序。我们来看几个使用命令 CLP 调用 DB2 Export 的示例,从而演示导出功能:

  • 首先,看看典型的分界文件导出是什么样的。清单 14 中的命令显示如何导出表 employee。在默认情况下,使用逗号(,)作为分界符,但是也可以使用支持的其他分界符。
    清单 14. DB2 Export - 导出分界的文件
    EXPORT TO "D:\db2exp\employee.dat" 
    OF DEL MESSAGES "D:\db2exp\employee.log" SELECT * FROM DB2ADMIN.EMPLOYEE;
  • 第二个示例演示如何将 LOB 对象导出到两个目录中。这将每个 LOB 放在一个文件中,从而防止第一个目录溢出,溢出的部分将包含在第二个目录中。
    清单 15. DB2 Export - 将 LOB 对象导出到多个目录中
            EXPORT TO "D:\db2exp\Lobs1\exportLoad.dat" OF DEL 
    	LOBS TO "D:\db2exp\Lobs1", "D:\db2exp\Lobs2" LOBFILE "Lob1", "Lob2" 
    	MODIFIED BY LOBSINFILE LOBSINSEPFILES 
    	MESSAGES "D:\db2exp\exportLoad.log" 
    	SELECT * FROM DB2ADMIN.EMP_PHOTO;
  • 在最后一个示例中,我们看看如何导出 XML 文档。以下命令导出 XEmployee 表。每个 XML 文档放在单独的文件中,这些文件的基本名称是 XEmployee。使用以下命令之后,XEmployee.del 包含文档的列表(比如 <XDS FIL='XEmployee.001.xml' />,而包含数据的实际文档(比如 XEmployee.001.xml)导出到 XML TO 选项指定的目录中。在以下示例中没有展示使用 XMLSAVESCHEMA 选项保存 XML 模式拷贝。
    清单 16. DB2 Export - 将 XML 文档导出到单独的文件中
           EXPORT TO "D:\db2XML\XEmployee.del" OF DEL 
           XML TO "D:\db2XML\data" 
           XMLFILE "XEmployee" 
           MODIFIED BY XMLINSEPFILES 
           MESSAGES "D:\db2XML\XEmployee.log" 
           SELECT * FROM "ALLAN WH THAM".XEMPLOYEE;

为了演示如何使用 DB2 Control Center 进行导出,我们看一个导出 XML 文档的示例。

  1. 右击需要导出的表,并选择 Export。在 DB2 Export 的第一步中,显示输出和消息文件选项。
    图 12. DB2 Export - 目标位置
    DB2 Export - 目标位置
  2. Columns 选项卡上,指定要导出的 XML 文档的实际路径。还要指定基本名称,也就是在 XEmployee.del 中使用的名称。注意,Place each XML document in a separate file 复选框表示 XMLINSEPFILES 选项。这个选项将单独存储 XML 文档。
    图 13. DB2 Export - XML 导出的更多选项
    DB2 Export - XML 导出的更多选项
  3. 最后一个选项卡允许立即运行导出,或者安排导出运行一次或重复运行。

最后,关于 DB2 Export 要记住几点:

  • 除了默认的逗号分界符之外,还可以使用支持的其他分界符。
  • 可以将许多 XML 文档存储在一个文件中,除非设置了 XMLINSEPFILES 文件类型修饰符(这会将输出单独存储在每个文件中)。
  • 在进行导出之前,要确保没有以任何方式锁定要导出的表。
  • 如果要在数据库之间转移数据,那么使用 PC/IXF 格式进行导出。
  • 在导出语句中允许使用表的别名。
  • 不必导出所有列;可以只导出您感兴趣的列。
  • 对于 LOB 和 XML,可以指定溢出路径。

其他工具

除了 DB2 Import、Load 和 Export,DB2 提供的其他实用程序/工具也可以简化数据转移过程。其中一些是内置特性,比如 db2moveDB2 Replication(使用 SQL-Rep 的同构复制)。对于高速和异构的复制,可以单独购买 IBM WebSphere Replication Server。对于大量的装载和卸载,可以购买 IBM DB2 High Performance Unload for Multiplatform。IBM DB2 High Performance Unload for Multiplatform 是一种用于 Linux、UNIX 和 Windows 的高速卸载工具。在数据量非常大的情况下,可以使用这个工具替代导出。这个工具可以从表空间或备份拷贝中卸载 DB2 表。对于希望从 MySQL 迁移到 DB2 Express-C 的客户,可以使用 IBM DB2 Migration Toolkit(MTK),而且这是个免费工具。

余下的几节研究 db2move,这是一个内置的跨平台数据转移实用程序。然后看看用于从 MySQL 迁移到 DB2 Express-C 的 IBM DB2 Migration Toolkit(MTK)提供的一些关键特性。

db2move

作为将表从一个数据库转移到另一个数据库的实用程序,db2move 的优点是能够在导入和导出之间进行选择。它将表导出到 PC/IXF 格式的文件中,然后将这些文件导入或装载回同一机器或另一个平台上的数据库中。因为不同平台之间的硬件体系结构有差异,这会导致备份和恢复的差异,所以目标和源平台上的 DB2 可能不兼容。例如,AIX、HPUX、Sun Solaris 和 PowerPC 上的 Linux 都采用 big endianess,而 IA-64 上的 Linux、AMD64 和 Intel® EM64T 上的 Linux 以及 x86 上的 32 位 Linux 采用 small endianess。因此,db2move 被设计成能够跨这些平台转移数据。db2move 的另一个优点是能够根据模式的所有者创建副本。-co 选项允许创建副本模式。

使用 db2move 很容易。它结合使用 DB2 Import、Export 和 Load。语法本身并不复杂,但是一些选项是 Import、Load、Export 或 Copy 特有的。语法如下所示:

清单 17. DB2Move 语法
   Usage: "db2move <dbname> <action> [options]"

  <dbname> is the name of the database.

  <action> is one of:
     EXPORT - Export all tables that meet the filtering criteria in [options]
              (If no [options] specified, export all tables).
              Internal staging information is stored in file 'db2move.lst'.
              Messages are stored in 'EXPORT.msg'.

     IMPORT - Import all tables listed in the staging file 'db2move.lst'.
              Messages are stored in 'IMPORT.msg'..
              Use the -io option for IMPORT specific actions.

     LOAD   - Load all tables listed in the staging file 'db2move.lst'.
              Messages are stored in 'LOAD.msg'.
              Use the -lo option for LOAD specific actions.

     COPY   - Duplicate a schema(s) into a target database.
              Use the -sn option to specify one or more schemas.
              See the -co option for COPY specific options.
              Use the -tn or -tf option to filter tables in LOAD_ONLY mode.
              Messages are stored in 'COPY.<timestamp>.msg'
              Error only messages in 'COPY.<timestamp>.err'
              Load messages in 'LOADTABLE.<timestamp>.msg'
              List of tables that failed Load in 'LOADTABLE.<timestamp>.err' 

    Some of the options available:
	      
     -tc <value>  Table Definers. Filter on     EXPORT
              SYSCAT.TABLES.DEFINER

     -tn <value>  Table Names. Filter on        EXPORT
              SYSCAT.TABLES.TABNAME             COPY

     -sn <value>  Schema Names. Filter on       EXPORT,
                   SYSCAT.TABLES.TABSCHEMA      COPY

     -ts <value>  Tablespace Names. Filter on   EXPORT
                  SYSCAT.TABLES.TBSPACE

     -tf <file>   Fully qualified list of       EXPORT
                   table names in <file>        COPY

     -aw          Allow warnings                EXPORT

     -io <value>  IMPORT specific actions.      IMPORT
                 Default is REPLACE_CREATE
                 (see docs for limitations
                 of Import create function)

     -lo <value>  LOAD specific options.        LOAD
                  Default is INSERT

     -l <path>    Path to lobfiles.             EXPORT,
                   Default is cwd               IMPORT,
                                                LOAD

     -u <value>   Userid to connect to db.      ALL
                  Default is current user

     -p <value>   Password to connect to db.    ALL

     -co <opt>    COPY specific options.        COPY

给出几个实际示例可以更好地说明它的用法:

  • 按照最简单的形式,从数据库 sample 中导出所有表:
    清单 18. DB2Move - 导出 Sample 中所有的表
          db2move sample export
  • 使用通配符导出某些表:
    清单 19. DB2Move - 使用通配符导出表
          db2move sample export -tn emp*
  • 将所有表装载进 Sample 数据库中。要确保已经预先创建了这些表:
    清单 20. DB2Move - 将所有表装载进 sample 数据库中
          db2move sample load -l d:\db2exp
  • 最后,建立 sample 数据库中的 allan 模式的拷贝,并将它复制到 sample1 数据库中。来自 allan 模式的数据被复制到 allan1 中。这个命令还将源数据库 sampleallan 模式复制为目标数据库 sample1 中的 allan1。也可以只复制 DDL(DDL_ONLY)和表空间映射(TABLESPACE_MAP)。COPY 模式操作使用 COPYSCHEMA_<timestamp>.MSG 消息文件,而且在工作目录中可以找到 COPYSCHEMA_<timestamp>.err 错误文件。
    清单 21. DB2Move - 使用 COPY 选项进行数据转移
          db2move sample COPY -sn allan -co TARGET_DB sample1 USER awt USING password 
          SCHEMA_MAP ((allan,allan1))

对于使用带 COPY 选项的 db2move 来复制模式,有一些限制。它会复制所有允许的模式对象,但是以下类型的对象除外:

  • 表层次结构
  • 分段表(在多分区数据库环境中装载实用程序不支持这种表)
  • Jar(Java™ 例程存档)
  • 昵称
  • 视图层次结构
  • 对象特权(创建的所有新对象都具有默认授权)
  • 统计信息(新对象不包含统计信息)
  • 索引扩展(与用户定义的结构化类型相关)
  • 用户定义的结构化类型及其转换函数

IBM DB2 Migration Toolkit(MTK)

尽管 IBM Migration Toolkit 不是专门为从 MySQL 到 DB2 的迁移而设计的,但是可以用于将数据从 MySQL 迁移到 DB2 中。

可以 下载 DB2 Migration Toolkit MySQL 2.0.1.1 的最新更新。

在产品的 README 中可以找到这个版本支持的特性列表和它的文档。DB2 Migration Toolkit MySQL 2.0.1.1 包含以下新特性和改进特性:

  • 支持从 MySQL 4 和 MySQL 5 迁移到:
    • Informix Dynamic Server V9 和更高版本
    • DB2 LUW V8.2 和更高版本
    • DB2 iSeries V5 和更高版本

IBM DB2 Migration Toolkit 2.0.1.1 处于 alpha 测试阶段,它支持 DDL 构造的迁移,比如表、视图、同义词和约束。

对于用 DB2 Migration Toolkit 对 MySQL 4 和 MySQL 5 进行迁移,有以下限制:

  • 在 specify source 选项卡上不支持 IMPORT 选项
  • 不支持触发器和过程/函数
  • 不支持 MySQL 数据类型属性
  • 只支持到 MySQL 数据库的 JDBC 连接
  • 不支持 ENUM 和 SET 数据类型
  • 不支持特殊寄存器(例如,CURRENT_TIMESTAMP
  • 在默认情况下,MySQL 在时间戳数据类型中存储当前时间戳;DB2 在默认情况下在时间戳数据类型中存储空值
  • 不支持 ON-UPDATE 子句作为默认值
  • 在 UNIX 系统上,不支持使用 LOAD 选项装载 LOB 数据。但是可以使用 IMPORT 选项
  • 不支持提取视图
  • 不支持 AUTOINCREMENT 属性

结束语

本文概述了 MySQL 的数据转移选项,并用一个表对比了 MySQL 的 mysqldumpmysqlhotcopy 实用程序。在简短地讨论 MySQL 数据转移之后,本文介绍了 IBM DB2 Express-C 9.1 的数据转移功能。详细讨论了 DB2 Import、Load 和 Export 等实用程序。最后,讨论了一些其他工具,包括内置特性和单独购买的工具,从而说明了在需要数据库/模式复制、高速装载和卸载或者将整个 MySQL 数据库迁移到 DB2 时,有哪些可用工具以及可行的解决方案。

有了这些知识,MySQL DBA 在遇到 IBM DB2 Express-C 数据转移任务时应该有能力做出适当的选择。


免责声明

我在编写本文时已经竭尽所能。如果您发现了任何缺陷,请与作者联系。

参考资料

学习

获得产品和技术

  • 现在可以免费使用 DB2。下载 DB2 Express-C,这是一个为社区提供的免费 DB2 Express Edition 版本,它提供与 DB2 Express Edtion 相同的核心数据特性,为构建和部署应用程序提供了坚实的基础。
  • 下载 DB2 Developer Workbench
  • 使用 IBM 试用软件 构建您的下一个开发项目,这些软件可以从 developerWorks 直接下载。

讨论

条评论

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, Open source
ArticleID=193749
ArticleTitle=利用 MySQL 技能学习 DB2 Express,第 4 部分: DB2 与 MySQL 数据转移
publish-date=02012007