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,便于优化器选择最优执行计划。
db2 load选项的更多相关文章
- db2 load乱码问题
在使用db2过程中经常需要从一个库里拿数据到自己库里来,通常需要将源表的数据导为数据文件,通过数据文件load到自己库里. 这个过程如果两个库的字符编码不一致,常规导入导出就会出现中文乱码. 以下是两 ...
- db2 load报文件系统满
使用db2 load导入数据 数据量比较大时常常会报文件系统已满错误. 原因分析:导入表建有索引,在load的“索引复制”阶段会从系统临时表空间拷贝到目标表空间,导致系统临时表空间所在的文件系统满,l ...
- db2 load命令装载数据时定位错误出现的位置
使用如下命令装载数据(注意CPU_PARALLELISM 1): db2 load from filename.del of del replace into tab_name CPU_PARALL ...
- [转]DB2 load参数
本文持续更新,LOAD如何提高parallelism.LOAD SHRLEVEL CHANGE的性能提高. =========================== Every once in a wh ...
- DB2因表空间不够产生load表失败
今天下午恢复表的时候发现出现错误: SQL3520W Load Consistency Point was successful. SQL3110N The utility has complet ...
- db2 import和load
Import和Load 都可以将数据导入到DB2服务器中,但是2者是有很大区别的. Import 其实执行了SQL 的INSERT 操作.和INSERT 操作一样,Import 执行的时候会激活触发器 ...
- DB2和Oracle区别
转 http://blog.chinaunix.net/uid-7374279-id-2057574.html 写在前面:今天客户来访(日本人),问我DB2和Oracle区别.因为不是DBA(勉强的理 ...
- db2日常维护
一. DB2日常维护操作 1.数据库的启动.停止.激活 db2 list active databases db2 active db 数据库名 db2start --启动 db2stop [forc ...
- <转载>DB2常用命令
1.数据库的启动.停止 db2start --启动 db2stop [force] --停止 2.与数据库的连接.断开 db2 CONNECT TO DBName [user UserI ...
随机推荐
- Nginx配置项优
1.nginx运行工作进程个数,一般设置cpu的核数或者核心数x2 如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件. [root@localhost~] ...
- GGTalk ——C#开源即时通讯系统
http://www.cnblogs.com/justnow/ GGTalk ——C#开源即时通讯系统 下载中心 GGTalk(简称GG)是可在广域网部署运行的QQ高仿版,2013.8.7发布GG ...
- python基础——字符串、编码、格式化
1.三种编码:ascii Unicode utf8 2.字符串和编码数字的两个函数:ord(字符转数字ord(‘A’)=65)和 chr(数字转字符chr(65)=A) 3.bytes存储编码,记住两 ...
- yum安装的时候报错,关于python的函数库
我在执行yum -y install nc命令的时候出现如下报错 There was a problem importing one of the Python modulesrequired to ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(1)-1目录
Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...
- 伪分布式hadoop1.1.2和hbase0.94.11配置
Hadoop 1.1.2 和Hbase 0.94.11版本配置 测试时ip 172.19.32.128 这个版本需要把/etc/hosts的aa-vm改成127.0.0.1,也就是和localhos ...
- Python 类的内置方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # 作者:Presley # 邮箱:1209989516@qq.com # 时间:2018-11-04 # p ...
- jav实验二
实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验内容 1.参考Intellj ID ...
- zip文件解压工具类
java解压zip文件 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io. ...
- JavaEE 之 Spring Data JPA
1.事务 a.事务的关键属性(ACID) ①原子性(atomicity):事务的原子性确保动作要么全部完成,要么完全不起作用 ②一致性(consistency):一旦所有事务动作完成,事务就被提交.也 ...