DB2插入数据不进行日志操作的实现

数据库
在DB2数据库中使用Insert语句时,能否不进行日志操作呢?答案是肯定的,下文对该方法的实现过程作了详细的介绍,供您参考。

DB2插入数据一般都会进行日志操作,不过下面为您介绍的方法实现了DB2插入数据不进行日志操作,如果您感兴趣的话,不妨一看。

在程序中需要使用下面的代码  
          insert   into   a   select   *   from   b   where   ......  
每次插入到a表的记录有600多万条,每次执行该语句DB2都会返回SQLCODE值为-964的错误码,用db2 sql0964命令查看错误原因,DB2的解释为SQL0964C   The   transaction   log   for   the   database   is   full.   然后按照DB2的说明把日志文件的大小和日志文件的数量都扩充了,如下命令  
db2   update   db   cfg   for   MY_DATABASE   using   LOGFILSIZ   7900  
db2   update   db   cfg   for   MY_DATABASE   using   LOGPRIMARY   30  
db2   update   db   cfg   for   MY_DATABASE   using   LOGSECOND   20  
补充一下用的是循环日志  
   
总的日志文件扩大到了1.5G左右,然后执行下面的命令  
db2   "force   application   all"  
db2stop  
db2start  
db2   connect   to   MY_DATABASE   user   db2inst1   uing   db2inst1  
   
***从新调用包含insert   into   ...   select   ...语句的存储过程,此次程序执行完毕,但效率太慢。  
   
后来一想是否能使对某表进行的DML操作不进行日志操作,把a表和b表都删除了,从新建表,建表时选择了not   logged   initially子句,建完表后我把数据从新导入到b表中,***执行包含insert   into   ...   select   ...语句的SQL存储过程,DB2仍旧返回SQLCODE的值为-964的错误码。  
   
有没有一个高效的方法(***能让DB2执行此类方法时不进行日志操作)解决这个问题呢?

-------------

去除记录日志。  
到控制中心--配置--日志--日志活动,配置成不记录日志。

-------------

采用循环日志可以考虑调整一下数据库的commitcount参数

-------------

使用not   logged   initially选项建表也是可以用的。  
但是要先激活not   logged   initially选项;  
在DB2   CLP中的例子;  
DB2   CREATE   TABLE   A   ......   NOT   LOGGED   INITIALLY;  
DB2   +C         //关闭自动提交选项;  
db2=>ALTER   TABLE   A   ACTIVATE   NOT   LOGGED   INITIALLY;  
db2=>Insert   into   a   select   *   from   b;  
db2=>commit;  
commit之前由于打开了not   logged   intially选项,后面的Sql语句不计日志;  
commit之后not   logged   intially选项同时被关闭;  
这个时候***执行备份,因为你这一段数据操作是没有日志的,不利于以后恢复;  
   
不过不是很推荐使用这个方法,如果要导入大量数据,还是使用Load,Import好一些;  
想要在程序中写也是可以的,DB2提供了API,可以参考API   Reference

 

 

 

【编辑推荐】

手工分析DB2 sql文执行计划

DB2 SQL脚本批量执行的实现过程

DB2在线导出的方法

db2存储过程常用语句

DB2 CREATE SERVER语句的用法

 

责任编辑:段燃 来源: 互联网
相关推荐

2010-08-27 11:22:01

DB2日志文件归档

2010-08-17 16:04:29

DB2数据库

2010-09-01 10:17:14

DB2日志

2010-08-18 17:15:23

DB2 实现split

2010-11-03 16:32:10

DB2创建数据库

2010-11-03 13:50:49

DB2删除重复数据

2015-10-23 16:40:21

DB2删除数据

2010-08-09 16:46:05

DB2备份

2010-11-02 14:53:38

DB2权限

2010-08-02 14:34:53

DB2数据移动

2011-05-11 13:01:07

DB2数据恢复数据备份

2010-08-03 13:56:11

DB2表复制

2010-07-27 09:29:40

DB2数据移动

2010-09-30 15:52:55

DB2循环查询

2010-08-11 12:34:59

DB2 Q 复制配置

2009-03-20 11:33:45

DB2数据转移数据库

2010-11-03 14:52:26

DB2列转行

2011-05-16 14:42:12

DB2数据库实用操作

2010-08-17 09:48:40

DB2 分区数据库

2010-09-30 16:46:11

DB2操作语句
点赞
收藏

51CTO技术栈公众号