DB2 LOAD
除了 DB2 IMPORT,DB2 还提供了一个更快的装入工具 DB2 LOAD,用于将大量数据移至 DB2 UDB 数据库中。不像通过 SQL INSERT 写入数据库的 DB2 IMPORT,DB2 LOAD 直接写入数据库文件。DB2 IMPORT 和 LOAD 都支持用户定义类型(UDT)和 LOB;但是,DB2 LOAD 可以将数据装入分区表中。这两个工具之间的主要区别和使用选择就是性能。DB2 LOAD 比 IMPORT 快得多。
DB2 LOAD 不提供单个记录的日志记录。但是支持重载数据。在装入过程中,DB2 命令 LIST UTILITIES 可以用于监控装入进度。同时,DB2 LOAD 还使用表级锁定,即用户在装入期间无法访问数据。
要使用 DB2 LOAD,您需要 SYSADM、DBADM 或 SYSMAINT 级权限,不然要具有该数据库上的 load 权限和进行 INSERT 和 DELETE 的权限,这取决于所选择的操作。
清单 20 中显示了 DB2 LOAD 的语法。或者,在 DB2 命令提示符处发出 db2 ? import 来查看该语法。
LOAD QUERY TABLE table-name [TO local-message-file] [NOSUMMARY | SUMMARYONLY] [SHOWDELTA] 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} ... ] )] [datalink-specification] [FOR EXCEPTION table-name] [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}] [CHECK 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 datalink-specification: ([DL_LINKTYPE URL][{DL_URL_REPLACE_PREFIX prefix | DL_URL_DEFAULT_PREFIX prefix}] [DL_URL_SUFFIX suffix], ...)
DB2 LOAD 操作可以分成四个阶段。这四个阶段是以连续方式发生的:
- 装入阶段 - 本阶段中,将外部文件中的数据装入表中。对索引进行收集和排序。本阶段中的一件重要事情就是对装入操作进行保存点检查。如果装入失败,就需要该保存点,并且需要执行重载。保存点允许执行这一可重载的功能。本阶段中,无效记录将写入一个消息文件中。
- 构建阶段 - 本阶段中,将构建索引。如果在该阶段中发生故障,装入操作的重新启动将导致构建阶段从头开始。在该阶段期间,将生成消息。
- 删除阶段 - 本阶段中,将注意是否违反惟一性和主键约束。违反的行将写入异常表。如果在该阶段中发生故障,装入操作的重新启动将导致删除阶段从头开始。在该阶段期间,将生成消息。
- 索引复制阶段 - 本阶段中,要将索引从系统临时表空间移至目标表空间。只有在执行装入时为索引的创建指定了系统临时表空间,这一阶段才会发生。在该阶段中,将生成消息。
DB2 LOAD 允许追加或替换数据。在执行装入操作时,将创建一个中间表,以帮助进行装入。可以用 CURSOR 文件类型代替。 同时,还可以选择许多选项,例如:
- WARNINGCOUNT - 指定何时停止装入。当达到 n 条警告时,装入操作将停止。
- CPU_PARALLELISM - 指定 CPU 的并行度。其默认值是一个由 DB2 确定的较明智的值。
- DISK_PARALLELISM - 指定磁盘的并行度。该值确定要派生的线程数目。其默认值是一个由 DB2 确定的较明智的值。
- DATA BUFFER - 指定要使用的 4K 页面的数目。
- TEMPFILES PATH - 指定在装入期间创建中间表时要使用的路径。
- FOR EXCETION - 指定将所有有问题的行写入其中的表。
- DUMPFILE - 指定转储拒绝行错误的文件名。
- NOROWWARNING - 指定对于拒绝行不写入警告。
DB2 LOAD 提供了一些性能调优功能,因为在装入操作期间,可以为创建的页面指定总空间。
- PAGEFREESPACE - 每个数据页留下的空闲百分比。通常,让该值为 DB2 所确定的默认值。
- INDEXFREESPACE - 每个索引页留下的空闲百分比。通常,让该值为 DB2 所确定的默认值。
- TOTALFREESPACE - 追加为空闲空间的表大小百分比。
有关所有其他选项,请查阅 DB2 UDB Data Movement Utilities Guide and Reference。
我们将考查一些关于 DB2 LOAD 如何用于日常操作的例子。与 IMPORT 一样,有三种方式调用 DB2 LOAD,分别是通过使用交互 GUI、命令接口以及通过 API 进行。
- 交互 GUI - 例 1






