9002: The transaction log for database is full due to ...(数据库的事务日志已满,原因为 ...)
SQL Server含义
数据库的事务日志文件已满,新事务无法记录日志。数据库拒绝写入,表现得如同只读。
原因
FULL 恢复模式下没有日志备份、长时间打开的事务、复制/AlwaysOn 延迟,或日志无法增长(禁用了自动增长或磁盘已满)。log_reuse_wait_desc 会显示原因。
解决方法
检查 sys.databases 中的 log_reuse_wait_desc。如果在 FULL 模式下为 LOG_BACKUP,执行日志备份(BACKUP LOG)。如果为 ACTIVE_TRANSACTION,找到打开的事务并提交/回滚(DBCC OPENTRAN)。释放磁盘空间或修正日志文件的自动增长设置。如果日志确实已经增长,在备份后用 DBCC SHRINKFILE 收缩。如果不需要日志链,重新审视恢复模式。
同一数据库的其他条目
- 8152String or binary data would be truncated(字符串或二进制数据将被截断)
- 2628String or binary data would be truncated in table, column ...; truncated value(表、列 ... 中的字符串或二进制数据将被截断;截断的值)
- 1222Lock request time out period exceeded(已超过锁请求超时时段)
- 1105Could not allocate space for object in database because the filegroup is full(由于文件组已满,无法在数据库中为对象分配空间)
- 208Invalid object name(对象名无效)
- 229The SELECT/EXECUTE permission was denied on the object(拒绝了对对象的 SELECT/EXECUTE 权限)
- 4060Cannot open database requested by the login. The login failed(无法打开登录所请求的数据库。登录失败)