DB2插入数据不进行日志操作的实现_DB2_数据库_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 数据库 > DB2 > DB2插入数据不进行日志操作的实现

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

 2010/12/16 8:14:14    程序员俱乐部  我要评论(0)
  • 摘要:DB2插入数据一般都会进行日志操作,不过下面为您介绍的方法实现了DB2插入数据不进行日志操作,如果您感兴趣的话,不妨一看。在程序中需要使用下面的代码insertintoaselect*frombwhere......每次插入到a表的记录有600多万条,每次执行该语句DB2都会返回SQLCODE值为-964的错误码,用db2sql0964命令查看错误原因,DB2的解释为SQL0964CThetransactionlogforthedatabaseisfull
  • 标签:实现 数据 操作

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

发表评论
用户名: 匿名