SQL Agent作业调用SSIS包运行Python分区脚本失败(错误码1)
问题排查与解决思路
1. 检查SQL Agent服务账号权限
- SQL Agent运行账号和手动执行SSIS包的账号权限差异极大:
- 确保该账号拥有执行Python脚本的权限,能访问脚本所在路径(本地文件需给账号读取权限;网络共享需确保账号有共享访问权限)
- 验证账号是否具备SQL Server的
ALTER ANY PARTITION FUNCTION、ALTER ANY PARTITION SCHEME权限,以及目标表的修改权限
- 可手动用SQL Agent账号登录服务器,直接运行Python脚本,以此排除权限问题
2. 确认SSIS包中Python脚本的执行配置
- 检查SSIS里调用Python的任务(如Execute Process Task)参数:
- WorkingDirectory是否设置正确,脚本依赖的模块、配置文件需在该目录下,或SQL Agent账号可访问的路径中
- Arguments是否正确,脚本路径带空格时必须用引号包裹,示例:
"C:\Scripts\CreatePartition.py" - 调用的Python解释器需使用完整路径,示例:
C:\Python39\python.exe,避免SQL Agent环境找不到python.exe
3. 捕获Python脚本的错误输出
- 在SSIS的Execute Process Task中,开启StandardOutputVariable和StandardErrorVariable,将脚本的输出和错误信息捕获到SSIS变量中,再将这些变量写入日志表或输出到SSIS日志
- 即便硬编码了
sys.exit(0),脚本也可能在执行到exit前抛出异常导致进程返回1,捕获错误输出可直接查看具体报错原因
4. 检查Python环境依赖
- 手动运行的Python环境和SQL Agent账号加载的环境可能不一致:
- 确认SQL Agent账号能访问脚本依赖的所有Python包(如pyodbc、pandas等),可在脚本开头加入
import sys; print(sys.path),查看加载的包路径并对比手动运行时的路径 - 避免使用用户级安装的包(如
pip install --user),改用全局安装或指定虚拟环境的Python解释器路径
- 确认SQL Agent账号能访问脚本依赖的所有Python包(如pyodbc、pandas等),可在脚本开头加入
5. 排查SSIS目录的配置与权限
- 确保SSIS目录(SSISDB)权限设置正确,SQL Agent账号拥有SSISDB的执行权限(如ssis_admin角色或对应自定义权限)
- 检查SSIS包执行模式,若Python为32位,需将Execute Process Task的Run64BitRuntime属性设为False(SSIS默认64位运行)
6. 测试脚本的返回值逻辑
- 即便硬编码
sys.exit(0),也要确保脚本未被其他异常终止:- 在脚本最外层添加try-except块,捕获所有异常,打印错误后再返回0:
import sys try: # 你的分区创建代码 print("Partition created successfully") sys.exit(0) except Exception as e: print(f"Error: {str(e)}") sys.exit(0) - 再通过捕获错误输出来确认是否有异常发生
- 在脚本最外层添加try-except块,捕获所有异常,打印错误后再返回0:
内容的提问来源于stack exchange,提问作者Nguyen luffy
相关产品推荐
相关产品推荐

