SSIS作业将IP改为服务器名后仍无法获取连接问题求助
问题背景
- 原有SSIS作业通过IP地址连接SQL Server,更换子网IP后失效,符合预期
- 将连接字符串中的IP替换为服务器名后,作业仍无法运行,但其他使用相同服务器名的作业正常
- 连接字符串(仅Application Name不同的其他作业可正常运行):
Data Source=[servername];User ID=SQLDTS;Initial Catalog=Policyholder;Persist Security Info=True;MultipleActiveResultSets=True;Application Name=SSIS-JOB_TEMP_TABLE_CLEANUP-{[unique ID of connection string in package]}DEVSVR.Policyholder.SQLDTS1;
- 错误信息:
Execute SQL Task Description: Failed to acquire connection "DevSvr.Policyholder.SQLDTS1". Connection may not be configured correctly or you may not have the right permissions on this connection. End Error DTExec: The package execution returned DTSER_FAILURE (1). Started: 8:11:37 AM Finished: 8:11:37 AM Elapsed: 0.687 seconds. The package execution failed. The step failed.
排查方向
检查作业代理账户的DNS解析能力
作业由SQL Server Agent运行,代理账户的DNS配置可能和你本地账户不同。用代理账户登录到服务器,执行ping [servername]或nslookup [servername],确认能否解析到新IP。若解析失败,要么给代理账户配置正确DNS,要么在服务器hosts文件手动映射服务器名与新IP。验证服务器名的准确性
注意实例名大小写(尤其Linux环境的SQL Server可能敏感),对比正常作业的连接字符串,确保[servername]完全一致,包括是否带实例后缀(如SERVERNAME\INSTANCE)。确认SSIS包的配置来源
若作业使用配置文件/环境变量/SSISDB参数而非包内硬编码的连接字符串,你修改包内内容无效。打开作业步骤配置,检查是否引用外部配置,同步更新外部配置里的连接信息。测试代理账户与SQLDTS账号的权限
用作业代理账户身份登录服务器,通过SSMS用SQLDTS账号连接目标服务器,尝试访问Policyholder数据库。排查SQLDTS账号是否被新IP的防火墙规则限制,或SQL Server登录是否绑定旧IP。检查Application Name的格式
你的Application Name包含{[unique ID...]}占位符,确认实际包内的ID无特殊字符或格式错误,对比正常作业的Application Name格式,避免因字符串解析异常导致连接失败。查看目标SQL Server的错误日志
去目标服务器的SQL Server错误日志中查找对应登录失败记录,里面会有更具体的失败原因(如登录拒绝、连接超时、身份验证失败等),比SSIS的泛化提示更精准。
内容的提问来源于stack exchange,提问作者rgorr

