DB2 V10.1 for Linux, UNIX, and Windows

在分区数据库环境中装入数据

使用 LOAD 实用程序将数据装入到分区数据库环境中。

开始之前

在多分区数据库中装入表之前:
  • 确保正确设置了 svcename 数据库管理器配置参数和 DB2COMM 概要文件注册表变量。此步骤很重要,因为 LOAD 实用程序使用 TCP/IP 将数据从预分区代理程序传输至分区代理程序以及从分区代理程序传输至装入数据库分区。
  • 在调用 LOAD 实用程序前,必须连接至(或能够隐式连接至)要将数据装入到其中的数据库。
  • 因为 LOAD 实用程序发出 COMMIT 语句,所以在开始执行装入操作前,应该通过发出 COMMIT 或 ROLLBACK 语句完成所有事务并释放任何锁定。如果使用的是 PARTITION_AND_LOADPARTITION_ONLYANALYZE 方式,那么装入的数据文件必须在此数据库分区上,但在下列情况下除外:
    1. 已指定 CLIENT 参数,在此情况下数据必须驻留在客户机上;
    2. 输入源类型为 CURSOR,在此情况下没有输入文件。
  • 运行“设计顾问程序”以确定每个表的最佳数据库分区。有关更多信息,请参阅设计顾问程序

限制

在使用 LOAD 实用程序以在多分区数据库环境中装入数据时,下列限制适用:
  • 装入操作的输入文件位置不能是磁带设备。
  • ROWCOUNT 参数不受支持,除非正使用 ANALYZE 方式。
  • 如果目标表包含分发所需的标识列,并且未指定 identityoverride 文件类型修饰符,或者您正使用多个数据库分区来进行分发然后装入数据,那么不支持在 LOAD 命令上对 SAVECOUNT 使用大于 0 的值。
  • 如果分布键包含标识列,那么只支持 PARTITION_AND_LOAD 方式。
  • LOAD_ONLYLOAD_ONLY_VERIFY_PART 方式不能与 LOAD 命令的 CLIENT 参数配合使用。
  • LOAD_ONLY_VERIFY_PART 方式不能与 CURSOR 输入源类型配合使用。
  • 分发错误隔离方式 LOAD_ERRS_ONLYSETUP_AND_LOAD_ERRS 不能与 LOAD 命令的 ALLOW READ ACCESSCOPY YES 参数配合使用。
  • 如果 OUTPUT_DBPARTNUMSPARTITIONING_DBPARTNUMS 选项指定的数据库分区不重叠,那么多个装入操作可同时将数据装入到同一个表中。例如,如果表是在数据库分区 0 至 3 上定义的,那么一个装入操作可以将数据装入到数据库分区 0 和 1 中,而另一个装入操作可以将数据装入到数据库分区 2 和 3 中。如果 PARTITIONING_DBPARTNUMS 选项指定的数据库分区重叠,那么装入操作自动选择 PARTITIONING_DBPARTNUMS 参数(在此情况下,没有任何装入分区子代理程序已在针对此表执行)或失败(如果没有任何参数)。

    V9.7 FP6 开始,如果 PARTITIONING_DBPARTNUMS 选项指定的数据库分区重叠,那么 LOAD 实用程序将自动从由 OUTPUT_DBPARTNUMS 指示的数据库分区尝试选择 PARTITIONING_DBPARTNUMS 参数(在此情况下,没有任何装入分区子代理程序已在针对此表执行)或失败(如果没有任何参数)。

    如果您要使用 PARTITIONING_DBPARTNUMS 选项显式指定分区,那么强烈建议您应该使用具有所有并发 LOAD 命令(每个命令指定不同的分区)的选项。如果您仅在某些并发装入命令上指定 PARTITIONING_DBPARTNUMS,或如果指定重叠分区,那么 LOAD 命令至少将需要为某些并发装入选择备用分区节点,且该命令可能会极少失败 (SQL2038N)。

  • 对于跨多个数据库分区的表来说,只能将非定界 ASCII (ASC) 和定界 ASCII (DEL) 文件分布到这些表中。不能分布 PC/IXF 文件,但可使用 LOAD_ONLY_VERIFY_PART 方式的装入操作将 PC/IXF 文件装入到分布在多个数据库分区的表中。

示例

下列示例说明如何使用 LOAD 命令来启动各种类型的装入操作。下列示例中使用的数据库有 5 个数据库分区:0、1、2、3 和 4。每个数据库分区都有一个本地目录 /db2/data/。在数据库分区 0、1、3 和 4 上定义了两个表 TABLE1 和 TABLE2。从客户机装入数据时,用户能够访问除数据库分区以外的远程客户机。

分发和装入示例
在此方案中,您连接到一个数据库分区,该数据库分区可能是也可能不是用来定义 TABLE1 的数据库分区。数据文件 load.del 在此数据库分区的当前工作目录中。要将 load.del 中的数据装入到所有定义了 TABLE1 的数据库分区中,请发出以下命令:
   LOAD FROM LOAD.DEL of DEL REPLACE INTO TABLE1
注: 在此示例中,系统对分区数据库环境的所有配置参数使用缺省值:MODE 参数缺省为 PARTITION_AND_LOADOUTPUT_DBPARTNUMS 参数缺省为在其上定义了 TABLE1 的所有数据库分区。PARTITIONING_DBPARTNUMS 缺省为根据 LOAD 命令规则(用于在未指定任何数据库分区的情况下选择数据库分区)选择的数据库分区集合。
要在数据分布在数据库分区 3 和数据库分区 4 上的位置执行装入操作,请发出以下命令:
LOAD FROM LOAD.DEL of DEL REPLACE INTO TABLE1
	PARTITIONED DB CONFIG PARTITIONING_DBPARTNUMS (3,4)
图 1. 将数据装入到数据库分区 3 和 4 中。. 此图说明发出以上命令后产生的行为。数据将装入到数据库分区 3 和 4 中。
此图说明发出以上命令后发生的装入过程。
仅分发示例
在此方案中,您连接到一个数据库分区,该数据库分区可能是也可能不是用来定义 TABLE1 的数据库分区。数据文件 load.del 在此数据库分区的当前工作目录中。在使用数据库分区 3 和数据库分区 4 的情况下,要将 load.del 分布(而不装入)到所有定义 TABLE1 的数据库分区中,请发出以下命令:
LOAD FROM LOAD.DEL of DEL REPLACE INTO TABLE1
	PARTITIONED DB CONFIG MODE PARTITION_ONLY
	PART_FILE_LOCATION /db2/data
	PARTITIONING_DBPARTNUMS (3,4)
这导致将文件 load.del.xxx 存储在每个数据库分区上的 /db2/data 目录中,其中 xxx 是由 3 位数字表示的数据库分区号。
在仅使用数据库分区 0(缺省 PARTITIONING_DBPARTNUMS 值)上运行的 1 个分区代理程序的情况下,要将 load.del 文件分布到数据库分区 1 和 3,请发出以下命令:
LOAD FROM LOAD.DEL OF DEL REPLACE INTO TABLE1
	PARTITIONED DB CONFIG MODE PARTITION_ONLY
	PART_FILE_LOCATION /db2/data
	OUTPUT_DBPARTNUMS (1,3)
图 2. 使用一个分区代理程序将数据装入到数据库分区 1 和 3 中。. 此图说明发出以上命令后产生的行为。将使用数据库分区 0 上运行的 1 个分区代理程序将数据装入到数据库分区 1 和 3 中。
此图说明执行以上命令后发生的装入过程。
仅装入示例
如果已经以 PARTITION_ONLY 方式执行了装入操作,并且要将每个装入数据库分区的 /db2/data 目录中的分区文件装入到所有定义了 TABLE1 的数据库分区中,请发出以下命令:
LOAD FROM LOAD.DEL OF DEL REPLACE INTO TABLE1
	PARTITIONED DB CONFIG MODE LOAD_ONLY
	PART_FILE_LOCATION /db2/data
图 3. 将数据装入到其中定义了特定表的所有数据库分区中。. 此图说明发出以上命令后产生的行为。将分布式数据装入到所有用来定义 TABLE1 的数据库分区中。
此图说明发出以上命令后发生的装入过程。
要仅装入到数据库分区 4 中,请发出以下命令:
LOAD FROM LOAD.DEL OF DEL REPLACE INTO TABLE1
	PARTITIONED DB CONFIG MODE LOAD_ONLY
	PART_FILE_LOCATION /db2/data
	OUTPUT_DBPARTNUMS (4)
装入不带分发映射头的预分发文件
可以使用 LOAD 命令来将不带分布头的装入数据文件直接装入到数个数据库分区中。如果数据文件在每个用来定义 TABLE1 的数据库分区上的 /db2/data 目录中,并且名为 load.del.xxx(其中 xxx 是数据库分区号),那么可以通过发出以下命令来装入那些文件:
LOAD FROM LOAD.DEL OF DEL modified by dumpfile=rejected.rows
	REPLACE INTO TABLE1
	PARTITIONED DB CONFIG MODE LOAD_ONLY_VERIFY_PART
	PART_FILE_LOCATION /db2/data
要仅将数据装入到数据库分区 1 中,请发出以下命令:
LOAD FROM LOAD.DEL OF DEL modified by dumpfile=rejected.rows
	REPLACE INTO TABLE1
	PARTITIONED DB CONFIG MODE LOAD_ONLY_VERIFY_PART
	PART_FILE_LOCATION /db2/data
	OUTPUT_DBPARTNUMS (1)
注: 如果指定了转储文件,那么将拒绝装入不属于源数据库分区的行并将它们放入转储文件。
从远程客户机装入到多分区数据库
要将远程客户机上的文件中的数据装入到多分区数据库中,必须指定 LOAD 命令的 CLIENT 参数。此参数指示数据文件不在服务器分区上。例如:
LOAD CLIENT FROM LOAD.DEL OF DEL REPLACE INTO TABLE1
注: 不能将 LOAD_ONLYLOAD_ONLY_VERIFY_PART 方式与 CLIENT 参数配合使用。
从游标装入

与在单一分区数据库中一样,可以从游标装入到多分区数据库中。在此示例中,对于 PARTITION_ONLYLOAD_ONLY 方式,PART_FILE_LOCATION 参数必须指定标准文件名。此名称是在每个输出数据库分区上创建或装入的分布文件的标准基本文件名。如果目标表包含 LOB 列,那么可以使用指定的基本名称来创建多个文件。

要将语句 SELECT * FROM TABLE1 的应答集中的所有行分布至名为 /db2/data/select.out.xxx(其中 xxx 是数据库分区号)的每个数据库分区上的文件,以便将来装入到 TABLE2 中,请发出以下命令:
DECLARE C1 CURSOR FOR SELECT * FROM TABLE1

LOAD FROM C1 OF CURSOR REPLACE INTO TABLE2
	PARTITIONED DB CONFIG MODE PARTITION_ONLY
	PART_FILE_LOCATION /db2/data/select.out
然后,可以通过发出以下 LOAD 命令来装入先前操作所生成的数据文件:
LOAD FROM C1 OF CURSOR REPLACE INTO TABLE2
	PARTITIONED CB CONFIG MODE LOAD_ONLY
	PART_FILE_LOCATION /db2/data/select.out