IMPORT 命令

IMPORT 命令将具有受支持文件格式的外部文件中的数据插入到表,层次结构,视图或昵称中。 LOAD 是更快的替代方法,但 LOAD 实用程序不支持在层次结构级别装入数据。

权限

  • 使用 INSERT 选项的 IMPORT 需要下列其中一个权限:
    • DATAACCESS 权限
    • 对每个参与表,视图或昵称的 CONTROL 特权
    • 对每个参与表或视图的 INSERT 和 SELECT 特权
  • 对于使用 INSERT_UPDATE 选项的现有表, IMPORT 需要下列其中一个权限:
    • DATAACCESS 权限
    • 对每个参与表,视图或昵称的 CONTROL 特权
    • 对每个参与表或视图的 INSERT , SELECT , UPDATE 和 DELETE 特权
  • 对于使用 REPLACEREPLACE_CREATE 选项的现有表, IMPORT 需要下列其中一个权限:
    • DATAACCESS 权限
    • 该表或视图上的 CONTROL 特权
    • 对表或视图的 INSERT , SELECT 和 DELETE 特权
  • IMPORT 到使用 CREATEREPLACE_CREATE 选项的新表,需要下列其中一个权限:
    • DBADM 权限
    • 对数据库的 CREATETAB 权限、对表空间的 USE 特权以及下列其中一项权限或特权:
      • 对数据库的 IMPLICIT_SCHEMA 权限(如果该表的隐式或显式模式名不存在)
      • 对模式的 CREATEIN 特权(如果该表的模式名引用现有模式)
  • 对于不存在的层次结构,使用 CREATEREPLACE_CREATE 选项的 IMPORT 需要下列其中一个权限:
    • DBADM 权限
    • 对数据库的 CREATETAB 权限和对表空间的 USE 特权,以及下列其中一项:
      • 对于数据库的 IMPLICIT_SCHEMA 权限(如果表的模式名不存在)
      • 对模式的 CREATEIN 特权 (如果表的模式存在)
      • 对层次结构中每个子表的 CONTROL 特权 (如果使用了整个层次结构上的 REPLACE_CREATE 选项)
  • IMPORT 到使用 REPLACE 选项的现有层次结构需要下列其中一个权限:
    • DATAACCESS 权限
    • 对层次结构中每个子表的 CONTROL 特权
  • 要将数据导入到包含受保护列的表中,会话授权标识必须拥有允许对该表中所有受保护列执行写访问的 LBAC 凭证。 否则,导入失败并返回错误 (SQLSTATE 42512)。
  • 要将数据导入到具有受保护行的表中,会话授权标识必须包含符合以下条件的 LBAC 凭证:
    • 它是保护表的安全策略的一部分
    • 已向会话授权标识授予写访问权
    要插入的行上的标号、用户的 LBAC 凭证、安全策略定义和 LBAC 规则共同确定行上的标号。
  • 对于具有受保护行的表,如果指定了 REPLACEREPLACE_CREATE 选项,那么会话授权标识必须有权删除该表。
  • 要将数据导入昵称中,会话授权标识必须具有以传递方式访问和使用指定数据源的特权。
  • 如果该表已激活行访问控制,那么该表上的 IMPORT REPLACE 将需要删除该表的能力。 具体而言,您必须对该表具有 CONTROL 或 DBADM 权限之一。

需要的连接

数据库。 如果启用了隐式连接,那么将建立与缺省数据库的连接。 对来自 Linux, UNIX 或 Windows 客户机的 Linux®, UNIX 或 Windows 数据库服务器的实用程序访问必须是通过引擎的直接连接,而不是通过 Db2 Connect 网关或循环环境的直接连接。

命令语法

Read syntax diagramSkip visual syntax diagramIMPORT FROMfilenameOFfiletype LOBS FROM,lob-pathXML FROM,xml-pathMODIFIED BYfiletype-modMETHODL(,column-startcolumn-end)NULL INDICATORS(,null-indicator-list)N(,column-name)P(,column-position)XMLPARSESTRIPPRESERVEWHITESPACEXMLVALIDATE USINGXDSDEFAULTschema-sqlidIgnore and Map parametersSCHEMAschema-sqlidSCHEMALOCATION HINTSALLOW NO ACCESSALLOW WRITE ACCESSCOMMITCOUNTnAUTOMATICRESTARTCOUNTSKIPCOUNTnROWCOUNTnWARNINGCOUNTnNOTIMEOUTMESSAGESmessage-fileINSERTINSERT_UPDATEREPLACEREPLACE_CREATEINTOtable-name(,insert-column)hierarchy descriptionCREATEINTOtable-name(,insert-column)hierarchy descriptionAS ROOT TABLEUNDERsub-table-nametblspace-specs
Ignore and Map parameters
Read syntax diagramSkip visual syntax diagramIGNORE(,schema-sqlid)MAP(,(schema-sqlid,schema-sqlid))
hierarchy description
Read syntax diagramSkip visual syntax diagramALL TABLESsub-table-listINHIERARCHY STARTINGsub-table-nametraversal-order-list
sub-table-list
Read syntax diagramSkip visual syntax diagram( ,sub-table-name(,insert-column) )
traversal-order-list
Read syntax diagramSkip visual syntax diagram( ,sub-table-name )
tblspace-specs
Read syntax diagramSkip visual syntax diagramINtablespace-nameINDEX INtablespace-nameLONG INtablespace-name

命令参数

FROM filename
指定包含要导入的数据的文件。 如果省略了路径,那么将使用当前工作目录。 filename 参数的最大长度为 255 字节。
OF 文件类型
指定输入文件中数据的格式:
  • ASC (非定界 ASCII 格式)
  • DEL (定界 ASCII 格式) ,由各种 数据库管理器 和文件管理器程序使用
  • IXF (集成交换格式, PC 版本) 是由 Db2®独占使用的二进制格式。
LOBS FROM lob-path
指定用于存储 LOB 文件的一条或多条路径。 LOB 数据文件的名称存储在将装入到 LOB 列中的主数据文件 (ASC , DEL 或 IXF) 中。 可以指定的最大路径数为 999。 这将隐式激活 LOBSINFILE 行为。

当您导入到昵称时,此参数无效。

XML FROM xml-path
指定一个或多个包含 XML 文件的路径。
MODIFIED BY filetype-mod
指定文件类型修饰符选项。 请参阅 IMPORT 实用程序的文件类型修饰符
METHOD
L
指定要从中导入数据的开始和结束列号。 列号是从一行数据开始的字节偏移量。 从 1 开始编号。
注: 此方法只能与 ASC 文件配合使用,并且是该文件类型的唯一有效选项。
N
指定要导入的数据文件中列的名称。 这些列名的大小写必须与系统目录中相应名称的大小写匹配。 每个不可为空的表列都应该在 METHOD N 列表中具有相应的条目。 例如,给定的数据字段 F1, F2, F3, F4, F5和 F6以及表列 C1 INT , C2 INT NOT NULL , C3 INT NOT NULL 和 C4 INT ,方法 N (F2, F1, F4, F3) 是有效请求,而方法 N (F2, F1) 无效。
注: 此方法只能与 IXF 文件配合使用。
P
指定要导入的输入数据字段的字段号 (从 1 开始编号)。 每个不可为空的表列都应该在 METHOD P 列表中具有相应的条目。 例如,给定的数据字段 F1, F2, F3, F4, F5和 F6以及表列 C1 INT , C2 INT NOT NULL , C3 INT NOT NULL 和 C4 INT , method P (2, 1, 4, 3) 是有效请求,而 method P (2, 1) 无效。 此方法只能与文件类型 IXF 或 DEL 配合使用,并且是 DEL 文件类型的唯一有效方法。
对于方法 P 指定的每个字段,您需要在操作语句中定义相应的列,除非所有列都已解释或将装入前 x 列,如以下示例中所示:
  db2 load from datafile1.del of del method P(1, 3, 4)
      replace into table1 (c1, c3, c4)
NULL INDICATORS null-indicator-list
仅当指定了 METHOD L 参数时,才能使用此选项。 即,输入文件是 ASC 文件。 空指示符列表是一个以逗号分隔的正整数列表,用于指定每个空指示符字段的列号。 列号是从一行数据开始的空指示符字段的字节偏移量。 对于 METHOD L 参数中定义的每个数据字段,空指示符列表中必须有一个条目。 列数为零表示相应的数据字段始终包含数据。

NULL 指示符列中的值 Y 指定列数据为 NULL。 NULL 指示符列中的任何字符 其他 Y 都指定列数据不为 NULL ,并且将导入由 METHOD L 选项指定的列数据。

可以使用 MODIFIED BY 选项和 nullindchar 文件类型修饰符来更改 NULL 指示符字符。

XMLPARSE
指定如何解析 XML 文档。 如果未指定此选项,那么 XML 文档的解析行为将由 CURRENT IMPLICIT XMLPARSE OPTION 专用寄存器的值确定。
STRIP WHITESPACE
指定在解析 XML 文档时除去空格。
PRESERVE WHITESPACE
指定在解析 XML 文档时不除去空格。
XMLVALIDATE
指定在适用时针对模式验证 XML 文档。
USING XDS
根据主数据文件中的 XML 数据说明符 (XDS) 标识的 XML 模式验证 XML 文档。 缺省情况下,如果使用 USING XDS 子句调用 XMLVALIDATE 选项,那么用于执行验证的模式将由 XDS 的 SCH 属性确定。 如果 XDS 中不存在 SCH 属性,那么除非 DEFAULT 子句指定了缺省模式,否则不会进行模式验证。

DEFAULTIGNOREMAP 子句可用于修改模式确定行为。 这三个可选子句直接应用于 XDS 的规范,而不适用于彼此。 例如,如果由于 DEFAULT 子句指定了模式而选择了该模式,那么如果 IGNORE 子句也指定了该模式,那么将不会忽略该模式。 同样,如果由于在 MAP 子句中指定了模式作为对的第一部分而选择了该模式,那么如果在另一个 MAP 子句对的第二部分中也指定了该模式,那么将不会重新映射该模式。

USING SCHEMA schema-sqlid
将针对具有指定 SQL 标识的 XML 模式验证 XML 文档。 在这种情况下,将忽略所有 XML 列的 XML 数据说明符 (XDS) 的 SCH 属性。
USING SCHEMALOCATION HINTS
将根据源 XML 文档中的 XML 模式位置提示所标识的模式来验证 XML 文档。 如果在 XML 文档中找不到 schemaLocation 属性,那么将不会进行验证。 当指定 USING SCHEMALOCATION HINTS 子句时,将忽略所有 XML 列的 XML 数据说明符 (XDS) 的 SCH 属性。
请参阅以下部分中的 XMLVALIDATE 选项的示例。
DEFAULT schema-sqlid
仅当指定了 USING XDS 参数时,才能使用此选项。 当导入的 XML 文档的 XML 数据说明符 (XDS) 不包含标识 XML 模式的 SCH 属性时,通过 DEFAULT 子句指定的模式将标识要用于验证的模式。

DEFAULT 子句优先于 IGNOREMAP 子句。 如果 XDS 满足 DEFAULT 子句,那么将忽略 IGNOREMAP 规范。

IGNORE schema-sqlid
仅当指定了 USING XDS 参数时,才能使用此选项。 IGNORE 子句指定一个或多个模式的列表以忽略它们是否由 SCH 属性标识。 如果已导入的 XML 文档的 XML 数据说明符中存在 SCH 属性,并且由 SCH 属性标识的模式包含在要忽略的模式列表中,那么不会对已导入的 XML 文档进行模式验证。

如果在 IGNORE 子句中指定了模式,那么它也不能存在于 MAP 子句中模式对的左侧。

IGNORE 子句仅适用于 XDS。 如果由 IGNORE 子句指定,那么随后将不会忽略 MAP 子句所映射的模式。

MAP schema-sqlid
仅当指定了 USING XDS 参数时,才能使用此选项。 使用 MAP 子句来指定备用模式,以代替由 XML 数据说明符 (XDS) 的 SCH 属性为每个导入的 XML 文档指定的模式。 MAP 子句指定一个或多个模式对的列表,其中每一个人对表示一个模式到另一个模式的映射。 该对中的第一个模式表示由 XDS 中的 SCH 属性引用的模式。 该对中的第二个模式表示应该用于执行模式验证的模式。

如果模式在 MAP 子句中的模式对左侧存在,那么也不能在 IGNORE 子句中指定该模式。

应用模式对映射后,结果为最终结果。 映射操作是非传递操作,因此所选模式将不会随后应用于另一个模式对映射。

不能多次映射模式,这意味着它不能出现在多个对的左侧。

ALLOW NO ACCESS
以脱机方式运行导入。 在插入任何行之前,将获取对目标表的互斥 (X) 锁定。 这将阻止并发应用程序访问表数据。 这是缺省导入行为。
ALLOW WRITE ACCESS
以联机方式运行导入。 插入第一行时,将获取对目标表的意向互斥 (IX) 锁定。 这允许并发阅读器和写程序访问表数据。 联机方式与 REPLACECREATEREPLACE_CREATE 导入选项不兼容。 不支持将联机方式与缓冲插入结合使用。 导入操作将定期落实插入的数据,以防止锁定升级到表锁定,并避免耗尽活动日志空间。 即使未使用 COMMITCOUNT 选项,也将执行这些落实。 在每次落实期间,导入将丢失其 IX 表锁定,并将尝试在落实后重新获取该表锁定。 导入到昵称时需要此参数,并且必须使用有效数字指定 COMMITCOUNT (AUTOMATIC 未被视为有效选项)。
COMMITCOUNT n | AUTOMATIC
在导入每个 n 条记录后执行 COMMIT。 当指定了数字 n 时,导入将在导入每个 n 条记录之后执行 COMMIT。 使用复合插入时,用户指定的落实频率 n 将向上舍入为复合计数值的第一个整数倍。 如果指定了 AUTOMATIC ,那么在内部导入将确定何时需要执行落实。 由于以下两个原因之一,该实用程序将落实:
  • 以避免耗尽活动日志空间
  • 以避免从行级别到表级别的锁定升级
如果指定了 ALLOW WRITE ACCESS 选项,但未指定 COMMITCOUNT 选项,那么 IMPORT 实用程序将像指定了 COMMITCOUNT AUTOMATIC 一样执行落实。
导入操作避免活动日志空间耗尽的能力受 Db2 注册表变量 DB2_FORCE_APP_ON_MAX_LOG影响:
  • 如果 DB2_FORCE_APP_ON_MAX_LOG 设置为 FALSE 并且指定了 COMMITCOUNT AUTOMATIC 命令选项,那么 IMPORT 实用程序将能够自动避免耗尽活动日志空间。
  • 如果 DB2_FORCE_APP_ON_MAX_LOG 设置为 FALSE 并且指定了 COMMITCOUNT n 命令选项,那么当导入实用程序在插入或更新记录时迂到 SQL0964C (事务日志已满) 时,它将尝试解析日志已满情况。 它将执行无条件落实,然后将重新尝试插入或更新记录。 如果这无助于解决问题 (当日志已满归因于数据库上的其他活动时) ,那么 IMPORT 命令将按预期失败,但是落实的行数可能不是 COMMITCOUNT n 值的倍数。 要避免处理在重试导入操作时已落实的行,请使用 RESTARTCOUNTSKIPCOUNT 命令参数。
  • 如果 DB2_FORCE_APP_ON_MAX_LOG 设置为 TRUE (这是缺省值) ,那么如果在插入或更新记录时迂到 SQL0964C ,那么导入操作将失败。 无论您是指定 COMMITCOUNT AUTOMATIC 还是 COMMITCOUNT n,都可能发生此情况。

    将强制应用程序关闭数据库,并回滚当前工作单元。 要避免处理在重试导入操作时已落实的行,请使用 RESTARTCOUNTSKIPCOUNT 命令参数。

RESTARTCOUNT n
指定要在记录 n+ 1 处启动导入操作。 将跳过前 n 条记录。 此选项的功能相当于 SKIPCOUNTRESTARTCOUNTSKIPCOUNT 互斥。
SKIPCOUNT n
指定要在记录 n+ 1 处启动导入操作。 将跳过前 n 条记录。 此选项的功能相当于 RESTARTCOUNTSKIPCOUNTRESTARTCOUNT 互斥。
ROWCOUNT n
指定要导入 (插入或更新) 的文件中物理记录的编号 n 。 允许用户从文件中仅导入 n 行,从 SKIPCOUNTRESTARTCOUNT 选项所确定的记录开始。 如果未指定 SKIPCOUNTRESTARTCOUNT 选项,那么将导入前 n 行。 如果指定了 SKIPCOUNT mRESTARTCOUNT m ,那么将导入到 m+n 的行 m+ 1。 使用复合插入时,用户指定的 ROWCOUNT n 将向上舍入为复合计数值的第一个整数倍。
WARNINGCOUNT n
在出现 n 个警告后停止导入操作。 如果预期没有警告,但需要验证是否使用了正确的文件和表,请设置此参数。 如果未正确指定导入文件或目标表,那么 IMPORT 实用程序将为它尝试导入的每一行生成警告,这将导致导入失败。 如果 n 为零,或者未指定此选项,那么无论发出多少警告,导入操作都将继续。
NOTIMEOUT
指定 IMPORT 实用程序在等待锁定时不会超时。 此选项将取代 locktimeout 数据库配置参数。 其他应用程序不受影响。
MESSAGES message-file
指定导入操作期间发生的警告和错误消息的目标。 如果该文件已存在,那么 IMPORT 实用程序将追加该信息。 如果未指定文件的完整路径,那么实用程序将使用当前目录和缺省驱动器作为目标。 如果省略了 message-file ,那么会将消息写入标准输出。
INSERT
将导入的数据添加到表中,而不更改现有表数据。
INSERT_UPDATE
将导入的数据行添加到目标表,或者使用匹配的主键更新 (目标表的) 现有行。
REPLACE
通过截断数据对象从表中删除所有现有数据,并插入导入的数据。 不会更改表定义和索引定义。 仅当表存在时,才能使用此选项。 如果在层次结构之间移动数据时使用此选项,那么只能替换整个层次结构 (而不是单个子表) 的数据。

当您导入到昵称时,此参数无效。

此选项不采用 CREATE TABLE 语句的 NOT LOGGED 初始 (NLI) 子句或 ALTER TABLE 语句的 ACTIVE NOT LOGGED 初始子句。

此选项不能用于将数据导入到系统周期时态表中。

如果在与调用 NLI 子句的 CREATE TABLE 或 ALTER TABLE 语句相同的事务中执行带有 REPLACE 选项的导入,那么该导入将不采用 NLI 子句。 将记录所有插入操作。

Workaround 1
使用 DELETE 语句删除表的内容,然后使用 INSERT 语句调用 import
Workaround 2
删除该表并重新创建该表,然后使用 INSERT 语句调用导入。
REPLACE_CREATE
注: 不推荐使用 REPLACE_CREATE 参数,在将来的发行版中可能会将其除去。 有关其他详细信息,请参阅 不推荐使用 IMPORT 命令选项 CREATE 和 REPLACE_CREATE

如果表存在,请通过截断数据对象从表中删除所有现有数据,并在不更改表定义或索引定义的情况下插入导入的数据。

如果该表不存在,请在数据库的代码页中创建表和索引定义以及行内容。 请参阅 导入的表重新创建 以获取限制列表。

此选项只能与 IXF 文件配合使用。 如果在层次结构之间移动数据时使用此选项,那么只能替换整个层次结构 (而不是单个子表) 的数据。

当您导入到昵称时,此参数无效。

INTO table-name
指定要将数据导入到其中的数据库表。 此表不能是系统表, 已创建的临时表,已声明的临时表或摘要表。

应该使用标准表名或非标准表名时,可以将别名用于 INSERTINSERT_UPDATEREPLACE(对于较早的服务器除外)。 限定表名的格式为: schema.tablenameschema 是用于创建表的用户名。

如果数据库表包含隐式隐藏列,那么必须指定导入操作中是否包含隐藏列的数据。 使用下列其中一种方法来指示是否包含隐藏列的数据:
  • 使用 insert-column 来显式指定要在其中插入数据的列。
    db2 import from delfile1 of del
       insert into table1 (c1, c2, c3,...)
  • 使用某个隐藏列文件类型修饰符:指定 implicitlyhiddeninclude(如果输入文件包含隐藏列的数据)或 implicitlyhiddenmissing(如果输入文件未包含隐藏列的数据)。
    db2 import from delfile1 of del modified by implicitlyhiddeninclude
       insert into table1 
  • 当数据移动实用程序迂到具有隐式隐藏列的表时,请在客户机端使用 DB2_DMU_DEFAULT 注册表变量来设置缺省行为。
    db2set DB2_DMU_DEFAULT=IMPLICITLYHIDDENINCLUDE
    db2 import from delfile1 of del insert into table1 
insert-column
指定要在其中插入数据的表或视图中的列的名称。
ALL TABLES
仅用于层次结构的隐式关键字。 导入层次结构时,缺省值是导入按遍历顺序指定的所有表。
sub-table-list
对于带有 INSERTINSERT_UPDATE 选项的类型表,将使用子表名称列表来指示要将数据导入到其中的子表。
HIERARCHY
指定要导入分层数据。
STARTING sub-table-name
仅用于层次结构的关键字,请求从 sub-table-name开始的缺省顺序。 对于 PC/IXF 文件,缺省顺序是存储在输入文件中的顺序。 缺省顺序是 PC/IXF 文件格式的唯一有效顺序。
traversal-order-list
对于带有 INSERTINSERT_UPDATEREPLACE 选项的类型表,将使用子表名称列表来指示层次结构中导入子表的遍历顺序。
CREATE
注: 不推荐使用 CREATE 参数,在将来的发行版中可能会将其除去。 有关其他详细信息,请参阅 IMPORT 命令选项 CREATEREPLACE_CREATE 不推荐

在数据库的代码页中创建表定义和行内容。 如果数据是从 Db2 表,子表或层次结构导出的,那么将创建索引。 如果此选项对层次结构执行操作,并且数据是从 Db2导出的,那么还将创建类型层次结构。 此选项只能与 IXF 文件配合使用。

当您导入到昵称时,此参数无效。

注: 如果数据是从 MVS™ 主机数据库导出的,并且包含 LONGVAR 字段,其长度 (按页面大小计算) 超过 254 ,那么 CREATE 可能会因为行太长而失败。 请参阅 导入的表重新创建 以获取限制列表。 在这种情况下,应该手动创建表,并且应该调用带有 INSERTIMPORT ,或者应该使用 LOAD 命令。
AS ROOT TABLE
创建一个或多个子表作为独立表层次结构。
UNDER sub-table-name
指定用于创建一个或多个子表的父表。
IN tablespace-name
用于确定将创建表的表空间。 表空间必须存在,并且必须是 REGULAR 表空间或 LARGE 表空间。 如果未指定其他表空间,那么所有表部件都将存储在此表空间中。 如果未指定此子句,那么将在由授权标识创建的表空间中创建该表。 如果找不到任何表,那么会将该表放入缺省表空间 USERSPACE1中。 如果已删除 USERSPACE1 ,那么表创建将失败。
INDEX IN tablespace-name
标识将在其中创建表上的任何索引的表空间。 仅当 IN 子句中指定的主表空间是 DMS 表空间时,才允许此选项。 指定的表空间必须存在,并且必须是 REGULAR 或 LARGE DMS 表空间。
注: 仅当创建表时,才能指定将包含索引的表空间。
LONG IN tablespace-name
标识将在其中存储任何长列 (LONG VARCHAR , LONG VARGRAPHIC , LOB 数据类型或具有任何这些作为源类型的单值类型) 的值的表空间。 仅当 IN 子句中指定的主表空间是 DMS 表空间时,才允许使用此选项。 表空间必须存在,并且必须是 LARGE DMS 表空间。

示例

示例 1

以下示例显示如何将信息从 myfile.ixf 导入到 STAFF 表中:
   db2 import from myfile.ixf of ixf messages msg.txt insert into staff

SQL3150N  The H record in the PC/IXF file has product "DB2    01.00", date
"19970220", and time "140848".
 
SQL3153N  The T record in the PC/IXF file has name "myfile", 
qualifier "        ", and source "            ".
 
SQL3109N  The utility is beginning to load data from file "myfile".
 
SQL3110N  The utility has completed processing.  "58" rows were read 
from the input file.
 
SQL3221W  ...Begin COMMIT WORK. Input Record Count = "58".
 
SQL3222W  ...COMMIT of any database changes was successful.
 
SQL3149N  "58" rows were processed from the input file.  "58" rows were
successfully inserted into the table.  "0" rows were rejected.

示例 2 (导入到具有标识列的表中)

TABLE1 有 4 列:
  • C1 VARCHAR(30)
  • C2 INT GENERATED BY DEFAULT AS IDENTITY
  • C3 DECIMAL(7,2)
  • C4 CHAR(1)

TABLE2 与 TABLE1 相同,但 C2 是 GENERATED ALWAYS 标识列。

DATAFILE1 格式的数据记录 (DEL 格式):
   "Liszt"
   "Hummel",,187.43, H
   "Grieg",100, 66.34, G
   "Satie",101, 818.23, I
DATAFILE2 格式的数据记录 (DEL 格式):
   "Liszt", 74.49, A
   "Hummel", 0.01, H
   "Grieg", 66.34, G
   "Satie", 818.23, I
以下命令为行 1 和 2 生成身份值,因为在 DATAFILE1 中没有为这些行提供身份值。 但是,为行 3 分配了用户提供的身份值 100 ,为行 4 分配了用户提供的身份值 101。
   db2 import from datafile1.del of del replace into table1
要将 DATAFILE1 导入到 TABLE1 中,以便为所有行生成身份值,请发出下列其中一个命令:
   db2 import from datafile1.del of del method P(1, 3, 4)
      replace into table1 (c1, c3, c4)
   db2 import from datafile1.del of del modified by identityignore
      replace into table1
要将 DATAFILE2 导入到 TABLE1 中,以便为每行生成身份值,请发出下列其中一个命令:
   db2 import from datafile2.del of del replace into table1 (c1, c3, c4)
   db2 import from datafile2.del of del modified by identitymissing
      replace into table1

如果将 DATAFILE1 导入到 TABLE2 中而不使用任何与身份相关的文件类型修饰符,那么将插入行 1 和 2 ,但将拒绝行 3 和 4 ,因为它们提供自己的非 NULL 值,并且标识列为 GENERATED ALWAYS。

使用 XMLVALIDATE 子句的示例

示例 1 (XMLVALIDATE USING XDS)

对于以下 XMLVALIDATE 子句:
XMLVALIDATE USING XDS
  IGNORE (S1.SCHEMA_A)
  MAP ((S1.SCHEMA_A, S2.SCHEMA_B))
由于语法无效,导入将失败,因为 S1.SCHEMA_A 的 IGNORE 将与 S1.SCHEMA_A 的 MAP 冲突到 S2.SCHEMA_B。

示例 2 (XMLVALIDATE USING XDS)

对于以下 XMLVALIDATE 子句:
XMLVALIDATE USING XDS
  DEFAULT S8.SCHEMA_H
  IGNORE (S9.SCHEMA_I, S10.SCHEMA_J)
  MAP ((S1.SCHEMA_A, S2.SCHEMA_B), (S3.SCHEMA_C, S5.SCHEMA_E),
    (S6.SCHEMA_F, S3.SCHEMA_C), (S4.SCHEMA_D, S7.SCHEMA_G))
对于包含以下 XDS 的 XML 列:
<XDS FIL='xmlfile.001.xml' />
SQL 标识为 "S8.SCHEMA_H" 的 XML 模式用于验证文件 "xmlfile.001.xml" 中的文档,因为 "S8.SCHEMA_H" 已指定为要使用的缺省模式。
对于包含以下 XDS 的 XML 列:
<XDS FIL='xmlfile.002.xml' OFF='10' LEN='500' SCH='S10.SCHEMA_J' />
不会对文件 "xmlfile.002.xml" 中的文档进行模式验证,因为虽然 XDS 将 "S10.SCHEMA_J" 指定为要使用的模式,但该模式是 IGNORE 子句的一部分。 文档内容可以在文件中的字节偏移 10 处找到(也就是 第 11 个字节),并且长度为 500 个字节。
对于包含以下 XDS 的 XML 列:
<XDS FIL='xmlfile.003.xml' SCH='S6.SCHEMA_F' />
SQL 标识为 "S3.SCHEMA_C" 的 XML 模式用于验证文件 "xmlfile.003.xml" 中的文档。 这是因为 MAP 子句指定应该将模式 "S6.SCHEMA_F" 映射到模式 "S3.SCHEMA_C"。 请注意,未执行进一步的映射,因此模式 "S3.SCHEMA_C" 到模式 "S5.SCHEMA_E" 的映射在这种情况下不适用。
对于包含以下 XDS 的 XML 列:
<XDS FIL='xmlfile.004.xml' SCH='S11.SCHEMA_K' />
SQL 标识为 "S11.SCHEMA_K" 的 XML 模式用于验证文件 "xmlfile.004.xml" 中的文档。 请注意,在这种情况下, DEFAULTIGNOREMAP 规范都不适用。

示例 3 (XMLVALIDATE USING XDS)

对于以下 XMLVALIDATE 子句:
XMLVALIDATE USING XDS
  DEFAULT S1.SCHEMA_A
  IGNORE (S1.SCHEMA_A)
对于包含以下 XDS 的 XML 列:
<XDS FIL='xmlfile.001.xml' />
具有 SQL 标识 "S1.SCHEMA_A" 的 XML 模式用于验证文件 "xmlfile.001.xml" 中的文档,因为 "S1.SCHEMA_1" 已指定为要使用的缺省模式。
对于包含以下 XDS 的 XML 列:
<XDS FIL='xmlfile.002.xml' SCH='S1.SCHEMA_A' />
不会对文件 "xmlfile.002" 中的文档进行模式验证,因为虽然 XDS 将 "S1.SCHEMA_A" 指定为要使用的模式,但该模式是 IGNORE 子句的一部分。

示例 4 (XMLVALIDATE USING XDS)

对于以下 XMLVALIDATE 子句:
XMLVALIDATE USING XDS
  DEFAULT S1.SCHEMA_A
  MAP ((S1.SCHEMA_A, S2.SCHEMA_B), (S2.SCHEMA_B, S1.SCHEMA_A))
对于包含以下 XDS 的 XML 列:
<XDS FIL='xmlfile.001.xml' />
具有 SQL 标识 "S1.SCHEMA_A" 的 XML 模式用于验证文件 "xmlfile.001.xml" 中的文档,因为 "S1.SCHEMA_1" 已指定为要使用的缺省模式。 请注意,由于已应用 DEFAULT 子句,因此随后不会应用 MAP 子句。 因此,模式 "S1.SCHEMA_A" 到模式 "S2.SCHEMA_B" 的映射在此情况下不适用。
对于包含以下 XDS 的 XML 列:
<XDS FIL='xmlfile.002.xml' SCH='S1.SCHEMA_A' />
SQL 标识为 "S2.SCHEMA_B" 的 XML 模式用于验证文件 "xmlfile.002.xml" 中的文档。 这是因为 MAP 子句指定应该将模式 "S1.SCHEMA_A" 映射到模式 "S2.SCHEMA_B"。 请注意,未执行进一步的映射,因此模式 "S2.SCHEMA_B" 到模式 "S1.SCHEMA_A" 的映射在这种情况下不适用。
对于包含以下 XDS 的 XML 列:
<XDS FIL='xmlfile.003.xml' SCH='S2.SCHEMA_B' />
SQL 标识为 "S1.SCHEMA_A" 的 XML 模式用于验证文件 "xmlfile.003.xml" 中的文档。 这是因为 MAP 子句指定应该将模式 "S2.SCHEMA_B" 映射到模式 "S1.SCHEMA_A"。 请注意,未执行进一步的映射,因此模式 "S1.SCHEMA_A" 到模式 "S2.SCHEMA_B" 的映射在此情况下不适用。

示例 5 (XMLVALIDATE USING SCHEMA)

对于以下 XMLVALIDATE 子句:
XMLVALIDATE USING SCHEMA S2.SCHEMA_B
对于包含以下 XDS 的 XML 列:
<XDS FIL='xmlfile.001.xml' />
使用具有 SQL 标识 "S2.SCHEMA_B" 的 XML 模式验证文件 xmlfile.001.xml 中的文档。
对于包含以下 XDS 的 XML 列:
<XDS FIL='xmlfile.002.xml' SCH='S1.SCHEMA_A' />
使用 SQL 标识为 "S2.SCHEMA_B" 的 XML 模式验证文件 "xmlfile.002.xml" 中的文档。 请注意,将忽略 SCH 属性,因为正在使用 USING SCHEMA 子句指定的模式执行验证。

示例 6 (XMLVALIDATE USING SCHEMALOCATION HINTS)

对于包含以下 XDS 的 XML 列:
<XDS FIL='xmlfile.001.xml' />
所使用的 XML 模式由文档内容中的 schemaLocation 属性确定,如果不存在,那么不会进行验证。
对于包含以下 XDS 的 XML 列:
<XDS FIL='xmlfile.002.xml' SCH='S1.SCHEMA_A' />
所使用的 XML 模式由文档内容中的 schemaLocation 属性确定,如果不存在,那么不会进行验证。 请注意,将忽略 SCH 属性,因为正在使用 SCHEMALOCATION HINTS执行验证。

使用说明

在启动导入操作之前,请确保完成所有表操作并释放所有锁定。 这可以通过在关闭所有打开了 WITH HOLD 的游标之后发出 COMMIT 来完成,也可以通过发出 ROLLBACK 来完成。

IMPORT 实用程序使用 SQL INSERT 语句将行添加到目标表。 该实用程序针对输入文件中的每行数据发出一个 INSERT 语句。 如果 INSERT 语句失败,那么会产生以下两个操作之一:
  • 如果后续 INSERT 语句可能成功,那么会将一条警告消息写入消息文件,然后继续处理。
  • 如果后续 INSERT 语句可能失败,并且可能发生数据库损坏,那么会将错误消息写入消息文件并处理停止。

REPLACEREPLACE_CREATE 操作期间删除旧行之后,该实用程序将执行自动 COMMIT。 因此,如果系统发生故障,或者应用程序在表对象被截断后中断 数据库管理器 ,那么所有旧数据都将丢失。 在使用这些选项之前,请确保不再需要旧数据。

如果在 CREATEREPLACEREPLACE_CREATE 操作期间日志变满,那么该实用程序将对插入的记录执行自动 COMMIT。 如果系统发生故障,或者应用程序在自动 COMMIT 后中断了 数据库管理器 ,那么带有部分数据的表将保留在数据库中。 使用 REPLACEREPLACE_CREATE 选项来重新运行整个导入操作,或者使用 INSERT 并将 RESTARTCOUNT 参数设置为已成功导入的行数。

在 IMPORT 任务结束时,将始终落实来自 IMPORT 命令的更新。 IMPORT 命令还可以在其执行期间执行自动落实,以减小锁定列表和活动日志空间的大小。 如果在 IMPORT 处理期间活动日志已满,那么 IMPORT 命令将回滚。
  • 缺省情况下,不会对 INSERTINSERT_UPDATE 选项执行自动落实。 但是,如果 COMMITCOUNT 参数不为零,那么将执行这些操作。
  • 如果满足下列任何条件,那么脱机导入不会执行自动落实:
    • 目标是视图,而不是表
    • 使用复合插入
    • 使用缓冲插入
  • 缺省情况下,联机导入执行自动落实以释放活动日志空间和锁定列表。 仅当指定了 COMMITCOUNT 值 0 时,才会执行自动落实。

每当 IMPORT 实用程序执行 COMMIT 时,都会将两条消息写入消息文件: 一条消息指示要落实的记录数,另一条消息在 COMMIT 成功后写入。 在失败后重新启动导入操作时,指定要跳过的记录数 (根据上次成功的 COMMIT 确定)。

IMPORT 实用程序接受具有轻微不兼容性问题的输入数据 (例如,可以使用填充或截断来导入字符数据,也可以使用其他数字数据类型来导入数字数据) ,但不接受具有主要不兼容性问题的数据。

如果对象表具有除自身以外的任何从属项,那么不能 REPLACEREPLACE_CREATE 对象表,如果对象表的基本表具有任何从属项 (包括自身) ,那么不能或对象表。 要替换此类表或视图,请执行以下操作:
  1. 删除表为父代的所有外键。
  2. 运行 IMPORT 实用程序。
  3. 更改表以重新创建外键。

如果在重新创建外键时发生错误,请修改数据以保持引用完整性。

从 PC/IXF 文件重新创建表时,不会保留引用约束和外键定义。 (如果先前使用 SELECT *导出数据,那么将保留主键定义 。)

导入到远程数据库需要服务器上有足够的磁盘空间用于输入数据文件,输出消息文件的副本以及数据库大小的潜在增长。

如果对远程数据库运行导入操作,并且输出消息文件很长 (超过 60 KB) ,那么在客户机上返回给用户的消息文件可能缺少来自导入操作中间的消息。 始终保留前 30 KB 的消息信息和后 30 KB 的消息信息。

如果 PC/IXF 文件位于硬盘驱动器上而不是软盘上,那么将 PC/IXF 文件导入到远程数据库的速度要快得多。

对于使用基于表达式的键定义了索引的表,不能将 IMPORT CREATE 选项与 PC/IXF 文件格式配合使用。

数据库表或层次结构必须存在,然后才能导入 ASCDEL 文件格式的数据; 但是,如果该表尚不存在,那么 IMPORT CREATEIMPORT REPLACE_CREATE 会在从 PC/IXF 文件导入数据时创建该表。 对于类型表, IMPORT CREATE 还可以创建类型层次结构和表层次结构。

PC/IXF 导入应用于在数据库之间移动数据 (包括分层数据)。 如果将包含行分隔符的字符数据导出到定界 ASCII (DEL) 文件并由文本传输程序处理,那么包含行分隔符的字段将缩小或扩展。 如果可以从同一客户机访问源数据库和目标数据库,那么不需要执行文件复制步骤。

假定 ASC 和 DEL 文件中的数据位于执行导入的客户机应用程序的代码页中。 在导入不同代码页中的数据时,建议使用允许不同代码页的 PC/IXF 文件。 如果 PC/IXF 文件和 IMPORT 实用程序位于同一代码页中,那么将对常规应用程序进行处理。 如果两者不同,并且指定了 FORCEIN 选项,那么 IMPORT 实用程序假定 PC/IXF 文件中的数据与执行导入的应用程序具有相同的代码页。 即使存在两个代码页的转换表,也会发生此情况。 如果两者不同,那么未指定 FORCEIN 选项,并且存在转换表,那么 PC/IXF 文件中的所有数据都将从文件代码页转换为应用程序代码页。 如果两者不同,那么未指定 FORCEIN 选项,并且没有转换表,那么导入操作将失败。 这仅适用于 AIX® 操作系统上 Db2 客户机上的 PC/IXF 文件。

对于 8 KB 页面上接近 1012 列的限制的表对象,导入 PC/IXF 数据文件可能会导致 Db2 返回错误,因为超过了 SQL 语句的最大大小。 仅当列类型为 CHAR , VARCHAR 或 CLOB 时,才会发生此情况。 此限制不适用于导入 DELASC 文件。 如果正在使用 PC/IXF 文件来创建新表,那么替代方法是使用 db2look 来转储创建该表的 DDL 语句,然后通过 CLP 发出该语句。

Db2 Connect 可用于将数据导入到 DRDA 服务器,例如 Db2 for z/OS®Db2 for VM and VSE 以及 Db2 for OS/400®。 仅支持 PC/IXF 导入 (INSERT 选项)。 还支持 RESTARTCOUNT 参数,但不支持 COMMITCOUNT 参数。

CREATE 选项与类型表配合使用时,请创建 PC/IXF 文件中定义的每个子表; 不能更改子表定义。 将 CREATE 以外的选项与类型表配合使用时,遍历顺序列表允许您指定遍历顺序; 因此,遍历顺序列表必须与导出操作期间使用的遍历顺序列表相匹配。 对于 PC/IXF 文件格式,只需要指定目标子表名称,并使用文件中存储的遍历顺序。

可以使用 IMPORT 实用程序来恢复先前导出到 PC/IXF 文件的表。 该表将返回到导出时所处的状态。

无法将数据导入到系统表, 已创建的临时表,已声明的临时表或摘要表。

不能通过 IMPORT 实用程序创建视图。

支持将其各个部件从 Windows 系统复制到 AIX 系统的多部分 PC/IXF 文件导入。 只能在 IMPORT 命令中指定第一个文件的名称。 例如,IMPORT FROM data.ixf OF IXF INSERT INTO TABLE1。 文件 data.002等应与 data.ixf在同一目录中可用。

在 Windows 操作系统上:
  • 不支持导入逻辑分割的 PC/IXF 文件。
  • 不支持导入格式错误的 PC/IXF 文件。

内部格式的安全标号可能包含换行符。 如果使用 DEL 文件格式导入文件,那么这些换行符可能会被误认为是定界符。 如果存在此问题,请通过在 IMPORT 命令中指定 delprioritychar 文件类型修饰符,将较旧的缺省优先级用于定界符。

如果数据库表包含隐式隐藏列,那么必须指定导入操作中是否包含隐藏列的数据。

IMPORT 实用程序与表中的列数和数据文件中的字段数不匹配。 该实用程序检查数据文件中是否有足够的数据,如果数据文件中的某行不包含足够的数据列,那么如果没有数据的相应表列定义为 NOT NULL ,那么可以使用警告消息来拒绝该行,或者如果相应表列定义为 NULL ,那么可以在没有警告消息的情况下成功插入该行。 另一方面,如果某行包含的列数高于所需列数,那么将处理足够数量的列,同时省略其余的数据列,并且不会给出警告消息。

联合注意事项

使用 IMPORT 命令和 INSERTUPDATEINSERT_UPDATE 命令参数时,必须确保对参与昵称具有 CONTROL 特权。 必须确保执行导入操作时要使用的昵称已存在。 您还应该了解一些限制,如 IMPORT 命令参数部分中所示。

某些数据源 (例如 ODBC) 不支持导入到昵称中。

按列组织的表

  • IMPORT 命令继承与 按列组织的 表相关的所有 INSERT , UPDATE 或 DELETE 语句限制。
  • IMPORT 命令的 CREATE INTO 参数无法创建 按列组织的 表。
  • 针对 按列组织的 表的导入操作使用 CS 隔离级别 (插入操作需要此级别) ,而不是缺省 RS 隔离级别 (在将导入包绑定到数据库时设置)。
  • 不能使用通过从带有 CREATE 参数或 IMPORT 命令的 REPLACE_CREATE 参数的 按列组织 表导出数据而创建的 IXF 文件。

IMPORT 实用程序的文件类型修饰符

表 1. 导入实用程序的有效文件类型修饰符: 所有文件格式
修饰符 描述
compound=x x 是介于 1 与 100 之间 (含 100) 的数字。 使用非原子复合 SQL 来插入数据,并且每次都将尝试 x 语句。

如果指定了此修饰符,并且事务日志不够大,那么导入操作将失败。 事务日志必须足够大,以容纳 COMMITCOUNT指定的行数或数据文件中的行数 (如果未指定 COMMITCOUNT )。 因此,建议指定 COMMITCOUNT 选项以避免事务日志溢出。

此修饰符与以下内容不兼容:
  • INSERT_UPDATE mode
  • 分层表
  • 使用随机 (按生成) 方法的随机分布表
  • 以下修饰符: usedefaultsidentitymissingidentityignoregeneratedmissinggeneratedignore
通用忽略 此修饰符通知 IMPORT 实用程序,所有生成列的数据都存在于数据文件中,但应该忽略。 这将导致实用程序生成所生成列的所有值。 此修饰符不能与 generatedmissing 修饰符配合使用。

使用随机 (按生成) 方法的随机分布表具有内部生成的名为 RANDOM_DISTRIBUTION_KEY的列。 此修饰符不适用于该列,仅适用于表中的其他生成列。 除非在列列表中明确引用,否则将重新生成 RANDOM_DISTRIBUTION_KEY 的值。

生成缺失 如果指定了此修饰符,那么实用程序假定输入数据文件不包含生成的列 (甚至不包含 NULL) 的数据,因此将为每行生成一个值。 此修饰符不能与 generatedignore 修饰符配合使用。

使用随机 (按生成) 方法的随机分布表具有内部生成的名为 RANDOM_DISTRIBUTION_KEY的列。 此修饰符不适用于该列,仅适用于表中的其他生成列。 除非在列列表中明确引用,否则将重新生成 RANDOM_DISTRIBUTION_KEY 的值。

标识忽略 此修饰符通知导入实用程序,标识列的数据存在于数据文件中,但应该忽略。 这将导致实用程序生成所有身份值。 对于 GENERATED ALWAYS 和 GENERATED BY DEFAULT 标识列,行为将相同。 这意味着对于 GENERATED ALWAYS 列,不会拒绝任何行。 此修饰符不能与 identitymissing 修饰符配合使用。
标识缺失 如果指定了此修饰符,那么实用程序将假定输入数据文件不包含标识列 (甚至不包含 NULL) 的数据,因此将为每行生成一个值。 对于 GENERATED ALWAYS 和 GENERATED BY DEFAULT 标识列,行为将相同。 此修饰符不能与 identityignore 修饰符配合使用。
implicitlyhiddeninclude 如果指定了此修饰符,那么实用程序将假定输入数据文件包含隐式隐藏列的数据,并且还将导入此数据。 此修饰符不能与 implicitlyhiddenmissing 修饰符配合使用。 请参阅 注: 部分,以获取有关指定多个修饰符时的优先顺序的信息。

此修饰符不适用于使用随机 (按生成) 方法的随机分布表的隐藏 RANDOM_DISTRIBUTION_KEY 列。 仅当列列表中明确引用了该列时,才会从输入数据文件中读取该列的值。

implicitlyhiddenmissing 如果指定了此修饰符,那么实用程序将假定输入数据文件不包含隐式隐藏列的数据,并且该实用程序将为这些隐藏列生成值。 此修饰符不能与 implicitlyhiddeninclude 修饰符配合使用。 请参阅 注: 部分,以获取有关指定多个修饰符时的优先顺序的信息。

此修饰符不适用于使用随机 (按生成) 方法的随机分布表的隐藏 RANDOM_DISTRIBUTION_KEY 列。 仅当列列表中明确引用了该列时,才会从输入数据文件中读取该列的值。

洛布辛文件 lob-path 指定包含 LOB 数据的文件的路径。

每个路径包含至少一个文件,该文件包含数据文件中的 Lob 位置说明符 (LLS) 指向的至少一个 LOB。 LLS 是 LOB 在 LOB 文件路径中存储的文件中的位置的字符串表示。 LLS 的格式为 filename.ext.nnn.mmm/,其中 filename.ext 是包含 LOB 的文件名, nnn 是文件中 LOB 的偏移量 (以字节计) , mmm 是 LOB 的长度 (以字节计)。 例如,如果字符串 db2exp.001.123.456/ 存储在数据文件中,那么 LOB 位于文件 db2exp.001中的偏移量 123 处,长度为 456 字节。

LOBS FROM 子句指定使用 lobsinfile 修饰符时 LOB 文件所在的位置。 LOBS FROM 子句将隐式激活 LOBSINFILE 行为。 LOBS FROM 子句将用于在导入数据时搜索 LOB 文件的路径列表传达给 IMPORT 实用程序。

要指示空 LOB,请输入大小为 -1。 如果将大小指定为 0,那么它被视为长度为 0 的 LOB。 对于长度为 -1 的空 LOBS,将忽略偏移量和文件名。 例如,空 LOB 的 LLS 可能是 db2exp.001.7.-1/。

无类型标识 仅当导入到单个子表时才有效。 典型用法是从常规表中导出数据,然后调用导入操作 (使用此修饰符) 以将数据转换为单个子表。
节点故障 如果未显式指定目标表列的源列,并且该表列不可为空,那么不会装入缺省值。 如果没有此选项,那么如果未显式指定其中一个目标表列的源列,那么将发生下列其中一个情况:
  • 如果可以为列指定缺省值,那么将装入缺省值
  • 如果该列可空,并且无法为该列指定缺省值,那么将装入 NULL
  • 如果列不可为空,并且无法指定缺省值,那么将返回错误,并且实用程序将停止处理。
NOROWWARNINGS 禁止有关被拒绝行的所有警告。
periodignore 此修饰符通知导入实用程序,在数据文件中存在句点列的数据,但应将其忽略。 当指定此修饰符时,所有周期列值都由实用程序生成。 此修饰符不能与 periodmissing 修饰符配合使用。
periodmissing 如果指定了此修饰符,那么实用程序假定输入数据文件不包含周期列的数据。 当指定此修饰符时,所有周期列值都由实用程序生成。 此修饰符不能与 periodignore 修饰符配合使用。
rowchangetimestampignore 此修饰符通知导入实用程序,行更改时间戳记列的数据存在于数据文件中,但应该忽略。 这将导致实用程序生成所有 ROW CHANGE TIMESTAMP。 对于 GENERATED ALWAYS 和 GENERATED BY DEFAULT 列,行为将相同。 这意味着对于 GENERATED ALWAYS 列,不会拒绝任何行。 此修饰符不能与 rowchangetimestampmissing 修饰符配合使用。
rowchangetimestampmissing 如果指定了此修饰符,那么实用程序将假定输入数据文件不包含行更改时间戳记列 (甚至不包含 NULL) 的数据,因此将为每行生成一个值。 对于 GENERATED ALWAYS 和 GENERATED BY DEFAULT 列,行为将相同。 此修饰符不能与 rowchangetimestampignore 修饰符配合使用。
seclabelchar 指示输入源文件中的安全标号是安全标号值的字符串格式,而不是缺省编码数字格式。 装入时, IMPORT 会将每个安全标号转换为内部格式。 如果字符串的格式不正确,那么不会装入该行并返回警告 (SQLSTATE 01H53)。 如果字符串不表示作为保护表的安全策略的一部分的有效安全标号,那么不会装入该行,并且会返回警告 (SQLSTATE 01H53, SQLCODE SQL3243W)。

如果指定了 seclabelname 修饰符,那么不能指定此修饰符,否则导入将失败并返回错误 (SQLCODE SQL3525N)。

Seclabelname 指示输入源文件中的安全标号由其名称而不是缺省编码数字格式指示。 IMPORT 会将名称转换为相应的安全标号 (如果存在)。 如果不存在具有保护表的安全策略的指示名称的安全标号,那么不会装入该行,并且会返回警告 (SQLSTATE 01H53, SQLCODE SQL3244W)。

如果指定了 seclabelchar 修饰符,那么不能指定此修饰符,否则导入失败并返回错误 (SQLCODE SQL3525N)。

注: 如果文件类型为 ASC ,那么安全标号的名称后面的任何空格都将被解释为名称的一部分。 要避免此情况,请使用 striptblank 文件类型修饰符来确保除去空格。
transactionidignore 此修饰符通知 IMPORT 实用程序 TRANSACTION START ID 列的数据存在于数据文件中,但应该忽略这些数据。 当指定此修饰符时,TRANSACTION START ID 列的值由实用程序生成。 此修饰符不能与 transactionidmissing 修饰符配合使用。
transactionidmissing 如果指定了此修饰符,那么实用程序假定输入数据文件不包含 TRANSACTION START ID 列的数据。 当指定此修饰符时,TRANSACTION START ID 列的值由实用程序生成。 此修饰符不能与 transactionidignore 修饰符配合使用。
使用缺省值 如果已指定目标表列的源列,但它不包含一个或多个行实例的数据,那么将装入缺省值。 缺少数据的示例是:
  • 对于 DEL 文件: 两个相邻的列定界符 (",,") 或由任意数目的空格 (",,") 分隔的两个相邻列定界符 为列值指定。
  • 对于 DEL/ASC 文件: 没有足够列的行,或者对于原始规范不够长的行。
    注: 对于 ASC 文件,不会将 NULL 列值视为显式缺失,并且不会将缺省值替换为 NULL 列值。 NULL 列值由数字、日期、时间和/时间戳记列的所有空格字符表示,或使用任何类型的列的 NULL INDICATOR 表示列为 NULL。
没有此选项,如果源列不包含行实例的数据,那么将发生以下情况之一:
  • 对于 DEL/ASC 文件: 如果该列可空,那么将装入 NULL。 如果该列不可空,那么该实用程序将拒绝该行。
如果输入数据在尝试更新现有行时缺少属于主键的列的值,那么不能在 INSERT_UPDATE 方式下使用 usedefaults 文件类型修饰符。 未更新现有行,并且返回了 SQL3116W 。
表 2. 导入实用程序的有效文件类型修饰符 :ASCII 文件格式 (ASC/DEL)
修饰符 描述
codepage=x x 是 ASCII 字符串。 此值解释为输入数据集中数据的代码页。 在导入操作期间,将字符数据从此代码页转换为应用程序代码页。
下列规则适用:
  • 对于纯 DBCS (图形) 混合 DBCS 和 EUC ,定界符限制在 x00 到 x3F(含) 的范围内。
  • nullindchar 必须指定包含在代码点 x20 和 x7F(含) 之间的标准 ASCII 集合中的符号。 这是指 ASCII 符号和代码点。
注:
  1. 如果在将代码页从应用程序代码页转换为数据库代码页时发生数据扩展,那么可能会截断数据并导致数据丢失。
dateformat= "x" x 是源文件中的日期格式。2 有效日期元素为:
YYYY
年(0000 到 9999 范围内的四位数)
M
月(1 到 12 范围内的一位数或两位数)
MM
月份 (两个数字,范围从 01 到 12; 与 M 互斥)
D
日(1 到 31 范围内的一位数或两位数)
DD
天 (两位数字,范围从 01 到 31; 与 D 互斥)
DDD
年内某日(001 到 366 范围内的三位数;与其他日或月元素互斥)
对于每个未指定的元素,将会指定缺省值 1。 以下是日期格式的一些示例:
   "D-M-YYYY"
   "MM.DD.YYYY"
   "YYYYDDD"
隐式十进制 隐式小数点的位置由列定义确定;不再假定其位于值末尾。 例如,12345 装入到 DECIMAL(8,2) 列作为 123.45不是 12345.00
timeformat= "x" x 是源文件中的时间格式。2 有效时间元素为:
H
小时(对于 12 小时制,这是 0-12 范围内的一位数或两位数,对于 24 小时制,这是 0-24 范围内的一位数或两位数)
HH
小时(对于 12 小时制,这是 00-12 范围内的两位数,对于 24 小时制,这是 00-24 范围内的两位数;与 H 互斥)
M
分钟(0 到 59 范围内的一位数或两位数)
MM
分钟 (两位数字,范围从 00 到 59; 与 M 互斥)
S
秒(0 到 59 范围内的一位数或两位数)
SS
秒(00 到 59 范围内的两位数;与 S 互斥)
SSSSS
每一天午夜后的秒(00000 到 86400 范围内的 5 位数;与其他时间元素互斥)
TT
子午线指示符 (AM 或 PM)
将为未指定的每个元素分配缺省值 0 。 时间格式的一些示例是:
   "HH:MM:SS"
   "HH.MM TT"
   "SSSSS"
timestampformat= "x" x 是源文件中时间戳记的格式。2 有效时间戳记元素为:
YYYY
年(0000 到 9999 范围内的四位数)
M
月(1 到 12 范围内的一位数或两位数)
MM
月份 (两位数字,范围从 01 到 12; 与 M 和 MMM 互斥)
MMM
Month (月份名称的三字母不区分大小写的缩写; 与 M 和 MM 互斥)
D
日(1 到 31 范围内的一位数或两位数)
DD
天 (两位数字,范围从 01 到 31; 与 D 互斥)
DDD
年内某日(001 到 366 范围内的三位数;与其他日或月元素互斥)
H
小时(对于 12 小时制,这是 0-12 范围内的一位数或两位数,对于 24 小时制,这是 0-24 范围内的一位数或两位数)
HH
小时(对于 12 小时制,这是 00-12 范围内的两位数,对于 24 小时制,这是 00-24 范围内的两位数;与 H 互斥)
M
分钟(0 到 59 范围内的一位数或两位数)
MM
分钟 (两位数字,范围从 00 到 59; 与 M 互斥,分钟)
S
秒(0 到 59 范围内的一位数或两位数)
SS
秒(00 到 59 范围内的两位数;与 S 互斥)
SSSSS
每一天午夜后的秒(00000 到 86400 范围内的 5 位数;与其他时间元素互斥)
U (1 到 12 次)
小数秒数 (出现 U 的次数表示从 0 到 9 的每个数字的位数
TT
子午线指示符 (AM 或 PM)
为未指定的 YYYY , M , MM , D , DD 或 DDD 元素指定缺省值 1 。 将缺省值 'Jan' 分配给未指定的 MMM 元素。 将为所有其他未指定的元素分配缺省值 0 。 以下是时间戳记格式的示例:
   "YYYY/MM/DD HH:MM:SS.UUUUUU"

MMM 元素的有效值包括: 'jan''feb''mar''apr''may''jun''jul''aug''sep''oct''nov''dec'。 这些值区分大小写。

以下示例说明如何将包含用户定义的日期和时间格式的数据导入到名为 schedule 的表中:
   db2 import from delfile2 of del
      modified by timestampformat="yyyy.mm.dd hh:mm tt"
      insert into schedule
usegraphiccodepage 如果给出了 usegraphiccodepage ,那么假定要导入到图形或双字节字符大对象 (DBCLOB) 数据字段中的数据位于图形代码页中。 并且,假定其余数据采用字符代码页。 该图形代码页与该字符代码页相关联。 IMPORT 通过 codepage 修饰符 (如果已指定) 或通过应用程序的代码页 (如果未指定 codepage 修饰符) 来确定字符代码页。

仅当要恢复的表具有图形数据时,才应将此修饰符与删除表恢复所生成的定界数据文件结合使用。

限制

usegraphiccodepage 修饰符不得与 EXPORT 实用程序创建的 DEL 文件一起指定,因为这些文件仅包含一个代码页编码的数据。 文件中的双字节字符大对象 (DBCLOB) 也会忽略 usegraphiccodepage 修饰符。

xmlchar 指定 XML 文档在字符代码页中编码。

此选项对于处理在指定字符代码页中编码但不包含编码声明的 XML 文档很有用。

对于每个文档,如果存在声明标记并且包含编码属性,那么编码必须与字符代码页匹配,否则包含该文档的行将被拒绝。 请注意,字符代码页是由 codepage 文件类型修饰符指定的值,或者是应用程序代码页 (如果未指定)。 缺省情况下,文档采用 Unicode 编码,或者它们包含具有 encoding 属性的声明标记。

XML 图形 指定 XML 文档在指定的图形代码页中编码。

此选项对于处理在特定图形代码页中编码但不包含编码声明的 XML 文档很有用。

对于每个文档,如果存在声明标记并且包含编码属性,那么该编码必须与图形代码页匹配,否则包含该文档的行将被拒绝。 请注意,图形代码页是 codepage 文件类型修饰符指定的值的图形组件,或者应用程序代码页的图形组件 (如果未指定)。 缺省情况下,文档以 Unicode 编码,或者它们包含具有编码属性的声明标记。

注: 如果使用 IMPORT 命令指定了 xmlgraphic 修饰符,那么必须在 UTF-16 代码页中对要导入的 XML 文档进行编码。 否则,可能会因解析错误而拒绝 XML 文档,或者可能会因数据损坏而将其导入到表中。
表 3. 导入实用程序的有效文件类型修饰符 :ASC (非定界 ASCII) 文件格式
修饰符 描述
不检查长度 如果指定了 nochecklengths ,那么将尝试导入每行,即使源数据的列定义超过目标表列的大小也是如此。 如果代码页转换导致源数据缩小,那么可以成功导入此类行; 例如,源中的 4 字节 EUC 数据可以缩小到目标中的 2 字节 DBCS 数据,并且需要一半的空间。 如果已知尽管列定义不匹配,但源数据在所有情况下都适合,那么此选项特别有用。
nullindchar=x x 是单个字符。 将表示空值的字符更改为 xx 的缺省值为 Y3

对于 EBCDIC 数据文件,此修饰符区分大小写,但字符为英文字母时除外。 例如,如果将空指示符字符指定为字母 N,那么 n 也可识别为空指示符。

reclen=x x 是一个整数,最大值为 32 767。将为每行读取 x 个字符,并且不使用换行符来指示行尾。
分割空白 将数据装入到变长字段中时,截断任何尾部空格。 如果未指定此选项,那么将保留空格。
在以下示例中, striptblanks 会导致 IMPORT 实用程序截断尾部空格:
   db2 import from myfile.asc of asc
      modified by striptblanks
      method l (1 10, 12 15) messages msgs.txt
      insert into staff

此选项不能与 striptnulls 一起指定。 这些是互斥选项。 此选项将替换废弃的 t 选项,该选项仅支持较早的兼容性。

striptnulls 将数据装入到变长字段中时,截断任何尾部 NULL (0x00 字符)。 如果未指定此选项,那么将保留 NULL。

此选项不能与 striptblanks 一起指定。 这些是互斥选项。 此选项将替换废弃的 padwithzero 选项,该选项仅支持较早的兼容性。

表 4. 导入实用程序的有效文件类型修饰符 :DEL (定界 ASCII) 文件格式
修饰符 描述
chardelx x 是单个字符串定界符。 缺省值为双引号 (")。 使用指定的字符代替双引号将字符串括起来。34 如果要显式指定双引号作为字符串定界符,那么应按如下所示进行指定:
    modified by chardel""
单引号 (') 也可以指定为字符串定界符。 在以下示例中, chardel'' 使 IMPORT 实用程序将它迂到的任何单引号 (') 解释为字符串定界符:
   db2 "import from myfile.del of del
      modified by chardel''
      method p (1, 4) insert into staff (id, years)"
coldelx x 是单个字符列分隔符。 缺省值为逗号 (,)。 使用指定的字符来代替逗号,以指示列的结束。34
在以下示例中, coldel; 使 IMPORT 实用程序将它迂到的任何分号 (;) 解释为列定界符:
   db2 import from myfile.del of del
      modified by coldel;
      messages msgs.txt insert into staff
DECPLUSBLANK 加号字符。 使正十进制值以空格作为前缀,而不是加号 (+)。 缺省操作是使用加号作为正十进制值的前缀。
decptx x 是句点作为小数点字符的单个字符。 缺省值为句点 (.)。 使用指定的字符代替句点作为小数点字符。34
在以下示例中, decpt; 使 IMPORT 实用程序将它迂到的任何分号 (;) 解释为小数点:
   db2 "import from myfile.del of del
      modified by chardel''
      decpt; messages msgs.txt insert into staff"
delprioritychar 定界符的当前缺省优先级为:记录定界符、字符分隔符、列分隔符。 此修饰符通过将定界符优先级还原为: 字符定界符,记录定界符和列定界符来保护依赖于较旧优先级的现有应用程序。 语法:
   db2 import ... modified by delprioritychar ...
例如,给定以下 DEL 数据文件:
   "Smith, Joshua",4000,34.98<row delimiter>
   "Vincent,<row delimiter>, is a manager", ...
   ... 4005,44.37<row delimiter>

在指定了 delprioritychar 修饰符的情况下,此数据文件中将只有两行。 第二行定界符将解释为第二行的第一数据列的一部分,而第一行定界符和第三行定界符将解释为实际记录定界符。 If this modifier is specified, there will be three rows in this data file, each delimited by a <row delimiter>.

凯普空白 在类型为 CHAR、VARCHAR、LONG VARCHAR 或 CLOB 的每个字段中保留前导空格和尾部空格。 如果没有此选项,那么将移除不在字符定界符内的所有前导空格和尾部空格,并将 NULL 插入到所有空白字段的表中。
nochardel 导入实用程序将假定在列定界符之间找到的所有字节都是列数据的一部分。 字符定界符将作为列数据的一部分进行解析。 如果使用 Db2 导出数据 (除非在导出时指定了 nochardel) ,那么不应指定此选项。 提供此修饰符的目的是支持不具有字符定界符的供应商数据文件。 使用不当可能会导致数据丢失或损坏。

此选项不能与 chardelxdelprioritycharnodoubledel 一起指定。 这些是互斥选项。

nodoubledel 禁止识别双字符定界符。
表 5。 导入实用程序的有效文件类型修饰符 :IXF 文件格式
修饰符 描述
强力 指示实用程序在代码页不匹配的情况下接受数据,并禁止在代码页之间进行转换。

将检查固定长度的目标字段,以验证它们对于数据是否足够大。 如果指定了 nochecklengths ,那么不会执行任何检查,并且会尝试导入每行。

因代克西夫 指示实用程序删除当前在现有表上定义的所有索引,并从 PC/IXF 文件中的索引定义创建新的索引。 仅当替换表的内容时,才能使用此选项。 它不能与视图一起使用,也不能在指定 insert-column 时使用。
indexschema=模式 在创建索引期间,将指定的 模式 用于索引名。 如果未指定 schema (但指定了关键字 indexschema ) ,请使用连接用户标识。 如果未指定该关键字,请使用 IXF 文件中的模式。
不检查长度 如果指定了 nochecklengths ,那么将尝试导入每行,即使源数据的列定义超过目标表列的大小也是如此。 如果代码页转换导致源数据缩小,那么可以成功导入此类行; 例如,源中的 4 字节 EUC 数据可以缩小到目标中的 2 字节 DBCS 数据,并且需要一半的空间。 如果已知尽管列定义不匹配,但源数据在所有情况下都适合,那么此选项特别有用。
福塞克雷亚特 指定在执行导入操作期间返回 SQL3311N 之后,应该使用可能的缺失或受限信息创建表。
表 6。 使用代码页和 usegraphiccodepage 时的 IMPORT 行为
codepage=N usegraphiccodepage IMPORT 行为
不存在 不存在 假定文件中的所有数据都在应用程序代码页中。
已存在 不存在 假定文件中的所有数据都在代码页 N 中。

警告: 如果 N 是单字节代码页,那么在导入到数据库时图形数据将损坏。

不存在 已存在 假定文件中的字符数据位于应用程序代码页中。 假定图形数据位于应用程序图形数据的代码页中。

如果应用程序代码页是单字节的,那么假定所有数据都在应用程序代码页中。

警告: 如果应用程序代码页是单字节的,那么在导入到数据库时,即使数据库包含图形列,图形数据也将损坏。

已存在 已存在 假定字符数据在代码页 N 中。 假定图形数据在 N 的图形代码页中。

如果 N 是单字节或双字节代码页,那么假定所有数据都在代码页 N 中。

警告: 如果 N 是单字节代码页,那么在导入到数据库时图形数据将损坏。

注:
  1. 如果尝试将不受支持的文件类型与 MODIFIED BY 选项配合使用,那么 IMPORT 实用程序不会发出警告。 如果尝试此操作,那么导入操作将失败,并返回错误代码。
  2. 日期格式字符串两旁的双引号是必需的。 字段分隔符不能包含下列任何一项 :a-z , A-Z 和 0-9。 字段分隔符不应与 DEL 文件格式中的字符定界符或字段定界符相同。 如果元素的开始位置和结束位置清晰明确,那么字段分隔符是可选的。 如果使用(取决于修饰符)元素(例如 D、H、M 或 S),那么会存在模糊性,因为条目的长度可变。
    对于时间戳记格式,必须注意避免月份和分钟描述符之间的模糊性,因为它们都使用字母 M。 月份字段必须与其他日期字段相邻。 分钟字段必须与其他时间字段相邻。 以下是一些有歧义的时间戳记格式:
       "M" (could be a month, or a minute)
       "M:M" (Which is which?)
       "M:YYYY:M" (Both are interpreted as month.)
       "S:M:YYYY" (adjacent to both a time value and a date value)
    在不明确的情况下,实用程序将报告错误消息,并且操作将失败。
    以下是一些明确的时间戳记格式:
       "M:YYYY" (Month)
       "S:M" (Minute)
       "M:YYYY:S:M" (Month....Minute)
       "M:H:YYYY:M:D" (Minute....Month)

    某些字符 (例如,双引号和反斜杠) 必须以转义字符 (例如, \) 开头。

  3. 必须在源数据的代码页中指定为 chardel , coldel 或 decpt 文件类型修饰符提供的字符值。
    可以使用语法 xJJ 或 0xJJ指定字符代码点 (而不是字符符号) ,其中 JJ 是代码点的十六进制表示。 例如,要将 # 字符指定为列定界符,请使用下列其中一个语句:
       ... modified by coldel# ...
       ... modified by coldel0x23 ...
       ... modified by coldelX23 ...
  4. 移动数据的定界符注意事项列出了适用于可用作定界符覆盖的字符的限制。
  5. 导入昵称时,不允许使用以下文件类型修饰符:
    • indexixf
    • indexschema
    • dldelfiletype
    • nodefaults
    • usedefaults
    • no_type_idfiletype
    • generatedignore
    • generatedmissing
    • identityignore
    • identitymissing
    • lobsinfile
  6. XML 列不支持 CREATE 方式。
  7. 所有 XML 数据都必须位于与主数据文件分开的 XML 文件中。 对于主数据文件中的每个 XML 列,必须存在 XML 数据说明符 (XDS) (或 NULL 值)。
  8. 除非指定了 XMLCHAR 或 XMLGRAPHIC 文件类型修饰符,否则假定 XML 文档为 Unicode 格式或包含包含编码属性的声明标记。
  9. 包含格式不正确的文档的行将被拒绝。
  10. 如果指定了 XMLVALIDATE 选项,那么在插入文档时,将使用模式信息对成功验证其匹配模式的文档进行注释。 包含无法针对其匹配模式进行验证的文档的行将被拒绝。 要成功执行验证,调用导入的用户所拥有的特权必须至少包含下列其中一项:
    • DBADM 权限
    • 要在验证中使用的 XML 模式的 USAGE 特权
  11. 如果指定了多个后缀为 ignoreincludemissingoverride 的修饰符,那么将按照它们列出的顺序应用这些修饰符。 在以下语句中,非标识列的隐式隐藏列的数据包含在输入数据中。 虽然所有标识列的数据(无论其隐式隐藏状态如何)都不是。
    db2 import from delfile1 of del modified by 
       implicitlyhiddeninclude identitymissing insert into table1 
    但是,更改以下语句中文件类型修饰符的顺序意味着所有隐式隐藏列(包括隐藏标识列)的数据都包含在输入数据中。 虽然未隐式隐藏的标识列的数据不是。
    db2 import from delfile1 of del modified by 
       identitymissing implicitlyhiddeninclude insert into table1 
    如果 DB2_DMU_DEFAULT 注册表变量设置为 IMPLICITLYHIDDENINCLUDE,那么:
    db2set DB2_DMU_DEFAULT=IMPLICITLYHIDDENINCLUDE
    db2 import from delfile1 of del modified by identitymissing insert into table1
    相当于:
    db2 import from delfile1 of del modified by 
       implicitlyhiddeninclude identitymissing insert into table1