db2 load选项

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)。本例中,第2行和第5行违背了表定义,因此存到了dumpfile文件;第4行和第7行违背了唯一性约束,存到了exception table里;剩余正常的数据存到了目标表里。

5. load表的状态

load可能出现的几种状态,某一时刻可能会同时处于几种状态。只有当表是normal状态时,表才能进行正常的增删改查操作。

normal: 正常状态

set integrity pending: 如果目标表有check约束或reference约束,那么Load后此表处于set integrity pending,表明表有约束还未检查,稍后解释。

load in progress:load正在数据加载过程中。

load pending:数据提交前出现了故障,需要通过load..terminate,load..replace或load..restart解除暂挂状态

read access only:目标表数据是可以读的,当load时指定了allow read access,那表就会处于read access only状态

unavailable:表可能被删除了或从backup中恢复了。

unknown:通过load..query命令无法得知表的状态。

可以通过load..query命令查看表的状态,

(1).当表处于load pending的时候,需要检查pending的原因,然后通过load..terminate终止load操作,或通过load..replace将表数据清空,或通过load..restart重启load操作。记住不要删除load的临时数据文件。load pending的原因很多,如表空间没有足够的空间等。

(2).当表处于set integrity pending状态的时候,意味着要求用户去检查数据的一致性(check constraint和reference constraint)。可通过 set integrity for <table_name>immediate checked将set integrity pending去掉。

(3).load..replace会将数据先清空,再load数据。如果中间出现故障,那么通过load..terminate命令后,表里的数据会变空,因此建议load之前进行数据库备份或单表备份。

6. load的COPY选项

COPY可以理解为备份,主要针对前滚恢复,即当数据库处于归档日志情况下。由于load不记日志,需要备份才能进行恢复。

Load支持三种COPY选项,COPY NO(缺省),COPY YES,和NONRECOVERABLE。

COPY NO :此选项会导致load表所在的表空间处于backup pending状态,可以读数据,但不能对表进行增删改。load操作一旦开始,表就会处于backup pending状态,即使终止Load,也不会使表空间脱离此状态。load完成后,需要进行表空间backup。

COPY YES: 此选项会将load变化的数据进行自动备份。在前滚恢复阶段(rollforward),会使用这个备份重建load过程产生的数据。

NONRECOVERABLE:此选项表明此表是不能通过rollforward恢复的,当rollforward完成后,此表只能被删除或从备份介质中恢复。此选项不会使表空间处于backup pending状态,也不会产生数据的备份。

我的朋友前几天因为在正常交易时间load数据,造成了表空间处于backup pending状态,交易系统只能查不能更新,尽管发现问题后立即终止load,但由于表空间很大,backup花了将近1个半小时,严重影响了交易的正常运行,一个失误可能会导致年终奖泡汤。他在测试系统测试过没问题,但由于测试系统使用的是循环日志,而生产中利用的是归档日志。

7. load replace快速清空大表

对于大表数据的清空,如果用delete,由于会产生大量的日志,导致效率很慢,而且容易出现log full。可以考虑用load from /dev/null of del replace into

(Unix/Linux) 或者load from empty.del of del replace into(Windows,empty.del是一个空的文本文件即可)

8. load总结

load的步骤可以总结如下:

(1)创建表和索引

(2) 建异常表(exception table)

(3) 备份db或tablespace

(4) load ..dumpfile ..messages ..exception

(5) 验证dumpfile,messages和异常表

(6) backup tablespace if logretain=on and copy NO

(7) set integrity (if table has check or reference constraints)

(8) 更新statistics,便于优化器选择最优执行计划。

时间: 2024-11-02 23:24:11

db2 load选项的相关文章

db2 load报文件系统满

使用db2 load导入数据 数据量比较大时常常会报文件系统已满错误. 原因分析:导入表建有索引,在load的"索引复制"阶段会从系统临时表空间拷贝到目标表空间,导致系统临时表空间所在的文件系统满,load未完成,表状态变为load pending 解决方法:1.用load 中的terminate终止load,使表状态变为正常   (load  from abc.txt of del terminate into 表名) 2.删除表索引 3.用load导入数据 4.创建索引 也可以增加

利用 MySQL 技能学习 DB2 Express: DB2 与 MySQL 的管理任务和基本任务

原文地址:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0602tham2/index.html 简单介绍 管理不同类型的数据库是大多数数据库管理员的一种工作方式. 非常少出现 DBA 仅仅管理一组同类数据库的情形. 在企业的数据中心,会有各种不同的后端存储库来存放数据.比方数据库中的电子表格.图像.视频/音频形式的数据,而这些后端存储库包含 DB2 Universal Database?.Oracle.Mic

db2中的常用命令及使用方法

一.高(重要度) 1.启动一个db 2实例使用:  net start instanceName 2.停止一个db 2实例使用:  net stop instanceName 3.启动配置助手:  db2=>!db2ca 4.手工配置连接:  db2=>catalog node/db 5.删除视图:  db2=>drop view view_name 6.创建表:  db2=>create table tablename 7.列出活动的数据库和连接数:  db2=>list

DB2常用指令

--Title:DB2 常用命令--Date:2008-6-26--注:在[开始]->[运行]中输入 db2cw 或 db2cmd 进入 DB2 CLP,db2ce 进入命令编辑器,db2cc进入控制中心---------------------------------------------------------------------------------------------------------------------------------------------1.数据库的启

DB2 数据库权限

以下内容转载:  http://blog.csdn.net/xiyuan1999/article/details/8135263 DB2中的权限 DB2 中有三种主要的安全机制,可以帮助 DBA 实现数据库安全计划:身份验证(authentication).授权(authorization) 和特权(privilege). 身份验证是用户在尝试访问 DB2 实例或数据库时遇到的第一种安全特性.DB2 身份验证与底层操作系统的安全特性紧密协作来检验用户 ID 和密码.DB2 还可以利用 Kerbe

DB2和Oracle区别

分类: 写在前面:今天客户来访(日本人),问我DB2和Oracle区别.因为不是DBA(勉强的理由),我还真没有认真总结过.但我的第一感觉:一个是instance,一个是Database.建Ora库和DB2的库是不一样的.实在是はずかしい. 系统结构概述 首先,我们需要理解 Oracle 使用的架构,并理解它与 DB2 的不同之处.图 1 展示了 Oracle 的系统结构.将该图与 图 2 进行比较,后者显示了 DB2 的系统结构.在阅读本文的时候,为便于理解,可以参照这两个图. 图 1. Or

v97fp5后, load问题诊断方法增强.

DB2 9.7 FP5及以后, 新增-load选项, 通过loadid可以获得所有相关的EDU和stack数据. $ db2 list utilities show detail ID                               = 41Type                             = LOADDatabase Name                    = SAMPLEPartition Number                 = 0Descrip

&lt;转载&gt;DB2常用命令

1.数据库的启动.停止    db2start --启动   db2stop [force] --停止 2.与数据库的连接.断开   db2 CONNECT TO DBName [user UserID using PWD] --建立连接    db2 CONNECT reset /db2 disconnect CURRENT --断开连接 3.实例的创建.删除db2icrt < 实例名称 > --创建 db2 实例db2idrop < 实例名称 > --删除 db2 实例 SET

SQL0668N 原因码为 1 ,所以不允许操作 SQLSTATE 57016 ORACLE一次失败的导入到DB2

SQL0668N 原因码为 "1",所以不允许操作 SQLSTATE=57016 ORACLE一次失败的导入到DB2 SQL0668N 原因码为 "1" SQLSTATE=57016 ORACLE导入到DB2 日月明王的BLOG http://sunmoonking.spaces.live.com 利用MTK工具没有成功导入数据,于是用(ORACLE 用MTK工具导入到DB2 http://sunmoonking.spaces.live.com/blog/cns!E