IBM ®DB2 ®Universal Database TM(DB2 UDB)数据移动实用工具(导出、导入和载入)支持大量各种各样的选项,几乎支持您可能碰到的任何一种场景,因此相应 DB2 UDB 命令的语法相当复杂。为了最大限度地降低复杂性,但却最大化这些实用工具的通用性,这些命令的语法中包括功能强大的 MODIFIED BY 子句,这是一种根据所使用的输入或输出文件类型来指定处理选项的好方式(见图 1)。这些基于文件类型的处理选项被称作 文件类型修饰符。
图 1. MODIFIED BY 子句包含在 DB2 EXPORT、IMPORT 和 LOAD 命令的语法中。同一命令中可以指定不止一个修饰符。
文件类型修饰符详述
目前存在近 50 个文件类型修饰符(见表 1;单击修饰符名称以跳到后面的表中查看其描述)。某些修饰符是为了让实用工具运行得更快而设计的,但大多数是用于提高数据移动实用工具的通用性和灵活性。
本文描述了所支持的所有文件类型修饰符,并提供了展示如何正确使用它们的工作示例。这些示例来自于命令脚本;您可以自己复制、粘贴以及运行它们。大多数示例是基于 DB2 UDB 中所附带的 SAMPLE 数据库的。少数示例需要 SAMPLE 数据库之外的场景,但是,您可以将到 SAMPLE 数据库的连接作为一个起始点。
表 2 - 6 中描述了这些修饰符。每张独立的表对应着特定的文件类型所支持的修饰符,包括所有文件类型都支持的修饰符、ASC 或 DEL 都支持的修饰符、只被 ASC 支持的修饰符、只被 DEL 支持的修饰符、只被 PC/IXF 支持的修饰符。
文件类型入门
非定界 ASCII(ASC)文件是一个 ASCII 字符流。数据流中的行由行定界符分隔,而行中的每一列则通过起始和结束位置来定义。可以使用 IMPORT 或 LOAD 命令中的 METHOD L 参数来指定这些“成对位置”。每一对都表示一行里的字节位置。不支持到 ASC 文件类型的数据导出。
定界 ASCII(DEL)文件也是一个 ASCII 字符流。数据流中的行由行定界符分隔,行中的列值由列定界符分隔。文件类型修饰符可用于修改这些定界符的默认值。可以使用 IMPORT 或 LOAD 命令中的 METHOD P 参数来指定列位置。您必须小心确保您所选择的定界符字符不包含在需要移动的数据中;否则,可能会出现意想不到的错误!还请记住,不可以将换行符、回车或空格作为定界符,也不可以将默认的小数点(句号)作为字符串定界符。哦,还有另一件事:DATALINK 值的字段分隔符一定不能与用作行、列或字符串定界符的字符相同。
PC/IXF 文件的格式是集成交换格式(Integration Exchange Format,IXF)数据交换体系结构的改编版本,由一些列可变长度的记录构成,包括头记录、表记录、表中每列的列描述符记录以及表中每行的一条或多条数据记录。PC/IXF 文件记录由包含了字符数据的字段组成。
表 1. 版本 8.1.4 为止 DB2 UDB 所支持的导入、导出和载入实用工具的文件类型修饰符。
修饰符 | 适用的文件类型 | 修饰符 | 适用的文件类型 |
anyorder | 所有类型 | indexschema= schema | PC/IXF |
binarynumerics | ASC | keepblanks | DEL |
chardel x | DEL | lobsinfile | 所有类型 |
codepage= x | ASC 或 DEL | no_type_id | 所有类型 |
coldel x | DEL | nochardel | DEL |
compound= x | 所有类型 | nochecklengths | ASC 或 PC/IXF |
dateformat=" x" | ASC 或 DEL | nodefaults | 所有类型 |
datesiso | DEL | nodoubledel | DEL |
decplusblank | DEL | noheader | 所有类型 |
decpt x | DEL | norowwarnings | 所有类型 |
delprioritychar | DEL | nullindchar= x | ASC |
dldel x | DEL | packeddecimal | ASC |
dumpfile= x | ASC 或 DEL | pagefreespace= x | 所有类型 |
fastparse | ASC 或 DEL | reclen= x | ASC |
forcein | PC/IXF | striplzeros | DEL |
generatedignore | 所有类型 | striptblanks | ASC |
generatedmissing | 所有类型 | striptnulls | ASC |
generatedoverride | 所有类型 | timeformat=" x" | ASC 或 DEL |
identityignore | 所有类型 | timestampformat=" x" | ASC 或 DEL |
identitymissing | 所有类型 | totalfreespace= x | 所有类型 |
identityoverride | 所有类型 | usedefaults | 所有类型 |
implieddecimal | ASC 或 DEL | usegraphiccodepage | ASC 或 DEL |
indexfreespace= x | 所有类型 | zoneddecimal | ASC |
indexixf | PC/IXF |
表 2. 可用于所有支持文件类型的文件类型修饰符
修饰符 | Export | Import | Load | 描述 | 示例 |
anyorder | no | no | yes | 指定载入实用工具可以以任何次序处理输入数据,该选项可在对称多处理(SMP)系统上带来更好的性能。如果 LOAD 命令中的 CPU_PARALLELISM 参数值为 1,则忽略该修饰符。 | create table newemp like employee; export to empdata.del of del messages export.msg select * from employee; load from empdata.del of del modified by anyorder messages load.msg insert into newemp cpu_parallelism 2; |
compound x | no | yes | no | 指定 DB2 导入实用工具每次插入一块( x行)数据,而非每次插入一行。这可以导致性能的提高。 x的值可以是 1 至 100 之间的任意整数(包含 1 和 100 在内)。导入实用工具使用非原子复合 SQL 来插入数据:不管是否有错,都会尝试所有的插入。 | create table emptemp like employee; export to empdata.ixf of ixf messages export.msg select * from employee; import from empdata.ixf of ixf modified by compound=100 messages import.msg insert into emptemp; |
generatedignore | no | yes | yes | 指定导入或载入输入文件中的任何生成列的值都会被忽略,并且会为每一行生成一个新的值。 | 考虑载入输入文件 staffdata.del 的内容为:"Dirk",90000.00,1000.00: create table newstaff (name varchar(16) not null, salary decimal(9,2), bonus decimal(9,2) generated always as (salary/10)); load from staffdata.del of del modified by generatedignore messages load.msg insert into newstaff; select * from newstaff; |
generatedmissing | no | yes | yes | 指定导入或载入输入文件不包含任何目标表中生成列的值。 | 考虑载入输入文件 staffdata.del 的内容为:"Crystal",102000.00: create table newstaff (name varchar(16) not null, salary decimal(9,2), bonus decimal(9,2) generated always as (salary/10)); load from staffdata.del of del modified by generatedmissing messages load.msg insert into newstaff; select * from newstaff; |
generatedoverride | no | no | yes | 指定在将数据载入一个带有 GENERATED ALWAYS 列的表中时,要使用载入输入文件中生成列的值。如果您使用了该修饰符,您的表在执行载入操作之后,将处于 检查暂挂状态,以便给您机会验证新数据的完整性。本例中的完整性是指与生成列规范的一致性。若要使表脱离该状态,且 不验证输入值,就在执行载入操作之后发出下列命令: set integrity for < table-name> generated column immediate unchecked 。若要解除该表的检查暂挂状态,且验证输入值,就发出下列命令: set integrity for < table-name> immediate checked 。 | 考虑载入输入文件 staffdata.del 的内容为:"Jack",500000.00,50000: create table newstaff (name varchar(16) not null, salary decimal(9,2), bonus decimal(9,2) generated always as (salary/10)); load from staffdata.del of del modified by generatedoverride messages load.msg insert into newstaff; set integrity for newstaff immediate checked; select * from newstaff; |
identityignore | no | yes | yes | 指定忽略导入或载入输入文件中任何标识列的值,
您可能想查找下面的文章: |