未使用FileSystem Task的SSIS包为何间歇性报“Directory not empty”错误?
检查SSIS运行时临时文件目录
SSIS执行过程中会生成临时文件(如脚本编译缓存、包执行临时数据),默认使用%TEMP%或SQL Server代理服务账户的临时目录。若这些目录被其他进程占用、清理不及时,或权限不足,可能触发该错误。可手动指定SSIS临时目录(通过注册表或配置文件),确保目录权限充足且无外部进程干扰。清理脚本任务编译缓存
虽出错包为纯SQL类,但升级时修改了TargetFramework和脚本任务名称,可能残留旧编译缓存。检查包所在目录的bin、obj文件夹,或C:\Program Files\Microsoft SQL Server\150\DTS\Binn下的临时缓存文件,手动清理避免版本冲突。验证SQL Server代理服务配置
若通过代理执行包,确认代理服务账户对包目录、临时目录的读写权限是否充足。多包并行执行时可能存在资源竞争,可调整并行执行数量,或为代理账户单独设置临时目录。排查OLEDB连接的隐性文件操作
纯SQL包可能通过OLEDB执行了隐性文件操作,比如OPENROWSET读取文件、数据库备份/恢复、文件自动增长或日志截断等。检查报错包的SQL语句,同时查看SQL Server错误日志,定位报错时间点附近的文件操作记录。启用SSIS详细日志追踪
开启SSIS详细日志(记录OnError、OnInformation、OnWarning及全阶段执行事件),重点关注报错前的操作步骤,定位是否有隐性目录操作触发错误。用进程监视器跟踪文件系统操作
启用Windows进程监视器(Process Monitor),在包执行时过滤错误代码0x80070091,定位触发错误的进程和目录,明确具体的文件操作类型。
内容的提问来源于stack exchange,提问作者Matt Prime

