Db2 事务日志已锁定,无法归档

Posted

技术标签:

【中文标题】Db2 事务日志已锁定,无法归档【英文标题】:Db2 transaction logs are locked and not able to archive it 【发布时间】:2018-10-06 16:32:33 【问题描述】:

场景是在我的 java 代码中,我创建了一个临时表并用我需要删除的记录填充它,然后我通过从临时表中连续获取数据来删除各种表中的记录。一次只从所有表中删除 1000 条记录,然后提交语句,然后再次删除下 1000 条记录,循环继续,直到所有记录都被删除。

sql 语句是简单的删除查询。由于数据以百万计并且表已编入索引,因此我的事务日志开始填充并且不允许数据库在代码运行时对其进行存档。因为我正在提交所有语句但仍然有一些东西正在保存事务日志并阻止它从存档。

我需要知道什么可以锁定事务日志,因为所有语句都是定期提交的。 java中有连接池。执行整个代码后关闭连接。连接或准备好的语句是否可以使事务保持活动状态,从而使其无法归档或任何其他进程?

Db 是 db2,而 logging 是归档日志。不能使用循环日志,也不能使用 NLI 命令。

【问题讨论】:

【参考方案1】:

使用以下查询查找具有最旧事务的应用程序的应用程序 ID。

select appl_id_oldest_xact from sysibmadm.snapdb

如果您想知道此(或其他)应用程序发出了哪些语句/事务,请使用事件监视器进行活动。 Configuring data collection for an activity event monitor.

-- Temporarily turn the collection on with the following query
ALTER WORKLOAD SYSDEFAULTUSERWORKLOAD COLLECT ACTIVITY DATA ON COORDINATOR WITH DETAILS
-- Run you workload
-- Turn the collection off
ALTER WORKLOAD SYSDEFAULTUSERWORKLOAD COLLECT ACTIVITY DATA NONE
-- Find the corresponding information in the corresponding event monitor tables

您可以将有关所有应用程序或具有已知应用程序句柄的单个应用程序的信息收集到此监视器的表格中。 Collecting data for individual activities.

【讨论】:

您能否详细说明一下,或者如果您针对您在下面提到的陈述中所说的内容提供执行步骤,这将非常有帮助。在相应的事件监视器表中查找相应的信息 您可以将有关所有应用程序或具有已知应用程序句柄的单个应用程序的信息收集到此监视器的表中。收集个人活动的数据。您是否建议我使用 crete 事件监视器表?如果可以,请给我步骤来做同样的事情 CREATE EVENT MONITOR ACT FOR ACTIVITIES WRITE TO TABLE ACTIVITY (TABLE ACTIVITY_ACT IN SYSTOOLSPACE) , ACTIVITYMETRICS (TABLE ACTIVITYMETRICS_ACT IN SYSTOOLSPACE) , ACTIVITYSTMT (TABLE ACTIVITYSTMT_ACT IN SYSTOOLSPACE) , ACTIVITYVALS (TABLE ACTIVITYVALS_ACT IN SYSTOOLSPACE) , CONTROL (TABLE CONTROL_ACT IN SYSTOOLSPACE) ; set event monitor act state 1; SELECT A.TIME_STARTED, A.TIME_COMPLETED, TIMESTAMPDIFF(2, CHAR(A.TIME_COMPLETED-A.TIME_STARTED)) TIME_S , A.ADDRESS, A.APPL_NAME, A.APPL_ID, A.UOW_ID, A.ACTIVITY_ID , V.STMT_VALUE_INDEX, VARCHAR(V.STMT_VALUE_DATA, 50) STMT_VALUE_DATA , VARCHAR(S.STMT_TEXT, 256) stmt_text FROM ACTIVITY_ACT A JOIN ACTIVITYSTMT_ACT S ON S.APPL_ID=A.APPL_ID AND S.UOW_ID=A.UOW_ID AND S.ACTIVITY_ID=A.ACTIVITY_ID LEFT JOIN ACTIVITYVALS_ACT V ON V.APPL_ID=S.APPL_ID AND V.UOW_ID=S.UOW_ID AND V.ACTIVITY_ID=S.ACTIVITY_ID ORDER BY A.TIME_STARTED, A.APPL_ID, A.UOW_ID, A.ACTIVITY_ID;

以上是关于Db2 事务日志已锁定,无法归档的主要内容,如果未能解决你的问题,请参考以下文章

db2怎么删除数据库的事务日志

SQL Server事务日志被填满的原因是啥

DB2中的正确更新语句,以避免事务日志已满

DB2数据库的事务日志已满。SQLSTATE=57011

数据库 'DJABC' 的日志已满.请备份该数据库的事务日志以释放一些日志空间.

使用Rman备份的归档日志恢复数据库时,需要先还原归档日志吗