在刪除大表的時候,經常會由於資料量太大,造成日誌檔案滿了,接著無法刪除資料.
以下是刪除大表不記錄日誌的具體步驟:
1.臨時設定自動提交關閉
(使用命令db2 list command options檢視auto-commit引數狀態是否為off,如果不是則使用db2set db2options=+c永久關閉)
update command options using c off
2.設定不記錄日誌
alter table tabname activate not logged initially
3.刪除資料
delete from tabname where …
4.手動提交
commit
5.開啟自動提交
(如果關閉使用使用db2set db2options=+c,則開啟使用db2set db2options=-c)
update command options using c on
tips:
不記錄日誌與刪除資料必須在同一事務進行才有效,若執行順序為:not logged → commit → delete.. 則not logged失效;
以下以表tmp為例子,往表插入大量資料並報日誌滿了
那麼如何解決這個問題呢?
1.首先連線好資料庫
db2 connect to qindb user db2inst1 user db2inst1
2.設定表不記錄日誌
db2 +c "alter table len.tmp activate not logged initially"
3.插入表資料
db2 +c "insert into len.tmp select * from len.tmp"
4.提交
db2 commit;
以下是真實操作截圖
db2 delete 大表不寫日誌方法
最近由於專案需要,用 shell 程式批量刪除業務表資料,但還需要按業務需求保留業務歷史資料,由於專案中用的是 db2,db2 在刪除資料時會產生大量的日誌,會把日誌檔案充滿,會報 57011錯誤.通過在網上查詢一些資料,最終在不改變原表結構引數的基礎上,減少其他們人員的工作量的基礎上動態調整引數。...
oracle上億條記錄大表delete
delete use hash a,b parallel a,15 from tabacca where exists select 1 from temptablea b where a.id b.id and b.type 1 可以試試多個job分工,同時進行。比如開10個job,每個job分十...
Oracle對大表進行delete注意事項
那麼可以注意一下如下說明 檢視執行計畫,如果說刪除的記錄很多,走索引的成本會比全表掃瞄更大,因為更新資料時還需要做一些約束校驗和建立index entry 而且對於多cpu 情況,全表掃瞄還可以使用並行的特性。如果表上有索引,b tree 索引可以unusable 索引,函式索引則disable 索...