db2 ? sql0964
SQL0964C The transaction log for the database is full.
Explanation:
All space in the transaction log is being used.
活动日志满一般有下面2种情形:
1.事务特别大,迅速占满日志空间(比如insert非常多数据)
Log file size (4KB) (LOGFILSIZ) = 1024 --->每个日志大小为1024*4K=4M
Number of primary log files (LOGPRIMARY) = 13
Number of secondary log files (LOGSECOND) = 4
---->主日志+辅日志一共可以17个日志
也就是所如果事务使用日志达4M*17=68M,就会报日志满
大事务酌情调整日志个数或拆分成小事务。
2.事务小,但是是一个非常早的事务,一直没有提交,导致首个活动日志一直是活动状态,不被释放,那即使后面的事务都提交,也没有用。
DB2 使用的活动日志的最大空间是由下面公式:
(logprimary + logsecond) * logfilsiz * 4096
计算出的大小来决定的(logprimary,logsecond,logfilsiz是数据库配置参数)。
若该空间已全部被分配,而应用仍试图请求更多活动日志空间时,就会发生日志满的情况,此时,用户的更新、删除或插入操作都会使 DB2DIAG.LOG 中写入以下信息:
SQL0964C 数据库的事务日志已满。
DB2 活动日志满通常是由于存在大量未提交事务的数据,使得活动日志的空间不能及时释放,使新的事务无法申请到可用日志空间,而最终报出 SQL0964C 的错误所致。为使应用程序成功运行,而不是被回滚,通常会考虑根据情况选择增大以上公式中的某些数据库参数,以增大活动日志空间来解决这一问题。
但还有另外一种原因,即在日志空间并未用尽的情况下,当某个占有最旧活动日志的应用长时间未作提交操作,阻止了日志的 LSN 的分配,造成日志空间无法使用,同样会引发这一日志满的报错。对于这种情况,可以提交该交易或利用 FORCE 命令来终止此应用程序,以便释放它所占用的日志空间,使 LSN 可以继续分配,空闲的日志空间可用