Учёт DEPO: задание SQL Server Agent — своё у каждой базы (bj2depo_<база>), имя в мастере
На одном сервере бывает несколько баз DEPO (боевая и тестовая): общее имя bj2depo давало ложную зелёную проверку — тестовой базе засчитывалось боевое задание, а своё не создавалось. - Имя задания — настройка DepoJobName; в мастере, пункт 3, поле «Имя задания SQL Server Agent», по умолчанию bj2depo_<имя базы> (меняется вместе с базой, пока его не поправили). Установки старше — bj2depo, как было. - Скрипт до любых изменений останавливается, если задание с этим именем обрабатывает другую базу или эту базу уже обрабатывает задание с другим именем (иначе двойная обработка событий). - Проверка задания сравнивает его базу (sp_help_jobstep) с базой bj. Синтаксис проверен на SQL Server без выполнения (SET PARSEONLY); проверка задания на боевом сервере — зелёная (bj2depo ↔ BJ_DEPO_DATA). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -160,9 +160,9 @@ func (h *setupHandlers) wizardDepoJob(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
// джобы хранятся в msdb: при восстановлении базы DEPO из копии джоба остаётся — не пересоздаём
|
||||
jobNote = "джоба " + depoJobName + " на сервере уже есть (bj её не пересоздавал). "
|
||||
jobNote = "джоба " + depoJobName(h.rc.Snapshot().Fancy) + " на сервере уже есть (bj её не пересоздавал). "
|
||||
} else {
|
||||
jobNote = "джоба " + depoJobName + " создана. "
|
||||
jobNote = "джоба " + depoJobName(h.rc.Snapshot().Fancy) + " создана. "
|
||||
}
|
||||
}
|
||||
// проверяем запуск джобы (не процедуры): только что созданная джоба запускается в течение интервала — ждём
|
||||
@@ -247,6 +247,16 @@ func (h *setupHandlers) depoSetupForm(r *http.Request) (FancyMSSQLSettings, stri
|
||||
if !validDBName(db) {
|
||||
return s, "", agent, "имя базы DEPO — только латинские буквы, цифры и _, начинается с буквы"
|
||||
}
|
||||
if agent { // задание обработки — своё у каждой базы: по умолчанию bj2depo_<база>
|
||||
jn := strings.TrimSpace(r.FormValue("depo_job_name"))
|
||||
if jn == "" {
|
||||
jn = depoJobNameFor(db)
|
||||
}
|
||||
if !depoJobNameRe.MatchString(jn) {
|
||||
return s, db, agent, "имя задания — латинские буквы, цифры, точка, дефис и _"
|
||||
}
|
||||
s.DepoJobName = jn
|
||||
}
|
||||
return s, db, agent, ""
|
||||
}
|
||||
|
||||
@@ -396,7 +406,7 @@ func (h *setupHandlers) depoSetupDo(ctx context.Context, r *http.Request, step d
|
||||
s.DepoTablesMode = "auto"
|
||||
note = "база " + db + " подготовлена: логин " + s.User + ", таблицы обмена, права"
|
||||
if agent {
|
||||
note += ", задание " + depoJobName
|
||||
note += ", задание " + depoJobName(s)
|
||||
}
|
||||
note += ". "
|
||||
case "existing":
|
||||
@@ -448,7 +458,7 @@ func (h *setupHandlers) depoSetupDo(ctx context.Context, r *http.Request, step d
|
||||
step("tables", "ok", "")
|
||||
// запуск обработки: только что созданное задание запускается в течение интервала — подождать
|
||||
if agent {
|
||||
step("job", "run", "Проверяю задание SQL Server Agent «"+depoJobName+"» — до 30 секунд")
|
||||
step("job", "run", "Проверяю задание SQL Server Agent «"+depoJobName(s)+"» — до 30 секунд")
|
||||
} else {
|
||||
step("job", "run", "Проверяю, что bj может запускать обработку обмена")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user