如何解决SSMS 代理作业错误 - “指定的@name 已存在”
我正在使用 SSMS v18.6 生成一个 SSIS 包 (dtsx),其中包含一个可以正确解析的自定义查询。我正在尝试使包自动化以检查当前正在运行的执行并使用 SQL Server 代理在两个作业步骤中生成结果,但作业一直失败并出现错误...
无法为作业 0x425BB59FA4097D408FE051A723FD4BE6 的第 2 步创建进程(原因:系统找不到指定的文件)。步骤失败。
当我编写作业脚本并在 SSMS 中作为查询执行执行时,它会生成错误...
指定的@name ('SV_MANHATTAN_RAD') 已经存在。
数据库/服务器帐户肯定可以访问包目录,我认为没有任何类型的权限或内部防火墙问题。我已将作业步骤设置为在“执行选项”中使用 32 位运行时。我怀疑自动生成的脚本是问题,但我添加它以防万一它有帮助...
USE [msdb]
GO
/****** Object: Job [SV_MANHATTAN_RAD] Script Date: 05/03/2021 12:15:23 PM ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [[Uncategorized (Local)]] Script Date: 05/03/2021 12:15:23 PM ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB',@type=N'LOCAL',@name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'SV_MANHATTAN_RAD',@enabled=1,@notify_level_eventlog=0,@notify_level_email=0,@notify_level_netsend=0,@notify_level_page=0,@delete_level=0,@description=N'No description available.',@category_name=N'[Uncategorized (Local)]',@owner_login_name=N'sa',@job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [AG Test] Script Date: 05/03/2021 12:15:23 PM ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId,@step_name=N'AG Test',@step_id=1,@cmdexec_success_code=0,@on_success_action=3,@on_success_step_id=0,@on_fail_action=2,@on_fail_step_id=0,@retry_attempts=0,@retry_interval=0,@os_run_priority=0,@subsystem=N'TSQL',@command=N'---Logic used to check if the current SQL Server is the primary replica. If so,the job will run. If not,the job will not proceed & fail to the error log.
DECLARE @is_prime bit;
Select @is_prime = (select sys.fn_hadr_is_primary_replica ( ''CLARITY'' ))
IF @is_prime = 0
BEGIN
PRINT ''EXITING GRACEFULLY'';
THROW 51000,''This is not a primary replica'',1;
END',@database_name=N'master',@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [GenerateFile] Script Date: 05/03/2021 12:15:23 PM ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId,@step_name=N'GenerateFile',@step_id=2,@on_success_action=1,@subsystem=N'SSIS',@command=N'/FILE "\"\\stormontvail.org\sv\deptshares\SVCO1 Reporting\FTP\SSIS PACKAGES\SV_Manhattan_Rad.dtsx\"" /CONNECTION DestinationConnectionFlatFile;"\"\\stormontvail.org\sv\deptshares\SVCO1 Reporting\FTP\Manhattan Rad\SVH-ManhattanCT_.txt\"" /CONNECTION SourceConnectionOLEDB;"\"Data Source=epicclaritysql;Initial Catalog=CLARITY;Provider=SQLNCLI11;Integrated Security=SSPI;Auto Translate=false;\"" /X86 /CHECKPOINTING OFF /REPORTING E',@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId,@start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId,@server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
对这里发生的事情有什么建议吗?
评论中的话语
我正在尝试通过两个步骤来安排日常工作。第一步检查以确保 ETL 没有运行并且在许多其他作业中使用而没有任何错误。我已尝试删除此步骤,但仍然出现相同的错误。第二步生成一个平面文件,每天可以提取并通过 FTP 异地提交给供应商。我正在使用 SSMS 导出向导生成带有自定义脚本的包,该脚本解析没有错误,但不会在代理作业中运行。我不熟悉这些类型的脚本,也不确定将放置放在哪里。 – KrazyKlause 14 小时前
您提供的脚本大致做了以下工作:添加作业SV_MANHATTAN_RAD,添加作业步骤AG Test(检查当前SQL Server是否为主副本),添加第二作业步骤生成SVH-ManhattanCT_.txt文件。运行后,您应该在作业列表中拥有包含这两个步骤的作业。 – sbgdata 13 小时前
我假设您希望将此作业安排为每天运行。现在,您能否告诉我更多有关您正在生成的包以及其中的自定义脚本的信息?您提供的脚本,如果打包在 ssis 包中,只会一遍又一遍地尝试创建相同的作业,这是没有意义的.. – sbgdata 13 小时前
是的,作业应该每天运行。我使用导出向导生成要在第二个作业步骤 (GenerateFile) 中使用的包。它运行生成结果到 txt 文件的查询并将其保存到目录中以供进一步处理/批处理。我提供的脚本是在我右键单击作业时由 SSMS 自动生成的,“脚本作业为..”,然后“创建到”。我开始想也许我不能在同一个工作中混合和匹配步骤类型 T-SQL 和 SSIS。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。