主题
排障:单据锁定,无法审核/弃审
现象:操作员审核或弃审单据时提示「单据已被锁定」「当前单据正在被其他操作员使用」,重启客户端无效,多张单据都锁死。
影响范围
- 采购入库单、销售出库单、其他出入库单审核/弃审
- 严重时月结卡住(月结也要锁单)
环境
- 用友 U8 全系(V12-V16 常见)
- 数据库:SQL Server
排查路径
- 判断锁的类型:换台机器试同一张单据;多张单据都锁 = 任务残留,单张锁 = 真有人操作
- 查任务残留表(头号嫌疑):
UFSystem库的UA_Task - 查数据库阻塞:
sys.dm_exec_requests看blocking_session_id - 回溯异常退出:断电、强杀进程、网络中断,都会留残留
根因
U8 锁机制依赖 UA_Task 任务表。正常退出会清理任务记录,异常退出(强杀客户端/断网)不清理,残留任务把单据锁死。不是数据坏了。
处理步骤
1. 查看残留任务
sql
-- 在 UFSystem 库执行
SELECT cAcc_Id, cUser_Id, cTaskId, dStartTime, dSaveTime
FROM UA_Task
WHERE dSaveTime < DATEADD(HOUR, -2, GETDATE());2. 确认无活动连接后删除
sql
-- DELETE FROM UA_Task
-- WHERE dSaveTime < DATEADD(HOUR, -2, GETDATE());⚠️ 危险操作:删除前务必确认这些任务对应的用户没在操作。先查询、跟用户确认,再删。批量删除在业务低峰做。
3. 仍不行 → 重启应用服务
清理残留后仍锁,再考虑重启 U8 应用服务(不是数据库)。重启会踢所有在线用户,作为最后手段。
预防措施
- 客户端配置超时自动清理(应用服务器配置里设置会话超时)
- 培训用户:不要用任务管理器强杀客户端,正常退出
- 出问题先查
UA_Task,别一上来重启服务器
参考
- 完整案例复盘见 案例库-单据异常锁定
- Oracle/NC 环境锁机制不同,查
sm_lock等表,另见排障手册相关条目