设为首页 加入收藏

TOP

我用DB2的这几年(四)(一)
2011-04-21 17:50:06 来源: 作者: 【 】 浏览:37762次 评论:0

一天接到了一项任务,具体内容是想把原来运行在windows平台上的DB2数据库的一部分数据转移到IBM AIX 4.X平台上的指定数据库里面。

从资料上我得到的信息是使用DB2控制中心里面对于表对象的调入/调出(Import/Export)功能菜单选项。但是在使用中总是觉得很是别扭,因为两个表因为字段顺序的不同造成调入失败、存在大对象字段的表的调入失败等等问题经常出现;于是乎我就去查阅相关的文档。

原来DB2 中有三种数据移动实用程序可用:EXPORT、IMPORT和LOAD。在本文中我将介绍前面的两种方法,LOAD方法将会在随后的文章中介绍。

在DB2联机文档的 Command Reference我发现了这两个命令在CLP环境下的使用方法,大致的语法如下:

l  Export用来从数据库中导出数据并存入指定格式的文件。使用SQL查询语句来确定想要导出的数据

EXPORT TO filename OF filetype
MODIFIED BY file_type_modifiers
[LOBS TO lob-path [ {,lob-path} ... ] ]
[LOBFILE lob-file [ {,lob-file} ... ]
[MESSAGES message-file]{select-statement [WHERE ...] }
l  Import与Export相反。它是从一个规定格式的外部文件向数据库的表中增加数据。在导入过程中导入数据的表对外允许访问,所有的限制和触发器都所以有效活动的。

IMPORT FROM filename OF filetype
[LOBS FROM lob-path [ {,lob-path} ... ] ] importmethod
INTO {table-name [( insert-column , ... )] | hierarchy-description}
【参数说明】

Filetype——能够被DB2所支持的文件格式有4种:

l  ASCII:纯文本格式。每个数据列之间有分隔符,但是数据行中没有分隔符。不能支持Expor操作。t

l  DEL ASCII:纯文本格式。数据列和数据行之间都有分隔符。

l  WSF:Lotus 1-2-3工作表格式。

l  PC/IXF:通用格式,被多种数据库管理系统所支持。可以用于异种数据库中的数据转移。

LOBS TO/FROM  lob-path——如果有LOB类型的数据需要被导出/导入,该参数被用于指定一个或多个目录文件用于存储/读取LOB数据。LOBFILE参数指定的文件将存储在该路径下。

导入方式:

l  INSERT——目标表必须存在;新的行被插入到目标表中而不会影响表中已经存在的数据

l  INSERT_UPDATE——目标表必须存在,并且需要至少有一个主键(PK)。现有记录如果与导入行主键相同时,现有记录将被更新。不同时则被插入至表中。

l  REPLACE——目标表必须存在。目标表的现存被熔将被删除,并用导入的数据所代替。

l  CREATE——只适合IXF文件。目标表必须不存在。从IXF文件中包含的表的描述信息中创建目标表和存在的索引,然后把IXF文件中的数据插入到新表中。

l  REPLACE_CREATE——只适合IXF文件。如果目标表存在,它的内容将被删除,而由导入的数据所代替,表的结构没有发生变化;目标表不存在时,它的功能跟CREATE类似。

MODIFIED BY  file_type_modifiers

l  Chardelx—— 指定 x 为新的单字符串定界符。缺省值是双引号(")。

l  Coldelx—— 指定 x 为新的单字符列定界符。缺省值是逗号(,)。

l  codepage=x ——指定 x 这个 ASCII 字符串为输出数据的新代码页。在导出操作期间,将字符数据从应用程序代码页转换成这一代码页。

l  timestampformat="x"—— x 是源表中时间戳记的格式。

 

EXPORT使用 SQL SELECT 语句将数据从数据库表导出到指定的文件中(你可以通过改变SELECT语句的参数来灵活的去设置导出字段的顺序,这样就免去了由于字段顺序的原因造成的数据导入失败的麻烦了)。对于导出的数据而言,其文件格式可以是 DEL、IXF 或 WSF。建议您在导出中包含 MESSAGES 子句,以便在导出期间捕获错误、警告和信息性消息。要成功地调用 EXPORT 命令,就必须具有 SYSADM 或 DBADM 权限,或者对 EXPORT 命令中要访问的表具有 CONTROL 或 SELECT 特权。

EXPORT TO myfile.del OF DEL
    MESSAGES msg.out
      SELECT name, deft
        FROM org
       WHERE deptnum > 104;
在这个例子中,数据被导出到一个 DEL 格式的文件中。缺省情况下,列值由逗号(,)分隔,而字符串由双引号(")括起来。如果要抽取的数据已经包含逗号和双引号,导入程序不可能确定:哪些符号是实际的数据,哪些是定界符。这里就需要使用上面提到的MODIFIED BY 子句并指定想用文件类型修饰符修改什么。例如下面这个例子:

EXPORT TO myfile.del OF DEL
  MODIFIED BY chardel! coldel@ codepage=1208 timestampformat="yyyy.mm.dd hh:mm tt"
  MESSAGES msg.out
  SELECT * FROM org
上面的命令以 DEL 格式从 org 表导出数据,并且:

l  字符串由感叹号(!)括起来

l  列由 @ 号定界

l  字符串被转换成代码页 1208

l  Org表中用户定义的时间戳记具有 yyyy.mm.dd hh:mm tt 这种格式

另外,在导出具有大对象列的表时,只会导出头 32 KB LOB 数据。这部分对象与剩余列数据放在同一个文件中。要完全导出 LOB 数据,并将它们和其它列数据存储在不同的文件中,您必须使用 LOBSIN

Tags:我用 DB2 责任编辑:admin
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇我用DB2的这几年(五) 下一篇我用DB2的这几年(三)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

最新文章

热门文章

推荐文章

相关文章