新聞中心
DB2插入數(shù)據(jù)一般都會進行日志操作,不過下面為您介紹的方法實現(xiàn)了DB2插入數(shù)據(jù)不進行日志操作,如果您感興趣的話,不妨一看。

從網(wǎng)站建設(shè)到定制行業(yè)解決方案,為提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)服務(wù)體系,各種行業(yè)企業(yè)客戶提供網(wǎng)站建設(shè)解決方案,助力業(yè)務(wù)快速發(fā)展。成都創(chuàng)新互聯(lián)將不斷加快創(chuàng)新步伐,提供優(yōu)質(zhì)的建站服務(wù)。
在程序中需要使用下面的代碼
insert into a select * from b where ......
每次插入到a表的記錄有600多萬條,每次執(zhí)行該語句DB2都會返回SQLCODE值為-964的錯誤碼,用db2 sql0964命令查看錯誤原因,DB2的解釋為SQL0964C The transaction log for the database is full. 然后按照DB2的說明把日志文件的大小和日志文件的數(shù)量都擴充了,如下命令
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
補充一下用的是循環(huán)日志
總的日志文件擴大到了1.5G左右,然后執(zhí)行下面的命令
db2 "force application all"
db2stop
db2start
db2 connect to MY_DATABASE user db2inst1 uing db2inst1
***從新調(diào)用包含insert into ... select ...語句的存儲過程,此次程序執(zhí)行完畢,但效率太慢。
后來一想是否能使對某表進行的DML操作不進行日志操作,把a表和b表都刪除了,從新建表,建表時選擇了not logged initially子句,建完表后我把數(shù)據(jù)從新導(dǎo)入到b表中,***執(zhí)行包含insert into ... select ...語句的SQL存儲過程,DB2仍舊返回SQLCODE的值為-964的錯誤碼。
有沒有一個高效的方法(***能讓DB2執(zhí)行此類方法時不進行日志操作)解決這個問題呢?
-------------
去除記錄日志。
到控制中心--配置--日志--日志活動,配置成不記錄日志。
-------------
采用循環(huán)日志可以考慮調(diào)整一下數(shù)據(jù)庫的commitcount參數(shù)
-------------
使用not logged initially選項建表也是可以用的。
但是要先激活not logged initially選項;
在DB2 CLP中的例子;
DB2 CREATE TABLE A ...... NOT LOGGED INITIALLY;
DB2 +C //關(guān)閉自動提交選項;
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選項同時被關(guān)閉;
這個時候***執(zhí)行備份,因為你這一段數(shù)據(jù)操作是沒有日志的,不利于以后恢復(fù);
不過不是很推薦使用這個方法,如果要導(dǎo)入大量數(shù)據(jù),還是使用Load,Import好一些;
想要在程序中寫也是可以的,DB2提供了API,可以參考API Reference
【編輯推薦】
手工分析DB2 sql文執(zhí)行計劃
DB2 SQL腳本批量執(zhí)行的實現(xiàn)過程
DB2在線導(dǎo)出的方法
db2存儲過程常用語句
DB2 CREATE SERVER語句的用法
文章標(biāo)題:DB2插入數(shù)據(jù)不進行日志操作的實現(xiàn)
標(biāo)題路徑:http://www.dlmjj.cn/article/dhgoscc.html


咨詢
建站咨詢
