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

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语句的用法

网站栏目:DB2插入数据不进行日志操作的实现
分享地址:http://www.mswzjz.cn/qtweb/news13/131613.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能