Создаем сценарии обслуживания SQL в Центре Контроля Качества 1С (Центр Администрирования)

20.03.24

База данных - Администрирование СУБД

Данная статья научит вас, как создавать скрипты обслуживания MS SQL для Центра Контроля Качества (ЦКК) или Центра Администрирования (ЦА).

Предполагается, что вы уже настроили систему, установили агентов КИП на нужные сервера и загрузили комплект скриптов ЦКК, интерпретатор Python и разместили их на управляемых машинах через агента.

Шаг 1.

Сначала создадим интерпретатор Power Shell, он нам будет нужен для того, чтобы выполнять скрипты MS PowerShell (PS). PS будет своего рода прокси, для передачи команд далее, уже на сервер MS SQL.

Заходим в "Обновление сценариев и скриптов" и выбираем пункт "Интерпретаторы". Создаем новый интерпретатор:

 

 

Путь к интерпретатору:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File {script-name} {cmdline-parameters}

Шаг 2.

Создадим PS скрипт, который будет вызывать команду SqlCmd с параметрами, которые мы будем передавать ей через PS  скрипт транзитом. SqlCmd это консольная утилита, которая позволит нам выполнить произвольный SQL скрипт на выбранном нами SQL сервере.

Заходим в "Обновление сценариев и скриптов" и выбираем пункт "Скрипты и сценарии". Переходим в группу "SystemAdministrationCenterScriptsDistr \ src" и создаем там элемент с названием "run_sql_via_powershell.ps1". 

 

 

Задавать полный путь не нужно, система сама его установит при записи элемента. Далее в форме списка выбираем наш новый элемент и редактируем выбранный файл, это делается через соответствующий пункт меню "2. Редактировать выбранный файл". Система откроет вам файл, в который нужно внести следующий скрипт PS:

$FileName 	= 'none'
$QueryText	= 'none'
$UserName 	= ''
$UserPwd  	= ''
$LogPath  	= 'none'
$SrvName  	= 'none'
$CodePage 	= 1251
$AddParams 	= 'none'
$TestMode 	= 'true'


$ErrorActionPreference 	= "Stop"

foreach ($Arg in $Args) 
{
	if ($Arg.Contains('filename')) 		{$FileName 	= $Arg.Replace('--filename=', '')}
	elseif ($Arg.Contains('password')) 	{$UserPwd 	= $Arg.Replace('--password=', '')}
	elseif ($Arg.Contains('username')) 	{$UserName 	= $Arg.Replace('--username=', '')}
	elseif ($Arg.Contains('logpath')) 	{$LogPath 	= $Arg.Replace('--logpath=', '')}
	elseif ($Arg.Contains('srvname')) 	{$SrvName 	= $Arg.Replace('--srvname=', '')}
	elseif ($Arg.Contains('codepage')) 	{$CodePage 	= $Arg.Replace('--codepage=', '')}
	elseif ($Arg.Contains('querytext')) {$QueryText = $Arg.Replace('--querytext=', '')}
	elseif ($Arg.Contains('addparams')) {$AddParams = $Arg.Replace('--addparams=', '')}
	elseif ($Arg.Contains('--test-mode')) {$TestMode  = $Arg.Replace('--test-mode=', '')}
}

if ($UserName -eq '' -and $UserPwd  -eq '')
{
	throw "Не указано имя пользователя и пароль. Password and user name wasn't set"
}

if (($FileName -eq '' -or $FileName -eq 'none') -and ($QueryText  -eq '' -or $QueryText  -eq 'none'))
{
	throw "Не указаны ни исполняемый файл ни команда SQL. No file name, nor sql command was set"
}

$CmdLineArgs = "-U $UserName -P $UserPwd"

if ($FileName -eq '' -or $FileName -eq 'none') { $CmdLineArgs = $CmdLineArgs + " -q $QueryText" }
else { $CmdLineArgs = $CmdLineArgs + " -i $FileName" }

if ($SrvName -ne '' -and $SrvName -ne 'none') { $CmdLineArgs = $CmdLineArgs + " -S $SrvName" }

if ($CodePage -ne '') { $CmdLineArgs = $CmdLineArgs + " -f $CodePage" }

if ($LogPath -ne '' -and $LogPath -ne 'none') { $CmdLineArgs = $CmdLineArgs + " -o $LogPath" }
else { $CmdLineArgs = $CmdLineArgs + " -b" }

if ($AddParams -ne '' -and $AddParams -ne 'none') { $CmdLineArgs = $CmdLineArgs + " -v $AddParams" }

if ($TestMode -eq 'true') {
	Echo '------------------------ test = OK ------------------------' 
	Exit
}
else {
	#echo sqlcmd $CmdLineArgs
	$CmdResult = Start-Process "sqlcmd" -ArgumentList $CmdLineArgs -Wait -NoNewWindow -PassThru
	$ExitCd = $CmdResult.ExitCode
	if($ExitCd -ne 0) { Exit $ExitCd }
}

Небольшие пояснения:

$ErrorActionPreference     = "Stop" - этот параметр нужен для того, чтобы при ошибке скрипт останавливался и возвращал в ЦКК ошибку. Без него, скрипт продолжит выполнение далее.

$TestMode - этот параметр нам нужен для того, чтобы отловить тестовый прогон, который выполняет ЦКК перед рабочим прогоном скрипта, если мы не будем его обрабатывать, то скрипт будет выполняться два раза.

$FileName, $QueryText, $UserName, $UserPwd, $LogPath, $SrvName, $CodePage, $AddParams - переменные скрипта, которые мы получаем из входящих параметров, которые в скрипт будет передавать ЦКК.

Внимание: параметр "password" в ЦКК должен быть именно с таким названием, в этом случае в логе агента ЦКК пароль будет заменяться на звездочки, если у него будет другое наименование, то в лог пароли будут писаться в открытом виде.

Скрипт забирает входящие параметры, проверяет их корректность и, если с ними все в порядке, то передает далее на исполнение в утилиту SqlCmd.

Утилита вызывается не напрямую, а через Start-Process для того, чтобы передать на вход параметры из переменных, а так же получить в ответ код ошибки и результат выполнения. В частности для этого используются параметры -Wait -NoNewWindow -PassThru.

Описания параметров тут давать не буду, они будут чуть позже.

После заполнения текста скрипта, сохраняем его, закрываем окно с текстом и в списке "Скриптов  и сценариев" выбираем команду "3. Поместить в файл".

Шаг 3.

Создаем файл настроек команды. В том же списке "Скрипты и сценарии" переходим в папку "SystemAdministrationCenterScriptsDistr \ win_configs" и по образцу шага 2 создаем там файл "run_sql_via_powershell.yml". Содержимое файла будет таким:

version: 0.0.0.1
external-values:
  - username
  - password
  - filename
  - querytext
  - logpath
default-values:
  srvname: localhost
  codepage: 1251
  addparams: none

Помещаем его в базу, аналогично шагу 2.

Шаг 4.

Открываем список команд автоматизации "Сценарии администрирования \ Команды автоматизации". В справочнике команд создаем новую:

 

 

Записываем команду и настраиваем интерфейс агента, он должен выглядеть так:

 

 

Сохраняем команду и переходим на закладку "Варианты настройки" и жмем кнопку "Изменить параметры"

 

 

Пароль для SQL лучше хранить в защищенном хранилище и подставлять в параметры через шаблон, как показано на картинке. Шаблон "NONE" нужен для того, чтобы указывать, что данный параметр не заполнен.

Шаг 4.

Обновляем комплект скриптов на управляемых компьютерах через Агент ЦКК. "Обновление сценариев и скриптов \ Скрипты и сценарии", жмем кнопку "Сформировать комплект для агента". На этом этапе у вас уже должно быть хранилище для скриптов, указываем его. Потом соглашаемся на предложение системы обновить скрипты на управляемых машинах через Агента ЦКК.

Шаг 5.

Создаем сценарий автоматизации "Сценарии администрирования \ Сценарии автоматизации".

Создаем новый элемент на основе настройки нашей команды:

 

 

Опишем параметры команды:

Имя пользователя - логин SQL под которым будет выполняться скрипт. Агент ЦКК выполняется под системным логином, поэтому для входа нужно будет использовать авторизацию SQL.

Пароль пользователя - пароль от учетки SQL.

Текст запроса и Файл с командами SQL - задавать нужно один из этих параметров, второй нужно устанавливать в "none". Первый параметр позволяет передать скрипт SQL как параметр выполнения команды, а второй - как отдельный файл. В случае использования текста запроса, в параметр его нужно задавать обрамленным кавычками. В случае с отдельным файлом можно использовать дополнительные параметры, которые будут передаваться в SQL скрипт. Если вы используете вариант с файлом, то нужно будет задать его имя, а в "Обновление сценариев и скриптов \ Скрипты и сценарии" в папку "src" поместить файл со скриптом SQL, который будет выполняться, обращение к нему будет по его имени. Так использовать систему удобнее, все скрипты будут доступны из одного интерфейса и вам не понадобится каждый раз при их изменении вручную размещать их на серверах. 

Дополнительные параметры - доп параметры, которые передаются файлу SQL скрипта и используются там, как переменные. Например, если задать доп параметры как "DBNAME=DBM", а в файле скрипта указать "USE $(DBNAME)", то SqlCmd преобразует это в "USE DBM".

Имя сервера SQL - имя SQL сервера, если установить в "none", то будет использоваться текущий сервер, на котором будет запущен скрипт, то есть тот сервер, на агенте которого выполняется команда автоматизации.

Кодовая страница - в какой кодовой странице выдавать результат выполнения, для Windows - 1251.

Путь к файлу лога выполнения команды - в этом параметре можно указать локальный файл на сервере, куда будет записан лог выполнения SQL команды. Если не нужно, то "none".

На этом шаг закончим, но если вам нужно, чтобы вы выполняли этот сценарий по расписанию, то лучше заполнить настройки в "Варианты настройки". В нашем же случае экземпляр сценария мы будем запускать вручную, поэтому и настройки сделаем непосредственно в нем.

Шаг 6.

Создадим экземпляр сценария в "Сценарии администрирования \ Экземпляры сценариев".

 

 

На закладке "Параметры выполнения сценария" укажем сервер, где бы мы хотели выполнить команду.

Теперь запустим экземпляр на выполнение. Если все сделано верно (текст SQL запроса лучше скорректировать согласно вашему серверу, чтобы нужная таблица там была), то получим результат.

 

Вступайте в нашу телеграмм-группу Инфостарт

центр контроля качества

См. также

HighLoad оптимизация Администрирование СУБД Системный администратор Программист 1С v8.3 Бесплатно (free)

Сегодня мы проведем обзор изменений, касающихся работы с высоконагруженными системами 1С. Новый релиз предлагает не просто несколько точечных исправлений, а целый арсенал специализированных функций, призванных существенно ускорить выполнение типичных для 1С операций, снизить нагрузку на инфраструктуру и упростить администрирование. Спектр улучшений распространился на многие ключевые узлы производительности от оптимизации работы с временными таблицами и сложными запросами RLS (row-level security) до ускорения критически важных процессов наподобие «Закрытия месяца». Обо всем этом и пойдет речь в статье.

22.07.2025    1241    Tantor    4    

8

Администрирование СУБД Системный администратор Бесплатно (free)

Расскажем об опыте внедрения технологии CoW (Copy-On-Write). Вы узнаете, как CoW помогает экономить терабайты дискового пространства с минимальными накладными расходами, а также как интегрировать ее в рабочие процессы разработки и тестирования. Автор кратко объяснит суть CoW, поделится выбором файловой системы (xfs или btrfs?), расскажет, как его команда управляет подтомами прямо из 1С и почему они выбрали MS SQL для Linux. Отдельно он разберет влияние CoW на CI-процессы: как это помогает анализировать длительные регрессы и ускоряет развертывание баз.

22.07.2025    565    Golovanoff    6    

8

Администрирование СУБД Linux Сервера Системный администратор Программист Бесплатно (free)

В современных Windows 10 и 11 можно использовать WSL (Windows Subsystem for Linux) для запуска Linux окружения. Возникает соблазнительная мысль: может, PostgreSQL и сервер 1С запустить в WSL. Или даже хуже: в Docker на WSL. Знал бы, что будет сложно - даже не начинал :) Сложность кроется в том, что WSL это не полноценные виртуалки, а легковестные контейнеры Hyper-V с особенностями сети и GUI. Из плюсов, наверно, только размер и скорость запуска.

21.07.2025    710    FSerg    2    

5

Администрирование СУБД Системный администратор Программист Бесплатно (free)

В статье подробно разберем, как в компании организован процесс миграции на PostgreSQL, начиная с подготовки команды, предварительного анализа 1С-систем (с использованием специальных чек-листов и инструментов для аудита) и заканчивая тонкой настройкой PostgreSQL. Расскажем о системе автоматизированного тестирования, которая позволяет сравнивать производительность на MS SQL и PostgreSQL без трудоемких ручных проверок. Особое внимание уделим проблемам, которые возникли при миграции систем объемом 20+ ТБ, и способам их решения. А также поразмышляем о том, что нужно было бы сделать по-другому, если бы этот проект пришлось начинать заново.

10.07.2025    938    leongl    0    

8

HighLoad оптимизация Администрирование СУБД Системный администратор Программист 1С v8.3 Бесплатно (free)

В финальной статье по докладу «Дамп – не приговор, а повод задуматься», с которым выступили на осенней конференции INFOSTART TECH EVENT 2024, рассказываем, чем может быть полезна информация, полученная из дампа.

27.05.2025    1818    it-expertise    0    

12

Администрирование СУБД Системный администратор 1С v8.3 Бесплатно (free)

Клиент-серверная архитектура 1С Предприятия 8.3 подразумевает работу в связке с так называемой системой управления базами данных (СУБД). Одной из самых распространённых и популярных до сих пор остается MS SQL Server.

19.05.2025    3609    Kostin1978    6    

4

HighLoad оптимизация Администрирование СУБД Системный администратор Программист 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Рассмотрим, почему при обновлении итогов регистров накопления СУБД может выбирать неоптимальный план запроса, и как это исправить.

28.04.2025    2893    Tantor    7    

26

HighLoad оптимизация Администрирование СУБД Системный администратор Программист 1С v8.3 Бесплатно (free)

Во второй статье по докладу «Дамп – не приговор, а повод задуматься», с которым выступили на конференции INFOSTART TECH EVENT 2024, рассмотрим, какую информацию содержат файлы дампа, чем она полезна и как ее анализировать.

14.04.2025    1725    it-expertise    7    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Vlaxrom 1 18.03.25 20:53 Сейчас в теме
Спасибо за статью! Столкнулся с задачей как задать скрипт SQL более 150 символов?
Пробовал задать как "скрипты и сценарии" и вытащить в параметрах из объектов метаданных.
Или может подскажите зачем в параметрах объекты метаданных, как из них значение вытащить?
Оставьте свое сообщение