Мастер, обработка DEPO: скрипт джобы SQL Agent для администратора (пояснения, повторный запуск безопасен, скачивание), подсказка у варианта с логином sa
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -754,6 +754,32 @@ EXEC dbo.sp_add_jobschedule @job_name = N'%[1]s', @name = N'%[1]s', @enabled = 1
|
||||
EXEC dbo.sp_add_jobserver @job_name = N'%[1]s';`, depoJobName, f.DepoDB(), depoJobProcName(f), depoJobEvery(f))
|
||||
}
|
||||
|
||||
// depoJobAgentAdminScript — тот же набор для администратора SQL (вариант «создаёт администратор по
|
||||
// скрипту»): с пояснениями и защитой от повторного запуска (джоба уже есть — ничего не делает).
|
||||
// depoJobAgentScript остаётся построчным: его выполняет сам bj в варианте «джобу создаёт bj».
|
||||
func depoJobAgentAdminScript(f FancyMSSQLSettings) string {
|
||||
return fmt.Sprintf(`-- Bridge&Join: джоба SQL Server Agent «%[1]s» — обработка таблиц обмена M2M в базе %[2]s.
|
||||
-- Каждые %[4]d с вызывает процедуру %[3]s: записи bj превращаются в документы и операции учёта DEPO.
|
||||
-- Выполнить в SSMS или sqlcmd под логином с правами sysadmin (или SQLAgentOperatorRole в msdb).
|
||||
-- Служба SQL Server Agent должна быть запущена. Скрипт можно запускать повторно: если джоба уже есть, он её не трогает.
|
||||
|
||||
USE msdb;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM msdb.dbo.sysjobs WHERE name = N'%[1]s')
|
||||
BEGIN
|
||||
EXEC dbo.sp_add_job @job_name = N'%[1]s', @enabled = 1, @description = N'bj2depo: обработка трансферных таблиц M2M (bj)';
|
||||
EXEC dbo.sp_add_jobstep @job_name = N'%[1]s', @step_name = N'%[1]s', @subsystem = N'TSQL', @database_name = N'%[2]s', @command = N'exec %[3]s;';
|
||||
EXEC dbo.sp_add_jobschedule @job_name = N'%[1]s', @name = N'%[1]s', @enabled = 1, @freq_type = 4, @freq_interval = 1, @freq_subday_type = 2, @freq_subday_interval = %[4]d, @active_start_time = 0;
|
||||
EXEC dbo.sp_add_jobserver @job_name = N'%[1]s';
|
||||
PRINT N'Джоба %[1]s создана.';
|
||||
END
|
||||
ELSE
|
||||
PRINT N'Джоба %[1]s уже есть — не изменялась.';
|
||||
GO
|
||||
`, depoJobName, f.DepoDB(), depoJobProcName(f), depoJobEvery(f))
|
||||
}
|
||||
|
||||
// depoJobGrantScript — права для варианта «внутри bj».
|
||||
func depoJobGrantScript(f FancyMSSQLSettings) string {
|
||||
return fmt.Sprintf("USE %s;\nGRANT EXECUTE ON %s TO %s;", f.DepoDB(), depoJobProcName(f), f.User)
|
||||
@@ -872,11 +898,12 @@ func depoJobCreateAgent(ctx context.Context, rc *RuntimeConfig, adminUser, admin
|
||||
// DepoJobView — данные карточки «Где запускается обработка».
|
||||
type DepoJobView struct {
|
||||
Name, Proc, GrantScript, AgentRights, AgentScript string
|
||||
AdminScript string // для администратора: с пояснениями и защитой от повтора
|
||||
Every int
|
||||
}
|
||||
|
||||
func depoJobView(f FancyMSSQLSettings) DepoJobView {
|
||||
return DepoJobView{Name: depoJobName, Proc: depoJobProcName(f), Every: depoJobEvery(f), GrantScript: depoJobGrantScript(f), AgentRights: depoJobAgentRightsScript(f), AgentScript: depoJobAgentScript(f)}
|
||||
return DepoJobView{Name: depoJobName, Proc: depoJobProcName(f), Every: depoJobEvery(f), GrantScript: depoJobGrantScript(f), AgentRights: depoJobAgentRightsScript(f), AgentScript: depoJobAgentScript(f), AdminScript: depoJobAgentAdminScript(f)}
|
||||
}
|
||||
|
||||
// ---- выгрузка истории тестов (TEST3, банк Зенит / робот) в трансферные таблицы ----
|
||||
|
||||
Reference in New Issue
Block a user