`
zscomehuyue
  • 浏览: 412073 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Db2 文件导入导出常见命令总结

阅读更多
Db2 文件导入导出常见命令总结


Db2 文件导入导出常见命令总结

Db2 的数据迁移,最常用的就是导入导出功能,而导入导出的命令貌似简单,实则内含玄机,千变万化,稍不留神,则错误百出,这儿就工作中常用到的命令,总结了一下,分享给大家!欢迎大家踊跃拍砖!

当然在这以前,我觉得有必要提及一点关于导入导出基础的知识!
DEL:界定的ASCII文件,行分隔符和列分隔符将数据分开。
ASC:定长的ASCII文件,行按照行分割符分开,列定长。
PC/IXF:只能用来在db2之间导数据,根据类型数字值被打包成十进制或者二进制,字符被保存为ASCII,只保存变量已经使用了的长度,文件中包括表的定义和表的数据。
WSF:工作表方式导入导出,这种格式的文件类型用的比较少。
Db2中对不同的数据导入导出方式,支持不同的文件类型,这里个人觉得很有必要注意下的。
文件类型                        Import                        export                        load
-------------------------------------------------------
定界                                支持                                支持                                支持
非定界                        支持                                不支持                        支持
Ixf                                支持                                支持                                支持
Wsf工作表                支持                                支持                                不支持

关于3种导入导出操作进行简单的介绍:
export:导出数据,支持IXF,DEL或WSF
import:导入数据,可以向表中导入数据,支持上面提到的4种文件类型。  
load:导入数据,功能和import基本相同。支持以上说的几种文件类型。

关于Export

这个其实比较简单,没啥好说的,一般命令:export to filename of filetype select x from xx where ;就ok了,这里需要注意的是:
1.        关于不同字符集的导出
MODIFIED BY CODEPAGE=
Exprot to filename.del for del MODIFIED BY   CODEPAGE=1386 select … from …where …;
这里,在数据从数据库倒出来的时候就会做一个数据库代码页的转换
2.时间字段格式化的
MODIFIED BY  TIMESTAMPFORMAT="yyyy-mm-dd hh:mm:ss tt"
例:Exprot to filename.del for del MODIFIED BY  TIMESTAMPFORMAT="yyyy-mm-dd hh:mm:ss tt" select … from …where …;

关于Import

1.Import模式的介绍

CREATE/INSERT/INSERT_UPDATE/REPLACE/REPLACE_CREATE
CREATE :首先创建目标表和它的索引,然后将数据导入到新表中。该选项惟一支持的文件格式是 PC/IXF。还可以指定新表所在表空间的名称
INSERT :将导入的数据插入表中。目标表必须已经存在。
INSERT_UPDATE :将数据插入表中,或者更新表中具有匹配主键的行。目标表必须已经存在,并且定义了一个主键。
REPLACE :删除所有已有的数据,并将导入的数据插入到一个已有的目标表中。
REPLACE_CREATE :如果目标表已经存在,则导入实用程序删除已有的数据,并插入新的数据,就像 REPLACE 选项那样。如果目标表还没有定义,那么首先创建这个表以及它的相关索引,然后再导入数据。正如您可能想像的那样,输入文件必须是 PC/IXF 格式的文件,因为那种格式包含对导出表的结构化描述。如果目标表是被一个外键引用的一个父表,那么就不能使用 REPLACE_CREATE。

2.        批量提交

COMMITCOUNT,保证insert的数据在COMMITCOUNT以后进行一次commit,这对于大数据量的导入文件来说是一个不错的方法,
例:Import from filename of del COMMITCOUNT 50000 insert into tabname;

3.        批量插入

MODIFIED BY COMPOUND把文件中的 COMPOUND 行记录作为一组一起导入,这个操作可以和上边的批量提交一起使用,比较理想。
例:Import from filename of del MODIFIED BY COMPOUND =50 insert into tabname;

4.        导入记录限制

ROWCOUNT:只导入rowcount 条数据,有时候,业务逻辑需要只导入部分数据,那么ROWCOUNT是一个不错的选择,只是在我的测试中ROWCOUNT一直没有起过作用,呵呵,谁熟悉这里,帮我完善下。
例:Import from filename of del ROWCOUNT 10000 insert into tabname;

5.        导入起点

RESTARTCOUNT:从导入文件的第RESTARTCOUNT条记录开始导入
例:Import from filename of del RESTARTCOUNT 55 ROWCOUNT 10000 insert into tabname;--从55条开始,导入10000条数据

6.        有警告数据的条数限制

WARNINGCOUNT:当导入的数据中,有警告或错误(例如类型不匹配,列不对应等造成的)并且条数超过WARNINGCOUNT是就会停止import。
例:Import from filename of del WARNINGCOUNT 10 insert into tabname;

7.        禁止发出行警告

MODIFIED BY NOROWWARNINGS
例:Import from filename of del MODIFIED BY NOROWWARNINGS WARNINGCOUNT 10 insert into tabname;

8.        LOB 文件

LOBS FROM :指出LOB的路径
例:Import from filename of del LOBS FROM ‘/home’ MODIFIED BY NOROWWARNINGS WARNINGCOUNT 10 insert into tabname;

9.        对于自增序列(GENERATED ALWAYS)

建议不要对自增序列的表进行import操作,因为import对于自增序列,只有MODIFIED BY  IDENTITYIGNORE和MODIFIED BY IDENTITYMISSING的2中操作,这2中操作都会改变自增序列的原值,这样如果导出表和表之间有基于自增序列的关联关系的话,就失去了数据本身的意义,所以建议尽量少用基于import的自增表的操作,那该怎么做?可以用load老代替import,我们下来在load的操作中会讲到!

关于Load

1. 字符串间隔,列间隔,小数点表示

CHARDEL/COLDEL/DECPT
例:LOAD CLIENT FROM 'F:s1.del' OF DEL MODIFIED BY CHARDEL(COLDEL=   DECPT?  INSERT INTO "DB2ADMIN"."ZXTABLES"

2.数据库记录中存在换行符,导致数据无法装入的情况

MODIFIED BY DELPRIORITYCHAR
Db2默认load优先级策略为,record delimiter, character delimiter, column delimiter,这样record delimiter得优先级最高,所以原始文件如果有换行的话load就认为是新的record,如果用户在某些情况下行里面包含了换行符(比如论坛里面的一条帖子,不可能把换行符删掉的),就必须用delprioritychar改变默认的优先级别,确保""之间的数据不管有没有换行符都被认为是同一条记录
例:LOAD CLIENT  FROM 'F:s1.del' OF DEL MODIFIED BY DELPRIORITYCHAR  INSERT INTO DB2ADMIN.ZXTABLES

3.load后表空间暂挂的处理

Copy YES/ NONRECOVERABLE
对于DMS表空间,load默认为copy NO 模式,此模式下,load完成后,表空间会处于暂挂状态,这时候只能查表中的数据,需要对表空间进行一次备份,才可以对表进行update、insert等操作,那么我们可以使用如上2个命令,对于Copy YES,load完成以后会自动进行一次备份操作;NONRECOVERABLE 指出load不可恢复,此命令符不会产生表空间暂挂,也不会自动进行表空间备份,但是他有一个缺点就是,不能恢复,当数据库进行回滚的时候,不能还原,危险等级还是比较高一点,不过个人觉得也NONRECOVERABLE比较实用。

例:LOAD CLIENT FROM 'F:s1.del' OF DEL INSERT INTO DB2ADMIN.ZXTABLES NONRECOVERABLE
LOAD CLIENT FROM 'F:s1.del' OF DEL INSERT INTO DB2ADMIN.ZXTABLES COPY YES

4. load IXF类型文件到多分区数据库

partitioned db configmode load_only_verify_part part_file_location

当数据在2个不同数量节点的数据库之间移动,如果还想使用load来进行IXF的数据装载就比较棘手了,当时查遍IBM的官方文档均无所获,正郁郁不安时,狼出现了,给支了一招,现分享给大家。
首先,把ixf文件复制和分区数量相同的文件,并后缀.000(分区号),
比如,2个分区,那么我需要把原来的a.ixf,拷贝2个,并命名为a.ixf.000以及a.ixf.001
然后,load from staff.ixf of ixf replace into t1 partitioned db configmode load_only_verify_part part_file_location xxxx(part_file_location为a.ixf.000所在的目录),当然如果在unix下的话,可以通过ln –s 来做一个连接也行。

5. 对于自增序列(GENERATED ALWAYS)

MODIFIED BY IDENTITYOVERRIDE:此参数可以理解为,采用文件load文件中的自增值做为表自增序列的值,这样就能保证对于自增序列有业务意义,或者关联逻辑(主外键关联)的情况下保证数据的一致,个人对此命令屡试不爽

例:  LOAD CLIENT FROM 'F:s1.del' OF DEL MODIFIED BY IDENTITYOVERRIDE INSERT INTO DB2ADMIN.ztables;

6. 对于自增序列(GENERATED by default)

GENERATED by default可以直接通过一般的导入方式加载数据,不过有时候会有一点点小问题,自增序列没有进行分配,也就是说,原来表有50条记录,自增序列的下一次分配值为50,当你已经导入了1000条记录进去了,然后发现自增序列的下一次分配值还是为50,这种事不经常发生,但是偶尔会发生一次,比较郁闷的是,当表继续插入数据的时候,下一次分配就会发生冲突,尤其是如果自增建为主键的时候,会违反唯一约束。
解决办法:首先找到这个序列分配的最大值,select max(id) from tablea;
然后用下边这个命令,alter table tablea alter column restart  with max(id)+1

7.
ROWCOUNT/WARNINGCOUNT
  这个同IMPORT

8.terminate,restart

如果load的过程中出了点故障,比如连接被force掉了等,这时连接查询表数据会报错SQL0668N,原因码3,这时可以通过带有terminate的load命令来进行处理!
LOAD CLIENT FROM 'F:s1.del' OF DEL terminate INTO DB2ADMIN.ztables;

9. set integrity 命令

如果表上有约束,那么给表load数据以后,一般连接表的时候都会报错,SQL0668N,原因码1,这说明该表处于“设置完整性暂挂无访问”状态,那么需要如下命令来操作。

Set integrity for schema.tablename immediate checked;

10.提高导入导出速度的数据库参数

CONFIGURATION:应用程序堆大小,该参数指示可由Backup,restore,load及装入恢复应用程序同事使用的最大内存量,看帖子上有介绍,这个值可以设置为10000*cpu数量。
db2_all "DB2 UPDATE DATABASE CONFIGURATION USING UTIL_HEAP_SZ 113486"
分享到:
评论

相关推荐

    db2数据库导入导出

    #### 四、DB2数据库的其他常用命令 1. **使用db2cmd打开db2命令行**: - 命令为`db2cmd`。 2. **创建数据库**: - 使用命令`create database db_name on 'directory_name' using codeset utf-8 territory US ...

    db2_导入导出

    通过对DB2数据库导入导出命令的学习,我们可以看到虽然这些命令看起来简单,但实际上它们提供了丰富的功能选项,以适应各种不同的数据迁移场景。无论是导出还是导入,都需要根据具体情况合理选择参数和模式,以便更...

    IBMDB2进阶资料:命令、故障诊断和调优

    XML 索引【】DB2 9.5 中多线程架构的工作原理【】db2 clp 命令锦集【】DB2 v8.x的通用license【】db2 V9的宝典:计划、实施、性能【】DB2 使用经验积累-牛新庄血与泪的教训【】Db2 文件导入导出常见命令总结【 ...

    db2数据导入导出,可选择要导的数据

    以上介绍了 DB2 数据库中数据导入导出的基础知识及常用命令,包括 `db2forceapplicationall`、`db2backupdb`、`db2listapplications`、`db2look`、`db2move` 等命令的具体用法,以及如何使用 SQL 语句进行数据选择。...

    oracle,teradata,hive,gbase,db2数据库导出csv命令总结

    ### Oracle、Teradata、Hive、GBase、DB2 导出 CSV 文件命令总结 #### 一、Oracle 数据库导出 CSV 文件 ##### 1. 通过 Spool 指令实现 Oracle 提供了 `spool` 命令来帮助我们将查询结果输出到一个文本文件中,...

    db2常用命令大全及从数据库中导入导出数据

    本文将深入解析“db2常用命令大全及从数据库中导入导出数据”这一主题,涵盖从DB2数据库的结构查看、数据导入导出、到各种数据库管理与查询的实用命令。 ### 一、DB2数据库结构查看与导出 #### 1. 数据库结构导出 ...

    Db2中的常用命令和导入导出

    ### DB2中的常用命令与导入导出操作详解 #### 前言 在数据库管理领域,DB2(Database 2)作为IBM推出的一款关系型数据库管理系统,在企业和组织中有着广泛的应用。相较于图形用户界面(GUI),通过命令行进行操作...

    DB2导入、导出、备份及恢复数据库等操作资料

    #### 三、DB2 导出与导入命令详解 ##### 1. db2export - 导出数据库表数据 **命令格式**: ```shell db2 export to <file> of <format> select * from ``` **示例**: - 将`dwmm.ADPAM`表的数据导出到`dwmm.del`...

    DB2常用命令-备份数据库-数据导入导出

    根据给定文件的标题“DB2常用命令-备份数据库-数据导入导出”及其描述和部分内文,我们可以归纳并详细解释以下关键知识点: ### 一、DB2连接与基本信息查询 1. **连接数据库**:使用`db2connecttodb_name`命令可以...

    db2导出数据库

    同样地,也可以直接通过以下命令从文件导入数据: - **db2 "import from d:\data\tab1.ixf ofixf messages d:\data\tab1.msg insert into schema_name.table_name"** - `from d:\data\tab1.ixf` 指定输入文件路径...

    db2常用命令总结.pdf

    标题:"db2常用命令总结.pdf" ### 知识点概览 本文档旨在总结IBM DB2数据库管理系统中常用的命令操作,覆盖了从基础的数据库管理到数据表操作以及脚本文件处理等多个方面,为DB2数据库管理员和开发人员提供一份...

    Db2 常用命令Db2 常用命令Db2 常用命令.doc

    ### Db2常用命令详解 #### 一、Db2概述与基本命令 Db2是由IBM公司开发的一款关系型数据库管理系统(RDBMS),广泛应用于企业级数据处理领域。掌握Db2的基本命令对于日常维护和管理至关重要。 - **启动DB2管理器**...

    Java开发人员常用DB2命令总结

    ### Java开发人员常用DB2命令总结 #### 一、DB2 实例管理 在DB2中,实例(Instance)是数据库管理系统的一个独立运行环境。对于Java开发者来说,掌握实例的基本操作至关重要。 - **列出所有实例** - **命令**:`...

    DB2学习资料以及常用命令

    ### DB2学习资料与常用命令解析 #### 一、DB2简介 DB2是IBM公司开发的一款关系型数据库管理系统(RDBMS),广泛应用于企业级数据处理。它支持SQL标准,并提供了一系列工具和功能来管理复杂的数据环境。对于DB2的学习...

    不同数据库之间的数据导入导出

    2. **导入数据**:接着,将生成的dmp文件导入到目标数据库db2中相应的tab1表。这一步骤依赖于目标数据库的导入工具,如Oracle的Data Pump Import或MySQL的mysql命令。 这种方式简单高效,适用于表结构和表空间完全...

    linux下DB2常用命令

    Linux 下 DB2 常用命令 DB2 是一个 relation database management system(关系数据库管理系统),广泛应用于企业级的数据存储和管理中。在 Linux 环境下,DB2 提供了丰富的命令行工具,用于管理和维护数据库。下面...

    db2常用命令 很好的PDF

    ### DB2常用命令详解 #### 一、DB2命令环境管理 **1. 进入DB2命令环境** - **命令**: `db2cmd` - **功能**: 打开DB2命令行界面。 **2. 启动DB2服务** - **命令**: `db2start` - **功能**: 启动DB2服务。 - **注意...

Global site tag (gtag.js) - Google Analytics