db2 export ,import ,load

本文详细介绍了使用DB2move及db2export、db2import、db2load等工具进行数据导出与导入的方法,并对比了不同文件格式的特点,如ASC、DEL、WSF和IXF等。
export to C:\AIOT_20101222.del of del messages C:\AIOT_20101222.log select * from AIOT

import from C:\AIOT_20101222.del of del messages C:\AIOT_20101222.log  insert into aiot

load client from C:\AIOT_20101222.del of DEL  messages C:\AIOT_20101222.log  insert into bpcogadm.aiot


用于数据移动的文件格式

这个部分简单介绍一下用于DB2数据移动的文件格式,共有四种

1. ASC
非定界ASCII文件,是一个ASCII字符流。数据流中的行由行定界符分隔,而行中的
每一列则通过起始和结束位置来定义。例如:

10 Head Office 160 Corporate New York
15 New England 50 Eastern Boston
20 Mid Atlantic 10 Eastern Washington
38 South Atlantic 30 Eastern Atlanta
42 Great Lakes 100 Midwest Chicago
51 Plains 140 Midwest Dallas
66 Pacific 270 Western San Francisco
84 Mountain 290 Western Denver

2. DEL
定界ASCII文件,也是一个ASCII字符流。数据流中的行由行定界符分隔,
行中的列值由列定界符分隔。文件类型修饰符可用于修改这些定界符的默认值。例如:

10,"Head Office",160,"Corporate","New York"
15,"New England",50,"Eastern","Boston"
20,"Mid Atlantic",10,"Eastern","Washington"
38,"South Atlantic",30,"Eastern","Atlanta"
42,"Great Lakes",100,"Midwest","Chicago"
51,"Plains",140,"Midwest","Dallas"
66,"Pacific",270,"Western","San Francisco"
84,"Mountain",290,"Western","Denver"

3. WSF
work sheet format,工作表格式,用于与Lotus系列的软件进行数据交换。

4. PC/IXF
集成交换格式(Integration Exchange Format,IXF)数据交换体系结构的改编版本,由一些列可变长度的记录构成,包括头记录、表记录、表中每列的列描述符记录以及表中每行的一条或多条数据记录。PC/IXF 文件记录由包含了字符数据的字段组成。

使用db2move导出全部数据

db2move是一个集成式的数据移动工具,它支持导出(export)、导入(import)、装入(load)三种操作方式。其实db2move的这三种工作方式分别是通过简单使用db2 export, db2 import, db2 load指令来完成的。

此部分仅仅介绍其export功能,import和load将在稍后的部分介绍。使用db2move导出的数据文件格式是IXF。

建立并进入数据存放目录:
$ mkdir /home/backup/mydata
$ cd /home/backup/mydata

导出指定的数据库中的全部数据:
$ db2move testdb export –u db2inst1 –p thepasswd

说明:
1,这将会把数据库testdb中的全部数据提取到当前目录(/home/backup/mydata)中。每个表的内容都存储在一个.ixf文件中,每个.ixf文件都有一个与之相对应的.msg文件,.msg文件是描述从表中导出数据时的信息的。另外还有两个文件,db2move.lst用来记录.ixf文件、.msg文件与表的一一对应关系,EXPORT.out记录的是导出数据时的屏幕输出。
2,有关db2move指令更多的细节,请直接执行该指令,将会打印出其帮助信息。

使用db2 export指令导出数据

与上面提到的db2move的export功能不同,db2 export是一个更加细致的导出工具,它支持三种数据文件格式:DEL, WSF, IXF.

以下示范将数据库testdb中表mytbl的数据导出,存储在目录 /home/backup 下。

建立到数据库的连接:
$ db2
db2 => connect to testdb user db2inst1 using thepasswd

以DEL格式导出:
db2 =>
export to /home/backup/mytbl.txt of del select * from mytbl

以IXF格式导出:
db2 => export to /home/backup/mytbl.ixf of ixf select * from mytbl
注:若需要记录导出过程中的message,使用:
db2 => export to /home/backup/mytbl.ixf of ixf
messages /home/backup/mytbl.msg select * from mytbl

断开连接:
db2 => connect reset
db2 => quit
$

更多有关db2 export的帮助,请:
$ db2 ? export

使用db2move导入(import)数据

以db2inst1用户身份登录到Host 2。

创建数据库mytestdb:
$ db2
db2 => create database mytestdb on ‘/home/db2inst1’ using codeset UTF-8 territory CN
db2 => connect to mytestdb user db2inst1 using thepasswd

创建一个pagesize为16K的bufferpool,名为mybigpool:
db2 => create bufferpool mybigpool immediate size 1000 pagesize 16K

创建一个tablespace使用上面创建的bufferpool,名为mybigspace:
db2 => create regular tablespace mybigspace pagesize 16K managed by system using (‘/home/db2inst1/db2inst1/NODE0000/SQL00004/SQLT0003.0’) extentsize 16 overhead 12.67 prefetchsize 16 transferrate 0.18 bufferpool mybigpool dropped table recovery off

注:
extentsize, overhead, prefetchsize, transferrate这几个参数值与所使用的服务器有关,我这里使用的值是基于普通的、使用SCSI硬盘的PC服务器的。

完成空库的创建:
db2 => commit work
db2 => connect reset
db2 => terminate

导入(import)数据:
使用import方式不需要先建表结构,即,准备好一个空库就行了。这一点与load方式不一样,load方式需要先建立表结构。
我将从Host1上导出的全部数据文件(位于Host1的 /home/backup/mydata下)复制到Host2下某个目录下,假定为 /home/movedata
$ cd /home/movedata
$ db2move mytestdb import –u db2inst1 –p thepasswd
此时屏幕上会显示有关导入数据的信息。

存在的问题:
db2move import方式只能导入“普通”的表,如果表中存在自增长的IDENTITY列,那么使用db2move import时,会出错。这是因为,如果IDENTITY列创建表的时候都是定义成always的话,那么在导入数据的时候该列数据是不能被赋值的,而是应该由系统生成,使用db2move无法导入这样的表。对于这种含有IDENTITY列的表,只能使用db2 import指令来进行导入,相关的参数是IDENTITYIGNORE,IDENTITYMISSING。我将在下一部分给出具体的指令操作。
一句题外话:
如果需要实现唯一主键,可以不必使用IDENTITY列,改而使用sequence,这样比较便于维护和管理。

使用db2 import指令导入数据

import和export是一对存在对应关系的指令,有一点不同的是,import支持四种格式:ASC, DEL, WSF, IXF, 而export只支持三种(见上面相应部分的描述)。

以下示范将数据文件/home/movedata/mytbl.ixf导入到数据库mytestdb中。
$ db2
db2 => connect to mytestdb user db2inst1 using thepasswd
db2 => import from /home/movedata/mytbl.ixf of ixf insert into mytbl
db2 => commit work
db2 => connect reset
db2 => quit
$

在上一部分,我有提到,若表中存在自增长的IDENTITY列,需要使用相应的参数才能导入,比如:
db2 => import from /home/movedata/mytbl2.ixf of ixf modified by identityignore insert into mytbl2

 

---------------------------------------------

load from F:\DB2\SQL-fengjin\data.txt of del insert into t

-或者 命令进入到 目录 下  开始执行

load from data.txt of del insert into t

 

<think> 首先,用户的问题是基于站内引用的内容,我需要参考提供的引用。引用是关于DB2LOADIMPORT的Codepage转换,特别是设置codepage=1386时出现乱码的问题。 引用内容总结: - 引用[1]:解释了DB2LOADIMPORT的Codepage转换重要性,定义了Codepage是什么,DB2支持Codepage转换。 - 引用[2]:具体示例,显示设置db2codepage=1386后插入中文显示乱码。 - 引用[3]:详细描述了Codepage在DB2中的层次(操作系统、实例级别、数据库级别),包括Codepage的值如1386对应GBK,1392对应GB18030,1208对应UTF-8;数据库级别的Codepage在创建数据库时设置,不能修改。 用户的具体问题是:查找关于DB2 LOAD命令中设置codepage=1386的相关信息,包括使用方法、遇到的问题及解决方案。 用户提到:"db2 load命令设置codepage=1386的使用说明、问题及解决办法"。所以,我需要聚焦在LOAD命令上,而不是IMPORT或一般设置。 从引用中: - 引用[1]提到了LOADIMPORT的Codepage转换。 - 引用[2]是关于设置db2codepage=1386后插入数据乱码,但用户的问题是关于LOAD命令。 - LOAD命令通常用于批量导入数据,可能涉及Codepage转换。 我需要整合信息,提供: - LOAD命令中如何设置Codepage。 - 设置codepage=1386时可能遇到的问题(如乱码)。 - 解决办法。 系统指令: - 所有行内数学表达式必须使用$...$格式(但这里可能不涉及数学表达式,除非有公式)。 - 独立公式使用$$...$$(可能不适用)。 - LaTeX语法正确(在文本中很少)。 - 使用中文回答。 - 生成相关问题。 - 引用段落末尾自然地添加引用标识,如[^1]。 回答结构: - 回答应结构清晰,逐步解决问题。 - 参考用户提供的引用。 关键点: - Codepage在DB2中有三个层次: OS、实例、数据库。 - 对于LOAD命令,Codepage转换相关。 - LOAD命令可能通过db2set设置实例级别的codepage,如db2set db2codepage=1386。 - 问题:如引用[2]所示,设置后可能出现乱码。 - 解决方案:确保Codepage一致,包括OS、数据库创建时的设置。 从引用[3]: - Codepage 1386 对应 GBK。 - 数据库级别的Codepage在创建时设置,使用codeset如UTF-8或GBK。 - 如果数据库是UTF-8,而导入数据是GBK,需要转换。 在LOAD命令中,Codepage设置: - 通常,LOAD命令有选项指定输入数据的Codepage。 - 检查DB2文档:LOAD命令可能有CODING选项或类似来指定输入Codepage。 - 在引用中未直接指定LOAD命令的Codepage选项,但提到Codepage转换。 用户引用中没有直接说LOAD命令如何设置Codepage参数;引用[2]是关于db2set设置后插入乱码,LOAD可能类似。 可能LOAD命令默认使用实例级别的codepage设置。 解决办法:确保所有层次Codepage一致或兼容。 组织回答: 1. **介绍Codepage转换在LOAD命令中的作用。** - 解释Codepage是什么,为什么需要转换。 - 参考引用[1]。 2. **如何使用Codepage=1386在LOAD命令中。** - 设置实例级别Codepage via db2set。 - 或者LOAD命令中指定输入Codepage(如果支持)。 - 从引用,db2set db2codepage=1386。 3. **常见问题和解决方案:** - 问题:乱码,如引用[2]。 - 因:Codepage不一致,例如数据库是UTF-8,而数据是GBK。 - 解决方案: - 确保数据库创建时使用兼容的codeset,如GBK。 - 如果数据库是UTF-8,需要正确转换。 - 使用DB2的转换功能。 - 参考引用[3],数据库级别不能修改,所以可能需要在建库时设置匹配的codeset。 4. **具体步骤或建议。** 生成相关问题: - 根据系统指令,结束时添加相关问题。 引用添加: - 在相关段落末尾添加引用标识,如[^1]。 最终响应大纲: - 引言:简述Codepage在DB2中的重要性。 - LOAD命令设置Codepage的使用说明。 - 设置codepage=1386可能导致的问题。 - 解决方案和实施示例。 - 相关问题。 </think> ### DB2 LOAD命令设置codepage=1386的使用说明、问题及解决方案 在DB2数据库中,`LOAD`命令用于高效批量导入数据,支持Codepage(代码页)转换以处理不同字符集的数据。Codepage定义了字符编码方式,确保数据正确存储和显示。设置Codepage=1386对应GBK编码(常用于简体中文),这在处理中文数据时很常见。以下基于您的查询和站内引用内容(特别是引用[1][2][3]),我将逐步解释`LOAD`命令设置Codepage=1386的使用方法、常见问题及解决方案。回答结构清晰,确保真实可靠。 --- ### 1. **LOAD命令设置Codepage=1386的使用说明** 在DB2中,`LOAD`命令本身不直接提供Codepage参数;Codepage转换主要通过DB2实例级别的设置或数据库配置来实现。Codepage=1386(GBK)适用于GBK编码的数据导入。以下是详细步骤: - **设置实例级别Codepage**: - 使用`db2set`命令设置DB2CODEPAGE环境变量为1386(GBK)。这会影响到所有DB2命令,包括`LOAD`,使其在导入数据时自动进行Codepage转换。 - 命令示例: ```bash db2set DB2CODEPAGE=1386 # 设置实例级别Codepage为GBK db2 terminate # 终止当前实例以应用设置 db2start # 重启实例生效(可选) ``` 之后运行`LOAD`命令时,DB2会根据此设置自动处理Codepage转换[^3]。如果输入数据文件使用GBK编码,DB2会将其转换为数据库的内部编码。 - **在LOAD命令中指定输入Codepage(间接方式)**: - `LOAD`命令没有直接的Codepage选项,但它依赖实例级别设置。如果数据文件与实例Codepage(1386)一致,`LOAD`会无缝处理。否则,需要确保数据文件编码匹配。 - `LOAD`命令示例(导入数据文件): ```bash db2 "LOAD FROM '/path/to/data_file.del' OF DEL INSERT INTO table_name" # 假设数据文件为GBK编码 ``` 这里,`LOAD`使用实例级别的DB2CODEPAGE设置来决定如何转换数据。如果数据库内部编码(codeset)不同,DB2会自动转换,但需注意一致性以避免错误[^1][^3]。 - **关键注意事项**: - **Codepage层次一致性**:DB2有三级Codepage设置:操作系统(如`locale`)、实例级别(`db2set DB2CODEPAGE`)、数据库级别(建库时设置的codeset)。设置Codepage=1386时,需确保三者兼容。例如: - 操作系统级别:运行`locale`检查,确保LANG环境变量支持GBK(如`export LANG=zh_CN.GBK`)。 - 实例级别:设置`DB2CODEPAGE=1386`。 - 数据库级别:建库时必须指定兼容的codeset,如GBK或UTF-8(Codepage 1208)。如果数据库是UTF-8,DB2会自动转换GBK数据[^3]。 - **数据文件格式**:输入文件(如DEL或IXF格式)必须使用GBK编码;否则,`LOAD`可能失败。使用工具如`file`命令检查文件编码。 - **性能优化**:设置一致的Codepage可提升`LOAD`性能,避免运行时转换开销[^1]。 --- ### 2. **设置codepage=1386时可能遇到的问题** 设置Codepage=1386后,在`LOAD`命令中常见问题是数据乱码或导入失败。问题通常源于Codepage不一致或配置错误。以下是典型问题描述(基于引用[2][3]): - **乱码问题**: - **描述**:运行`LOAD`后,导入的中文数据显示为乱码(如"呀"变成乱码字符)。这发生在设置`DB2CODEPAGE=1386`后,但数据库内部编码(codeset)不匹配时。例如: - 数据库建库时使用UTF-8(Codepage 1208),而`LOAD`导入GBK数据未正确转换。 - 操作系统或客户端工具未配置为GBK,导致显示问题[^2]。 - **错误日志**:`LOAD`可能无显式错误(命令显示成功),但查询数据时出现乱码。引用[2]中示例展示了插入数据后乱码,类似问题在`LOAD`中也很常见。 - **导入失败或错误**: - **描述**:如果Codepage设置冲突,`LOAD`可能直接失败。例如: - 输入文件编码非GBK(如UTF-8),而实例设置`DB2CODEPAGE=1386`,导致转换错误。 - 数据库codeset不支持GBK转换(如使用过时编码),抛出错误如`SQL0332N`(字符转换失败)。 - **常见因**: - Codepage层次不一致:操作系统、实例或数据库设置不匹配(e.g., OS LANG为UTF-8,DB2CODEPAGE=1386)。 - 数据库codeset不可修改:数据库建库时指定了codeset(如UTF-8),无法更改;如果与GBK不一致,转换可能出错[^3]。 - 文件编码错误:输入文件实际编码非GBK,但被误判。 --- ### 3. **解决方案和实施步骤** 解决设置Codepage=1386导致的问题,核心是确保所有Codepage层次一致,并正确配置转换。以下是针对乱码和导入失败的解决方案: - **解决方案1: 确保Codepage一致性**(推荐) - **步骤**: 1. **检查操作系统Codepage**:运行`locale`命令确认LANG设置支持GBK(如`zh_CN.GBK`)。如果不是,设置: ```bash export LANG=zh_CN.GBK # Linux/AIX ``` 2. **设置实例Codepage**:确保`DB2CODEPAGE=1386`: ```bash db2set DB2CODEPAGE=1386 db2 terminate ``` 3. **验证数据库codeset**:运行`db2 get db cfg | grep code`查看数据库内部编码。如果数据库codeset不是GBK(如为UTF-8),则DB2会自动转换数据,但需确保转换兼容。如果数据库未使用兼容codeset(如建库时指定为`USING CODESET GBK`),可能需要重建数据库(见方案2)[^3]。 4. **运行LOAD命令**:导入数据文件,并查询验证: ```bash db2 "LOAD FROM 'data_gbk.del' OF DEL INSERT INTO my_table" db2 "SELECT * FROM my_table" # 检查数据是否正常 ``` - **效果**:这样解决了引用[2]中乱码问题,确保编码一致转换。 - **解决方案2: 重建数据库或使用转换工具**(当数据库codeset不兼容时) - **描述**:如果数据库codeset无法修改(如当前为UTF-8),且需要导入GBK数据,可重建数据库指定GBK codeset,或使用DB2内置转换功能。 - **步骤**: 1. **重建数据库**:创建新数据库时指定兼容的codeset: ```bash db2 "CREATE DATABASE new_db USING CODESET GBK TERRITORY CN" ``` 然后在新数据库中运行`LOAD`(设置`DB2CODEPAGE=1386`)。 2. **使用LOAD with CODEPAGE选项**(如果支持):某些DB2版本允许在`LOAD`命令中指定输入文件的Codepage: ```bash db2 "LOAD FROM 'data_gbk.del' OF DEL CODEPAGE 1386 INSERT INTO table_name" # 直接指定输入Codepage ``` 但注意,标准DB2文档中`LOAD`命令无此参数;通常通过实例设置实现。如果不支持,结合`db2set`使用[^1][^3]。 3. **转换输入文件**:如果数据文件编码问题导致失败,先用工具(如`iconv`)转换文件编码: ```bash iconv -f UTF-8 -t GBK source_file.del > target_gbk.del # 示例:将UTF-8文件转为GBK ``` 然后`LOAD`导入转换后的文件。 - **通用预防措施**: - **测试转换**:导入前,使用小数据集测试`LOAD`命令,并检查日志(`db2diag.log`)。 - **监控和日志**:运行`db2 list utilities show detail`监控`LOAD`进度;错误时查看`db2diag.log`诊断Codepage问题。 - **最佳实践**:始终在数据库创建时指定codeset匹配数据源(如需处理GBK数据,使用`USING CODESET GBK`)。避免频繁修改实例Codepage以保持稳定性[^1][^3]。 通过上述方法,您可以有效使用`LOAD`命令设置Codepage=1386,解决乱码问题。例如,在引用[2]的场景中,设置`DB2CODEPAGE=1386`后,如果数据库codeset也为GBK或兼容,乱码问题可避免。 --- ### 相关问题 针对DB2 Codepage转换和LOAD命令的深入探讨,以下是生成的相关问题: 1. 如何在DB2中检查当前数据库的Codepage设置? 2. DB2 IMPORTLOAD命令在Codepage处理上有何区别? 3. 当数据库codeset为UTF-8时,如何正确导入GBK编码的数据? 如果您有更多细节(如具体错误日志或DB2版本),我可以提供更针对性建议。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值