db2load
db2 load 命令
当DB2 的数据库启用了前滚恢复模式,即将日志由循环日志方式改为归档日志,以便用户在进行恢复操作时,可在恢复了数据库或表空间的备份后,再通过前滚归档日志中的事务,恢复数据库备份时间点之后提交的事务,最大程度的保护数据库的数据。
而DB2 的LOAD 实用程序为实现快速导入数据的功能,除采用了通过直接向数据库中写入格式化的数据页装载数据,导入过程中不激活触发器,不会检查参考完整性和表检查约束当等方式外,还最小化了记录事务日志的操作。
在LOAD 的LOAD、BUILD、DELETE 和INDEX COPY 四个处理阶段中,仅在DELETE 阶段记录对每个删除事件记日志,即只对每个违反唯一约束的行的删除操作记日志,因此整个LOAD 操作仅记录了极少的日志。
由于LOAD 最小化了日志的记录,有因启用了前滚恢复的数据库在恢复在线备份时需要归档日志的特性,对于这种数据库的LOAD 操作,为避免执行LOAD 操作后,表在使用ROLLFORWARD 命令前滚归档日志的过程中因缺少日志而被置为非正常状态,DB2 为LOAD 命令提供了如下选项:·COPY NO(缺省)·COPY YES·NONREVERABLE为更清楚地说明这些选项的作用,这里将以举例的方式进行说明。
而在开始操作之前,首先了解一下DB2 备份操作所产生的映象文件的形式和命名特点:在UNIX 环境下是文件的形式:Databasealias.Type.Instancename.Nodename.Catnodename.Timestamp.number在Windows 环境下是子目录及文件的形式:Databasealias.Type\Instancename\Node0000\Catn0000\yyyymmdd\hhmmss.number而其中的Type 则因备份类型的不同而不同:0 -- 数据库全备份3 -- 表空间备份4 -- 由LOAD 操作产生的备份1. 进行一次数据库的全备份:首先对已启用前滚恢复模式的SAMPLE 数据库进行一次全备份:E:\TEST>db2 backup db sample备份成功。
db2cmd 常用命令
"SERIALNO" INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( START WITH +0 INCREMENT BY +1 MINVALUE +0 MAXVALUE +2147483647 NO CYCLE NO CACHE NO ORDER ) ,
9、DB2 日志处理:
DB2日志是以文件的形式存放在文件系统中,分为两种模式:循环日志和归档日志。当创建新数据库时,日志的缺省模式是循环日志。在这种模式下,只能实现数据库的脱机备份和恢复。如果要实现联机备份和恢复,必须设为归档日志模式。
目前在综合业务系统中,设置的均是归档日志模式;其它系统(如事后监督、经营决策、中间业务等)一般都设置为循环日志模式。至于采用何种模式,可以通过修改数据库配置参数(LOGRETAIN)来实现: 归档日志模式:db2 update db cfg for using logretain on 注:改为on后,查看数据库配置参数logretain的值时,实际显示的是recovery。改变此参数后,再次连接数据库会显示数据库处于备份暂挂(BACKUP PENDING)状态。这时,需要做一次对数据库的脱机备份(db2 backup db ),才能使数据库状态变为正常。
11、如何清理db2diag.log文件
db2diag.log,是用来记录DB2数据库运行中的信息的文件。可以通过此文件,查看记录的有关DB2数据库详细的错误信息。此文件也是不断增大的,需要定期进行清理。
可以通过查看实例的配置参数DIAGPATH,来确定db2diag.log文件是放在哪个目录下:db2 get dbm cfg 如果Diagnostic data directory path(DIAGPATH) = /home/db2inst1/sqllib/db2dump,则此文件是放在/home/db2inst1/sqllib/db2dump目录下。当文件系统/home的使用率达到80%-90%左右时,应及时删除db2diag.log文件。
DB2 Load数据装入
DB2 Load数据装入1.引言这段时间一直在忙一个基于DB2的项目,其中一部分工作涉及到DB2数据的导入。
我们知道oracle提供了sqlloader程序完成大数据量的快速导入,DB2是和oracle最相似的数据库,所以DB2也提供了数据导入的实用程序,而且还是两个,分别是import和load,因为import的实质还是要执行sql语句完成数据的导入,所以速度相对较慢。
Load是直接将格式化的页写入数据库,对于大数据量的导入,load程序更快。
但是load实用程序不会触发触发器。
并且load时除了验证索引唯一性约束之外,不执行其他的约束检查,这样会对数据库的数据完整性造成一些影响。
如果能保证数据来源可靠的话,load是个不错的选择。
接下来就简单说一下load实用程序的使用。
2.概述Load 的过程分为四个阶段:装入,构建,删除,索引复制。
如下图:Load有四种装入方式,分别是:REPLACE:这种方式下会删除目标表数据,用并用输入数据填充该表。
INSERT:目标表原有数据不做修改,将输入数据追加到目标表之后。
TERMINATE:装载失败后,可以通过该方式回滚失败的装入操作。
RESTART:已终端的装入操作将继续(我没有试过这种方式)。
Load可以装入的数据格式包括IXF——也就是DB2 export程序推荐的那种数据格式,是二进制的。
这种数据导入也最方便;DEL——就是分界符的ASCILL文件,DB2默认的是用逗号(,)作为字段列的分隔符,用双引号(“)作为记录行的分隔符;ASC——非定界符的ASCII文件,load时需要指定列的起止位置;CURSOR——游标,我没用过。
3.语法及参数介绍Load程序的语法参数还是相当复杂的,现在虽然在用这个程序了,但是有些参数还是没搞明白。
在这里我拣着主要的&&我明白的参数介绍一下。
基本上能够满足一般的装入操作要求。
因为语法实在是很繁琐,我不得不贴一张官方的大图出来了。
db2 load
但是不可以: load from (select * from a) of cursor insert into a nonrecoverable; 因为这样会报错
请注意:load 对于default值是可以实现的。比如如果load目标表有default '' not null的字段,那么load并不会报错。
请注意:load对于runstats也是敏感的。测试过一个load,目标表没有runstats的时候,花了50秒才load完成,
runstats之后1秒不到就完成了。
看来runstats什么速度都可以影响啊。
请注意:load 的时候不能读本表,再写入本表,但是insert可以。
将会填充''。
load from d:\zjj\sysinfo.del of del replace into sysinfo1(id,private) nonrecoverable; ---报错
load from d:\zjj\sysinfo.del of del replace into sysinfo1(id,'private') nonrecoverable; ---成功
请注意:db2 load 只支持向实表中load数据,不能支持向系统临时表中load数据。
请注意:如果一个表中的字段名字有private,你会发现在指定字段名字load的时候是无法load的,但是import就可以。
此时可以给指定的字段(private)加上'',这样就可以load了。
在load过程中,可以通过
load query TABLE_NAME 来查看loarom"的话load的数据文件一定要是db2远程服务器上的保存的文件才能load,否则会报错,"SQL3126N 远程客户机需要文件和目录的绝对路径"
db2load方法
(in table1 varchar(20),
in table2 varchar(20),
out cursor_out varchar(1000),
out load_state varchar(1000))
begin
DECLARE v_version_number integer default 1;--
call sysproc.db2load(V_version_number,V_CURSOR_STATEMENT,V_LOAD_COMMAND,v_sqlcode,v_sqlmessage,rows_read,rows_skipped,rows_loaded,rows_rejected,rows_deleted,rows_committed,rows_part_read,rows_part_rejected,rows_part_partitioned,V_MPP_LOAD_SUMMARY);
set V_LOAD_COMMAND='LOAD FROM C OF CURSOR INSERT INTO '||table2||' nonrecoverable';
set cursor_out=V_CURSOR_STATEMENT;
set load_state=V_LOAD_COMMAND;
存储过程如下:
drop procedure load_table1_2_table2;
create procedure load_table1_2_table2
(in table1 varchar(30),
in table2 varchar(30),
分区数据库环境下 DB2 LOAD 性能调优
分区数据库环境下 DB2 LOAD 性能调优吴磊, 软件工程师, IBM简介:本文详细阐述了分区数据库环境下 DB2 LOAD 的线程模型,并以 LOAD 线程模型为纲,详细分析每个线程的作用和特点,多方面、多角度地剖析影响其性能的因素,同时对性能的改进提供了参考建议。
最后,以实例演示展示了性能调优的效果。
DB2 LOAD 实用程序广泛应用于各行业、各领域的数据移动场景中,通过本文,相关读者可以充分理解 DB2 LOAD 的线程模型,影响各相关线程性能的关键参数,文中给出的参考建议与实例场景对读者有借鉴意义。
本文的标签:dpf, 关于产品, 性能, 管理发布日期:2011 年 12 月 12 日 级别:中级访问情况 :806 次浏览DB2 LOAD 线程模型在本文中,除非特别声明,对于 DB2 LOAD 的讨论都是在分区数据库环境下。
同时本文专注于讨论分区数据库环境下 DB2 LOAD 的性能调优,不再对分区数据库中的基本概念进行赘述,阅读本文的读者需要对分区数据库概念有基本的了解。
LOAD 作为DB2 的实用程序,广泛地应用于各种数据移动场景中,尤其是在数据仓库的 ETL 过程中,LOAD 更是占据了主导地位。
因此如何有效地提升 LOAD 性能,在数据移动场景中满足客户的需求和期望,是至关重要的。
在对LOAD 性能进行调优之前,首先需要理解 LOAD 中各相关线程的作用和特点,从而有针对性地进行调整、优化。
LOAD 线程模型如图 1 所示。
图1. LOAD 线程模型在 DB2 中,LOAD 操作请求由代理线程 db2agent 受理,该线程负责派生、协调、监视相关LOAD 线程。
LOAD 内部相关线程的处理流程,从预分区代理线程(db2lpprt)开始。
预分区代理只存在于 Coordinator 分区节点,读入输入数据源,通过TCP/IP 网络将数据记录分发至各数据库分区的分区代理线程(db2lpart)。
db2load
Db2 文件导入导出常见命令总结Db2 文件导入导出常见命令总结Db2 的数据迁移,最常用的就是导入导出功能,而导入导出的命令貌似简单,实则内含玄机,千变万化,稍不留神,则错误百出,这儿就工作中常用到的命令,总结了一下,分享给大家!欢迎大家踊跃拍砖!当然在这以前,我觉得有必要提及一点关于导入导出基础的知识!DEL:界定的ASCII文件,行分隔符和列分隔符将数据分开。
ASC:定长的ASCII文件,行按照行分割符分开,列定长。
PC/IXF:只能用来在db2之间导数据,根据类型数字值被打包成十进制或者二进制,字符被保存为ASCII,只保存变量已经使用了的长度,文件中包括表的定义和表的数据。
WSF:工作表方式导入导出,这种格式的文件类型用的比较少。
Db2中对不同的数据导入导出方式,支持不同的文件类型,这里个人觉得很有必要注意下的。
文件类型Import export load-------------------------------------------------------定界支持支持支持非定界支持不支持支持Ixf 支持支持支持Wsf工作表支持支持不支持关于3种导入导出操作进行简单的介绍:export:导出数据,支持IXF,DEL或WSFimport:导入数据,可以向表中导入数据,支持上面提到的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 …;关于Import1.Import模式的介绍CREATE/INSERT/INSERT_UPDATE/REPLACE/REPLACE_CREATECREATE :首先创建目标表和它的索引,然后将数据导入到新表中。
DB2 LOAD工具
级别:初级袁春光(), 高级技术专家, 庄梁科技公司2009 年2 月23 日在DB2 数据库的日常使用中,很重要的一项工作就是移动数据,那么在此时就经常会用到LOAD 工具。
DB2 的LOAD 工具的功能非常强大,而且在很多方面与其他工具比较起来有着突出的优点,这使得LOAD 工具在DB2 数据移动方面有着不可替代的作用,尤其是在需要处理大规模数据的情况下表现尤其抢眼。
下面结合本人的实践经验介绍一下在使用LOAD 工具的过程中比较有帮助的一些技巧。
影响LOAD 性能的选项LOAD 工具与其他数据移动工具比较起来的一大优势就是提供卓越的性能,这主要是由于LOAD 对数据的加载时采取数据页级别的处理,这绕过了数据库管理系统的多个处理层次,因此可以极大的提高性能。
除了LOAD 工具本身的这一特点之外,我们还可以通过合理的设置LOAD 的一些选项来进一步提高其性能。
下面列出一些影响LOAD 性能的选项及其合理设置的建议。
CPU_PARALLELISM n此选项用于指定一个LOAD 同时使用n 个CPU 来并发的处理LOAD,在LOAD 处理的数据量较大并且操作系统的负载不高的情况下,可以通过此参数指定多个CPU 并发的执行构建表过程中的解析、转换、格式化等内容来提高效率。
如果同时启动了多个LOAD 工具要注意所有LOAD 工具指定的此参数最好不要超过操作系统中逻辑CPU 的总数(在此指定的CPU 是LCPU- 即逻辑CPU)。
此选项不设置,则DB2 会根据当前操作系统中CPU 的数量自动的分配CPU 数量。
DATA BUFFER buffersize此选项用于指定LOAD 工具能够使用的数据缓存的最大值,单位是4k 。
我们可以想象,在处理的数据量很大,且在不超过操作系统空闲物理内存的情况下,我们为LOAD 分配越多的数据缓存那么LOAD 的性能将会越好。
但是此值设置受到数据库的参数UTIL_HEAP_SZ 限制。
db2 load的用法
首先贴一个db2官网的语法图:/developerworks/cn/data/library/techarticles/dm-0808khatri/sidefile1.h tml.-,--------------.V |>>-LOAD--+--------+--FROM----+-filename---+-+--OF--filetype----->'-CLIENT-' +-pipename---++-device-----+'-cursorname-'>--+-------------------------+--+------------------------+------>| .-,--------. | | .-,--------. || V | | | V | |'-LOBS FROM----lob-path-+-' '-XML FROM----xml-path-+-'>--+--------------------------------+--------------------------->| .---------------. || V | |'-MODIFIED BY----file-type-mod-+-'>--+-------------------------------------------------------------------------------+-->| .-,------------------------. || V | |'-METHOD--+-L--(----column-start--column-end-+--)--+-------------------------------+-+-'| | .-,-------------------. | || | V | | || '-NULL INDICATORS--(----null-indicator-list-+--)-'|| .-,-----------. || V | |+-N--(----column-name-+--)----------------------------------------------------------+| .-,---------------. || V | |'-P--(----column-position-+--)------------------------------------------------------'>--+------------------------------------+----------------------->'-XMLPARSE--+-STRIP----+--WHITESPACE-''-PRESERVE-'>--+--------------------------------------------------------------------------+-->'-XMLVALIDATE USING--+-XDS--+-----------------------+--| Ignore and Map parameters |-+-' | '-DEFAULT--schema-sqlid-' |+-SCHEMA--schema-sqlid------------------------------------------+'-SCHEMALOCATION HINTS------------------------------------------'>--+--------------+--+-------------+--+-----------------+------->'-SAVECOUNT--n-' '-ROWCOUNT--n-' '-WARNINGCOUNT--n-'>--+------------------------+----------------------------------->'-MESSAGES--message-file-'>--+-------------------------------+---------------------------->'-TEMPFILES PATH--temp-pathname-'>--+-INSERT-----------------------+----------------------------->| .-KEEPDICTIONARY--. |+-REPLACE--+-----------------+-+| '-RESETDICTIONARY-' |+-RESTART----------------------+'-TERMINATE--------------------'>--INTO--table-name--+-------------------------+---------------->| .-,-------------. || V | |'-(----insert-column-+--)-'>--+----------------------------------------------------------+-->| .-,-------------------------. || V (1) (2) | |'-FOR EXCEPTION--table-name--------------+-------------+-+-'+-NORANGEEXC--+'-NOUNIQUEEXC-'>--+-----------------------------+------------------------------>'-STATISTICS--+-USE PROFILE-+-''-NO----------'>--+-----------------------------------------------------------------+-->| .-NO----------------------------------------------------. |+-COPY--+-YES--+-USE TSM--+--------------------------+--------+-+-+ | | '-OPEN--num-sess--SESSIONS-' | || | .-,----------------. | || | V | | || +-TO----device/directory-+---------------------+ || '-LOAD--lib-name--+--------------------------+-' || '-OPEN--num-sess--SESSIONS-' |'-NONRECOVERABLE--------------------------------------------------'>--+-------------------+--+--------------------------+---------->'-WITHOUT PROMPTING-' '-DATA BUFFER--buffer-size-'>--+--------------------------+--+--------------------+--------->'-SORT BUFFER--buffer-size-' '-CPU_PARALLELISM--n-'>--+---------------------+--+----------------------------+------>'-DISK_PARALLELISM--n-' | .-YES-. |'-FETCH_PARALLELISM--+-NO--+-'>--+--------------------------------+--------------------------->'-INDEXING MODE--+-AUTOSELECT--+-'+-REBUILD-----++-INCREMENTAL-+'-DEFERRED----'.-ALLOW NO ACCESS-----------------------------.>--+---------------------------------------------+-------------->'-ALLOW READ ACCESS--+----------------------+-''-USE--tablespace-name-'>--+----------------------------------------------+------------->'-SET INTEGRITY PENDING CASCADE--+-IMMEDIATE-+-''-DEFERRED--'>--+-----------------+------------------------------------------>'-LOCK WITH FORCE-'>--+----------------------------------------------------------------------------+-->'-SOURCEUSEREXIT--executable--| Redirect Input/Output parameters |--+-------------+-' '-PARALLELIZE-'>--+------------------------------------------------------+----><| .-----------------------. || .-PARTITIONED DB CONFIG-. V | |'-+-----------------------+----partitioned-db-option-+-'Ignore and Map parameters|--+--------------------------------+--------------------------->| .-,------------. || V | |'-IGNORE--(----schema-sqlid-+--)-'>--+----------------------------------------------------+-------|| .-,-----------------------------------. || V | |'-MAP--(----(--schema-sqlid--,--schema-sqlid--)-+--)-'Redirect Input/Output parameters|--+---------------------------------------------------------------------------------+--|'-REDIRECT--+-INPUT FROM--+-BUFFER--input-buffer-+--+-----------------------------+-+-' | '-FILE--input-file-----' '-OUTPUT TO FILE--output-file-' |'-OUTPUT TO FILE--output-file-------------------------------------------'这个语法图先保存起来,有空再慢慢研究,目前暂时把自己能用并且测试过的写出来。
PC db2没有load权限解决办法
db2 grant secadm on database to user john
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0552N "DB2ADMIN" 没有执行操作 "GRANT" 的特权。 SQLSTATE=42502
db2 grant dbadm on database to user john
db2 grant accessctrl on database to user john
db2 grant dataaccess on database to user john
db2 grant sqladm on database to user john
C:Documents and SettingsAdministrator>db2 connect to
sample user db2admin using db2admin
数据库连接信息
数据库服务器 = DB2/NT 9.7.0
SQL 授权标识 = DB2ADMIN
通过授予另一用户新 ACCESSCTRL 权限,安全性管理员可允许该用户授予和取消权限与特权。但是,只有安全性管理员才能授予 SECADM、DBADM 和 ACCESSCTRL 权限。而且,只有安全性管理员才能授予新权限 DATAACCESS,此权限使得用户能够访问特定数据库中的数据。
对用户 john 赋予 SECADM 权限的基本方法如下:
执行下述命令 , 对用户 john 赋予 SYSADM 权限 :
db2 update dbm cfg using sysadm_group admin
DB2数据的导入(Import) 导出(Export)(Load)
DB2中所谓的数据移动,包括:1. 数据的导入(Import)2. 数据的导出(Export)3. 数据的装入(Load)导入和装入都是利用DB2的相关命令把某种格式的文件中的数据保存到数据库中的表中导出是指把DB2数据库的表中的数据保存到某种格式的文件当中去数据移动的作用:如果要在不同的数据库管理系统之间转移数据,数据移动通常是最实用的一种方法,因为任何一种数据库管理系统都支持常用的几种文件格式,通过这个通用的接口,就很容易实现不同系统间数据的转移。
这三个命令中,Export最简单,因为从表中向文件转移数据,通常不会出现错误,也不会有非法的数据。
1. ASC——非定界ASCII文件,是一个ASCII字符流。
数据流中的行由行定界符分隔,而行中的每一列则通过起始和结束位置来定义。
例如:10 Head Office 160 Corporate New York15 New England 50 Eastern Boston20 Mid Atlantic 10 Eastern Washington38 South Atlantic 30 Eastern Atlanta42 Great Lakes 100 Midwest Chicago51 Plains 140 Midwest Dallas66 Pacific 270 Western San Francisco84 Mountain 290 Western Denver2. 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系列的软件进行数据交换。
db2中load命令的用法
db2中load命令的用法
在DB2数据库中,LOAD命令用于将数据从外部文件加载到数据
库表中。
其基本语法如下:
LOAD FROM external_file OF DEL INSERT INTO target_table.
其中,external_file是包含要加载数据的外部文件的路径和
文件名,DEL表示文件中的字段是用特定的分隔符(通常是逗号或
制表符)分隔的,INSERT INTO target_table表示要将数据加载到
的目标表。
此外,LOAD命令还支持许多其他选项,例如可以指定要忽略的列、指定要跳过的行数、指定要使用的字符集等。
您还可以指定在
加载数据时是否验证外部文件中的数据与目标表中的数据类型是否
匹配。
需要注意的是,LOAD命令在执行时需要具有足够的权限,并且
要确保外部文件的格式与目标表的结构相匹配,以避免数据加载失
败或导致数据不一致的情况发生。
PCdb2没有load权限解决办法
要让具有S YSADM权限的用户获取的能力与版本9.5 中相同(授予 SECA DM 权限的能力除外),安全性管理员必须显式授予用户 DBA DM 权限。
注意,安全性管理员授予 DB ADM 权限时,缺省情况下会包括新的D ATAAC CESS和ACC ESSCT RL 权限。
此操作给予用户的能力与版本9.5 提供的能力相同。
要让此用户还能授予 SE CADM权限,那么还必须对其授予 SE CADM权限。
具有SECA DM 权限时允许此用户执行的操作比作为版本 9.5系统管理员时能够执行的操作多。
例如,他们能够创建角色、可信上下文和审计策略之类的对象。
如果具有 SYS ADM 权限的用户创建数据库,那么将自动授予用户对该数据库的 DATA ACCES S、ACC ESSCT RL、SE CADM和 DBA DM 权限,这使得用户可使用的功能与版本 9.5中一样。
对用户 john赋予S YSADM权限的基本语法如下:假设用户joh n的组为admi n;执行下述命令,对用户joh n赋予SYSAD M权限:d b2up datedbmc fg us ings ysadm_grou p adm in对安全性管理员(具有S ECADM权限)的更改DB2 9.7 中,SECAD M 的权限比 DB2 9.5的权限增大了具有 SEC ADM 权限的用户现在可授予和取消所有权限与特权,包括 DB ADM 和 SECA DM。
安全性管理员现在可授予角色和组 SEC ADM 权限。
在版本 9.5中,SEC ADM 只能授予用户。
安全性管理员可通过授予另一用户对审计存储过程和表函数(AUDI T_ARC HIVE、AUDIT_LIST_LOGS和 AU DIT_D ELIM_EXTRA CT)的EXECU TE 特权来将运行它们的责任委托给该用户。
使用DB2的LOAD
使⽤DB2的LOAD FROM CURSOR转移数据典型的 DB2 数据转移任务涉及三个步骤:把数据以⼆进制或⽂本格式从源数据库导出到⼀个临时数据交换⽂件,在系统之间转移⽣成的⽂件,把数据从⽂件导⼊或装载到⽬标数据库中. 使⽤ DB2 LOAD 实⽤程序的 FROM CURSOR 选项简化 DB2? for Linux?, UNIX?, and Windows? 的数据转移过程。
本⽂介绍 LOAD FROM CURSOR 特性并提供两个接⼝ Command Line Processor 和 ADMIN_CMD 存储过程的使⽤⽰例。
典型的 DB2 数据转移任务涉及三个步骤: 把数据以⼆进制或⽂本格式从源数据库导出到⼀个临时数据交换⽂件 在系统之间转移⽣成的⽂件 把数据从⽂件导⼊或装载到⽬标数据库中 在数据量很⼤的情况下,使⽤ EXPORT 实⽤程序⽣成数据交换⽂件常常要花费很长时间。
另外,在把数据移⼊和移出数据库时,必须考虑不同的数据库编码页和操作系统。
可以使⽤ LOAD 实⽤程序的 FROM CURSOR 选项避免这些问题。
当指定 FROM CURSOR 选项时,LOAD 实⽤程序直接把⼀个 SQL 查询的结果集作为数据装载操作的来源,这样就不需要⽣成临时数据交换⽂件。
因此,LOAD FROM CURSOR 是在不同的表空间或数据库之间快速轻松地转移数据的⽅法。
可以在命令⾏上执⾏ LOAD FROM CURSOR,也可以通过使⽤ DB2 的 ADMIN_CMD 存储过程在应⽤程序或存储过程中执⾏它。
本⽂介绍 LOAD FROM CURSOR 特性并提供两个接⼝ Command Line Processor (CLP) 和 ADMIN_CMD 存储过程的使⽤⽰例。
把表转移到另⼀个表空间 ⾸先,看看如何把表从⼀个表空间转移到另⼀个表空间。
如果创建表的表空间的页⾯⼤⼩不合适,或者应该⽤另⼀个缓冲区池访问表,就可能需要执⾏这种数据转移。
db2 load的用法
首先贴一个db2官网的语法图:/developerworks/cn/data/library/techarticles/dm-0808khatri/sidefile1.h tml.-,--------------.V |>>-LOAD--+--------+--FROM----+-filename---+-+--OF--filetype----->'-CLIENT-' +-pipename---++-device-----+'-cursorname-'>--+-------------------------+--+------------------------+------>| .-,--------. | | .-,--------. || V | | | V | |'-LOBS FROM----lob-path-+-' '-XML FROM----xml-path-+-'>--+--------------------------------+--------------------------->| .---------------. || V | |'-MODIFIED BY----file-type-mod-+-'>--+-------------------------------------------------------------------------------+-->| .-,------------------------. || V | |'-METHOD--+-L--(----column-start--column-end-+--)--+-------------------------------+-+-'| | .-,-------------------. | || | V | | || '-NULL INDICATORS--(----null-indicator-list-+--)-'|| .-,-----------. || V | |+-N--(----column-name-+--)----------------------------------------------------------+| .-,---------------. || V | |'-P--(----column-position-+--)------------------------------------------------------'>--+------------------------------------+----------------------->'-XMLPARSE--+-STRIP----+--WHITESPACE-''-PRESERVE-'>--+--------------------------------------------------------------------------+-->'-XMLVALIDATE USING--+-XDS--+-----------------------+--| Ignore and Map parameters |-+-' | '-DEFAULT--schema-sqlid-' |+-SCHEMA--schema-sqlid------------------------------------------+'-SCHEMALOCATION HINTS------------------------------------------'>--+--------------+--+-------------+--+-----------------+------->'-SAVECOUNT--n-' '-ROWCOUNT--n-' '-WARNINGCOUNT--n-'>--+------------------------+----------------------------------->'-MESSAGES--message-file-'>--+-------------------------------+---------------------------->'-TEMPFILES PATH--temp-pathname-'>--+-INSERT-----------------------+----------------------------->| .-KEEPDICTIONARY--. |+-REPLACE--+-----------------+-+| '-RESETDICTIONARY-' |+-RESTART----------------------+'-TERMINATE--------------------'>--INTO--table-name--+-------------------------+---------------->| .-,-------------. || V | |'-(----insert-column-+--)-'>--+----------------------------------------------------------+-->| .-,-------------------------. || V (1) (2) | |'-FOR EXCEPTION--table-name--------------+-------------+-+-'+-NORANGEEXC--+'-NOUNIQUEEXC-'>--+-----------------------------+------------------------------>'-STATISTICS--+-USE PROFILE-+-''-NO----------'>--+-----------------------------------------------------------------+-->| .-NO----------------------------------------------------. |+-COPY--+-YES--+-USE TSM--+--------------------------+--------+-+-+ | | '-OPEN--num-sess--SESSIONS-' | || | .-,----------------. | || | V | | || +-TO----device/directory-+---------------------+ || '-LOAD--lib-name--+--------------------------+-' || '-OPEN--num-sess--SESSIONS-' |'-NONRECOVERABLE--------------------------------------------------'>--+-------------------+--+--------------------------+---------->'-WITHOUT PROMPTING-' '-DATA BUFFER--buffer-size-'>--+--------------------------+--+--------------------+--------->'-SORT BUFFER--buffer-size-' '-CPU_PARALLELISM--n-'>--+---------------------+--+----------------------------+------>'-DISK_PARALLELISM--n-' | .-YES-. |'-FETCH_PARALLELISM--+-NO--+-'>--+--------------------------------+--------------------------->'-INDEXING MODE--+-AUTOSELECT--+-'+-REBUILD-----++-INCREMENTAL-+'-DEFERRED----'.-ALLOW NO ACCESS-----------------------------.>--+---------------------------------------------+-------------->'-ALLOW READ ACCESS--+----------------------+-''-USE--tablespace-name-'>--+----------------------------------------------+------------->'-SET INTEGRITY PENDING CASCADE--+-IMMEDIATE-+-''-DEFERRED--'>--+-----------------+------------------------------------------>'-LOCK WITH FORCE-'>--+----------------------------------------------------------------------------+-->'-SOURCEUSEREXIT--executable--| Redirect Input/Output parameters |--+-------------+-' '-PARALLELIZE-'>--+------------------------------------------------------+----><| .-----------------------. || .-PARTITIONED DB CONFIG-. V | |'-+-----------------------+----partitioned-db-option-+-'Ignore and Map parameters|--+--------------------------------+--------------------------->| .-,------------. || V | |'-IGNORE--(----schema-sqlid-+--)-'>--+----------------------------------------------------+-------|| .-,-----------------------------------. || V | |'-MAP--(----(--schema-sqlid--,--schema-sqlid--)-+--)-'Redirect Input/Output parameters|--+---------------------------------------------------------------------------------+--|'-REDIRECT--+-INPUT FROM--+-BUFFER--input-buffer-+--+-----------------------------+-+-' | '-FILE--input-file-----' '-OUTPUT TO FILE--output-file-' |'-OUTPUT TO FILE--output-file-------------------------------------------'这个语法图先保存起来,有空再慢慢研究,目前暂时把自己能用并且测试过的写出来。
db2 load的关键函数
db2 load的关键函数db2locate的关键函数_DB2常用函数详解(一)字符串函数VALUE函数语法:VALUE(EXPRESSION1,EXPRESSION2)VALUE函数是用返回一个非空的值,当其第一个参数非空,直接返回该参数的值,如果第一个参数为空,则返回第二个参数的值。
表示如果T1.ID为空,则返回空串,如果T1.ID不为空,则返回T1.ID。
eg:SELECTVALUE(ID,'')FROMT1PS:空是值为NULL的情况,不包括空字符串‘’COALESCE函数语法:COALESCE(ARG1,ARG2...)COALESCE返回参数集中第一个非null参数。
用法类似于VALUE 函数。
LENGTH函数语法:LENGTH(ARG)LENGTH函数返回参数的长度。
eg:SELECTLENGTH(NAME)FROMT1PS:值为NULL时,返回NULL,空字符串‘’返回1 LCASE、LOWER函数语法:LCASE()、LOWER()LCASE、LOWER函数返回定长、变长字符串的小写形式。
eg:SELECTLCASE(NAME),LOWER(NAME)FROMT1 UCASE、UPPER函数语法:UCASE()、UPPER()UCASE、UPPER函数返回定长、变长字符串的大写形式。
eg:SELECTUCASE(NAME),UPPER(NAME)FROMT1 LTRIM、RTRIM函数语法:LTRIM()、RTRIM()LTRIM、RTRIM函数从CHAR、VARCHAR、GRAPHIC或者VARGRAPHIC中去掉左侧或右侧的空格。
eg:SELECTLTRIM(NAME),RTRIM(NAME)FROMT1LEFT、RIGHT函数语法:LEFT(ARG,LENGTH)、RIGHT(ARG,LENGTH) LEFT、RIGHT函数返回ARG最左边、右边的LENGTH个字符串,ARG可以是CHAR或BINARYSTRING。
db2load选项
db2load选项db2 load使⽤最近有个好朋友因为load问题导致了⽣产故障,所以特意写篇⽂章总结⼀下load的⽤法及注意事项。
1.load概述数据的导⼊⽅法有insert,import和load三种,其中load不需要写⽇志(或很少⽇志),不做检查约束和参照完整性约束,不触发Trigger,锁的时间⽐较短,因此特别适合⼤数据量的导⼊。
2.load的4个阶段load过程分为4个阶段:load/build/delete/index copy。
load阶段是将源⽂件parser成物理数据存储的格式,直接装⼊到页中,⽽不通过db2引擎,load阶段会检查表定义,违背定义的数据不会装⼊到表中。
build阶段建议索引(如果装⼊表有索引的话),会检查唯⼀性约束,违背了唯⼀性的数据会在delete阶段删除。
index copy阶段将index数据从指定的临时表空间拷贝到初始的表空间⾥,index copy只适应于allow read access场景。
load的4个阶段会记录在messages⽂件⾥。
3.online and offline load缺省情况下,load过程不允许其他应⽤访问表,即allow no access,或叫offline load(离线加载)。
Allow read access,或叫online load(在线加载),只有在load ...insert into的时候才允许使⽤,其他应⽤读到的数据是加载前的数据,load ... replace into会将数据先删除,再load,只能是离线加载。
4.load举例此例中,要将calpar.del⽂件数据导⼊到表calpar中,calpar表的第⼀个字段是primary key,最后⼀个字段定义为⾮空的数字型。
load命令如下:load from calpar.del of del modified by dumpfile=/dump.fil warningcount 100 messages par.msgs inser into calpar for exception calpar.exp此命令会产⽣四个输出,calpar为⽬标表,messages记录load的4个阶段,dumpfile记录违背表定义的数据,exception table记录违背唯⼀性约束的数据(exception table需要在load之前创建,表定义为⽬标表+timestamp type column+clob type column)。
DB2数据的导入(Import) 导出(Export)(Load)
DB2中所谓的数据移动,包括:1. 数据的导入(Import)2. 数据的导出(Export)3. 数据的装入(Load)导入和装入都是利用DB2的相关命令把某种格式的文件中的数据保存到数据库中的表中导出是指把DB2数据库的表中的数据保存到某种格式的文件当中去数据移动的作用:如果要在不同的数据库管理系统之间转移数据,数据移动通常是最实用的一种方法,因为任何一种数据库管理系统都支持常用的几种文件格式,通过这个通用的接口,就很容易实现不同系统间数据的转移。
这三个命令中,Export最简单,因为从表中向文件转移数据,通常不会出现错误,也不会有非法的数据。
1. ASC——非定界ASCII文件,是一个ASCII字符流。
数据流中的行由行定界符分隔,而行中的每一列则通过起始和结束位置来定义。
例如:10 Head Office 160 Corporate New York15 New England 50 Eastern Boston20 Mid Atlantic 10 Eastern Washington38 South Atlantic 30 Eastern Atlanta42 Great Lakes 100 Midwest Chicago51 Plains 140 Midwest Dallas66 Pacific 270 Western San Francisco84 Mountain 290 Western Denver2. 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系列的软件进行数据交换。
DB2数据库导入和导出
若表中存在自增长的IDENTITY列,需要使 用相应的参数才能导入,比如:
import from mytbl2.ixf of ixf modified by identityignore insert into mytbl2
导入命令的一些关键参数如下:
INSERT:不修改当前数据,向目标表添加新的行。 INSERT_UPDATE:向目标表添加新的行,或更新匹配 主键的已有行。 REPLACE:删除目标表中所有已有数据后,向目标表插 入导入数据。 CREATE:创建表定义并插入新行。 COMMITCOUNT n:每导入n条记录就提交一次更改,用 来降低数据丢失的风险。 RESTARTCOUNT n:跳过前n条记录,从n+1开始导入 数据,可以减少导入量,但是必须指定COMMITCOUNT 参数。 COMPOUND n:指定在一个可之行操作中包含n条SQL 语句,可以提高性能。
例如:导出sample数据库中的全部数据 db2move sample export –u db2inst1 –p password
说明: • 每个表的内容都存储在一个.ixf文件中,每个.ixf文件都有一个与之 相对应的.msg文件(用于描述从表中导出数据时的信息); • db2move.lst用来记录.ixf文件、.msg文件与表的一一对应关系; • EXPORT.out记录的是导出数据时的屏幕输出。
db2move <database-name> <action> [<option> <value>]
其中: action: export、import、load
option: -tn(特定的表)、-ts (表空间)、-tc(表创建者)、
-sn(模式名) 、-u(用户id)、-p(密码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Db2 文件导入导出常见命令总结Db2 文件导入导出常见命令总结Db2 的数据迁移,最常用的就是导入导出功能,而导入导出的命令貌似简单,实则内含玄机,千变万化,稍不留神,则错误百出,这儿就工作中常用到的命令,总结了一下,分享给大家!欢迎大家踊跃拍砖!当然在这以前,我觉得有必要提及一点关于导入导出基础的知识!DEL:界定的ASCII文件,行分隔符和列分隔符将数据分开。
ASC:定长的ASCII文件,行按照行分割符分开,列定长。
PC/IXF:只能用来在db2之间导数据,根据类型数字值被打包成十进制或者二进制,字符被保存为ASCII,只保存变量已经使用了的长度,文件中包括表的定义和表的数据。
WSF:工作表方式导入导出,这种格式的文件类型用的比较少。
Db2中对不同的数据导入导出方式,支持不同的文件类型,这里个人觉得很有必要注意下的。
文件类型Import export load-------------------------------------------------------定界支持支持支持非定界支持不支持支持Ixf 支持支持支持Wsf工作表支持支持不支持关于3种导入导出操作进行简单的介绍:export:导出数据,支持IXF,DEL或WSFimport:导入数据,可以向表中导入数据,支持上面提到的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 …;关于Import1.Import模式的介绍CREATE/INSERT/INSERT_UPDATE/REPLACE/REPLACE_CREATECREATE :首先创建目标表和它的索引,然后将数据导入到新表中。
该选项惟一支持的文件格式是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的操作中会讲到!关于Load1. 字符串间隔,列间隔,小数点表示CHARDEL/COLDEL/DECPT例:LOAD CLIENT FROM 'F:s1.del' OF DEL MODIFIED BY CHARDEL(COLDEL= DECPT? INSERT INTO "DB2ADMIN"."ZXTABLES"2.数据库记录中存在换行符,导致数据无法装入的情况MODIFIED BY DELPRIORITYCHARDb2默认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.ZXTABLES3.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 NONRECOVERABLELOAD CLIENT FROM 'F:s1.del' OF DEL INSERT INTO DB2ADMIN.ZXTABLES COPY YES4. 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,这种事不经常发生,但是偶尔会发生一次,比较郁闷的是,当表继续插入数据的时候,下一次分配就会发生冲突,尤其是如果自增建为主键的时候,会违反唯一约束。