load 概述
LOAD 实用程序能够高效地将大量数据移到新创建的表或者已包含数据的表中。
此实用程序能够处理绝大多数数据类型,其中包括 XML、大对象 (LOB) 和用户定义的类型 (UDT)。 由于 LOAD 实用程序直接将格式化的页写入数据库,而 IMPORT 实用程序却要执行 SQL INSERT,因此 LOAD 实用程序的速度比 IMPORT 实用程序快。
LOAD 实用程序不会触发触发器,并且除了验证索引唯一性以外不执行引用约束检查或表约束检查。
装入过程包含几个不同的阶段(请参阅图 1):
- 分析
将数据装入列组织表中时,第一个阶段为分析阶段,此阶段是列组织表特有的。仅当需要构建列压缩字典时(此过程在 LOAD REPLACE 操作、LOAD REPLACE RESETDICTIONARY 操作、LOAD REPLACE RESETDICTIONARYONLY 操作或 LOAD INSERT 操作(如果按列组织的表为空)期间完成),才会发生分析阶段。对于列组织表,在此阶段完成之后,将进入装入、构建和删除阶段。索引复制阶段仅适用于行组织表。 - 装入
在装入阶段,会将数据装入到表中,必要时还收集索引键和表统计信息。并且,将根据 LOAD 命令中的 SAVECOUNT 参数指定的时间间隔建立保存点或一致点。将生成消息以指示在保存点成功装入的输入行数。 - 构建
在构建阶段,将根据装入阶段收集的索引键生成索引。在装入阶段将对索引键进行排序并收集索引统计信息(如果指定了 STATISTICS USE PROFILE 选项且概要文件指示收集索引状态)。这些统计信息与通过 RUNSTATS 命令收集的统计信息类似。 - 删除
在删除阶段,将从表中除去导致唯一键或主键违例的行。如果指定了装入异常表,那么这些删除的行将存储在该表中。 - 索引复制
在索引复制阶段,将索引数据从系统临时表空间复制到原始表空间。在指定了 READ ACCESS 选项的装入操作期间,仅当指定使用系统临时表空间来创建索引时,才会出现这种情况。
图 1. 按行组织的表的装入过程的各个阶段

注: 调用 LOAD 实用程序后,可以使用 LIST
UTILITIES 命令来监视装入操作的进度。
装入数据时需要下列信息:
- 输入文件、命名管道或设备的路径和名称。
- 目标表的名称或别名。
- 输入源的格式。此格式可以是 DEL、ASC、PC/IXF 或 CURSOR。
- 是将输入数据追加到表中还是替换表中的现有数据。
- 消息文件名(如果通过 db2Load 应用程序编程接口 (API) 调用此实用程序)。
装入方式
- INSERT
在此方式下,装入将输入数据追加至表,并且不对现有数据进行任何更改。 - REPLACE
在此方式下,装入将删除表中的现有数据并用输入数据填充该表。 - RESTART
在此方式下,已中断的装入将继续。在大多数情况下,装入将从它失败时所处的阶段继续。如果该阶段为装入阶段,那么装入将从上一个成功一致点继续。 - TERMINATE
在此方式下,将回滚失败的装入操作。
可以指定的选项包括:
- 要装入的数据在客户机上(如果从连接的远程客户机调用 LOAD 实用程序)。请注意,即使您指定 CLIENT 选项,也始终从服务器中读取 XML 和 LOB 数据。
- 数据装入方法:列位置、列名或相对列位置。
- 实用程序建立一致点的频率。
- 要在其中插入数据的表列的名称。
- 在装入操作执行过程中,是否可以查询表中预先存在的数据。
- 装入操作在继续执行之前是应该等待其他实用程序或应用程序使用完表,还是应该强制其他应用程序释放锁定。
- 构建索引时要使用的备用系统临时表空间。
- 用于存储 LOB 的输入文件的路径和名称。注: LOAD 实用程序不使用 COMPACT lob 选项。
- 消息文件名。在执行装入操作期间,可以指定要创建消息文件以包含与那些操作相关联的错误消息、警告消息和参考消息。使用 MESSAGES 参数来指定这些文件的名称。注:
- 只能在操作完成之后查看消息文件的内容。如果要在装入操作正在运行时查看装入消息,那么可以使用 LOAD QUERY 命令。
- 在消息文件中,每条消息都另起一行并包含 DB2® 消息检索工具提供的信息。
- 正在装入的列值是否有隐式的小数点。
- 在装入表之后,实用程序是否应该修改可用空间量。
- 在装入过程中是否收集统计信息。仅当以 REPLACE 方式运行装入操作时,才支持此选项。根据为表定义的概要文件收集统计信息。必须在执行 LOAD 命令前使用 RUNSTATS 命令创建该概要文件。如果不存在该概要文件,但您指示装入操作根据该概要文件收集统计信息,装入操作就会失败并返回错误消息。
如果对表追加数据,就不会收集统计信息。要收集有关追加的表的当前统计信息,请在装入过程完成后调用 RUNSTATS 实用程序。如果对包含唯一索引的表收集统计信息,并且在删除阶段删除了重复的键,那么不会更新统计信息来考虑删除掉的记录。如果您预计会有相当数量的重复记录,请不要在装入操作执行期间收集统计信息。而是,应该在装入过程完成后调用 RUNSTATS 实用程序。
- 是否保留所作更改的副本。如果保留更改副本,就可以启用数据库前滚恢复功能。如果对数据库禁用了前滚恢复功能(即,数据库配置参数
logarchmeth1 和 logarchmeth2 设置为
OFF),那么不支持此选项。如果未创建副本,但启用了前滚恢复功能,那么装入操作完成之后,表空间将处于“备份暂挂”状态。要使数据库完全可恢复,就需要进行记录。LOAD 实用程序几乎完全不记录与装入数据相关联的信息。您可以选择创建表的已装入部分的副本,而不是进行记录。如果数据库环境允许在发生故障后进行数据库恢复,那么可以执行下列其中一项操作:
- 显式请求创建表的已装入部分的副本。
- 在装入操作完成后立即备份表所在的表空间。
如果设置了数据库配置参数 logindexbuild,并且调用装入操作时指定了 COPY YES 可恢复性选项和 INCREMENTAL 建立索引选项,那么装入操作将记录对索引所作的所有修改。使用这些选项的好处是:在使用此装入操作的日志记录进行前滚时,还将恢复索引(通常,除非 LOAD 使用 REBUILD 建立索引方式,否则不会恢复索引)。
如果正在装入已包含数据的表,并且数据库不可恢复,那么在调用 LOAD 实用程序之前,请确保已备份数据库或者所装入表的表空间,以便能够从错误中恢复。
如果要对可恢复数据库执行一系列装入操作,那么与每次调用装入操作时都指定 COPY YES 选项相比,指定每个装入操作都不可恢复并在装入序列结束时进行备份的速度更快。可以使用 NONRECOVERABLE 选项来指定将装入事务标记为不可恢复,这样,以后不可能通过前滚操作恢复该事务。ROLLFORWARD 实用程序将跳过该事务,并将装入数据的表标记为“无效”。该实用程序还将忽略该对表执行的任何后续事务。在前滚操作完成后,只能删除这样的表(请参阅图 2)。如果指定了此选项,在装入操作完成后就不会将表空间置于“备份暂挂”状态,并且在装入操作执行期间不必创建所装入数据的副本。
图 2. 前滚操作执行期间的不可恢复处理
- 装入操作执行期间创建临时文件时要使用的标准路径。此名称由 LOAD 命令的 TEMPFILES PATH 参数指定。缺省值是数据库路径。此路径在服务器上,并且由 DB2 实例以独占方式访问。因此,对此参数指定的任何路径名限定都必须反映服务器(而不是客户机)的目录结构,并且 DB2 实例所有者对该路径必须具有读写许可权。