При управлении несколькими SQL-серверами может потребоваться много времени для выполнения одних и тех же действий на каждом сервере отдельно. К счастью, PowerShell предоставляет мощное решение для автоматизации этих задач. В этой статье мы рассмотрим, как PowerShell может быть использован для обеспечения автоматического запуска и выполнения определенной сессии Extended Event на всех SQL-серверах.
Сначала нам нужно собрать список активных и доступных SQL-серверов. Мы можем сделать это, запросив таблицу базы данных, содержащую имена серверов. Например:
$query = @"
SELECT
IL.ServerName
FROM [dbo].[InstanceList] IL
WHERE NotContactable = 0
AND Inactive = 0
"@
$Results = (Invoke-Sqlcmd -ServerInstance $DBADatabaseServer -Database DBADatabase -Query $query -ErrorAction Stop).ServerName
Затем мы можем перебрать каждый сервер в списке и подключиться к хранилищу XEvent, чтобы проверить, запущена ли требуемая сессия Extended Event и установлена ли она для автоматического запуска. Если нет, мы можем изменить настройки соответственно. Вот пример кода:
foreach($Server in $Results)
{
$XEStore = Get-ChildItem -Path SQLSERVER:\XEvent\$Server -ErrorAction SilentlyContinue | Where-Object {$_.DisplayName -ieq 'default'}
$AutoStart = $XEStore.Sessions[$XEName].AutoStart
$Running = $XEStore.Sessions[$XEName].IsRunning
if($AutoStart -eq $false)
{
$XEStore.Sessions[$XEName].AutoStart = $true
$XEStore.Sessions[$XEName].Alter()
}
if($Running -eq $false)
{
$XEStore.Sessions[$XEName].Start()
}
}
Этот фрагмент кода проверяет, существует ли хранилище XEvent для каждого сервера, и извлекает требуемую сессию Extended Event. Затем он проверяет, установлен ли сеанс для автоматического запуска и запущен ли он. Если нет, он изменяет настройки и запускает сеанс.
Этот сценарий PowerShell может быть легко изменен для работы с любой сессией Extended Event. Просто замените имя сеанса XEvent и измените запрос для сбора требуемого списка серверов.
Автоматизируя эту задачу с помощью PowerShell, вы можете сэкономить время и обеспечить согласованность на всех SQL-серверах. Этот сценарий также может быть превращен в повторно используемую функцию для еще большей эффективности.
Для полного сценария и дополнительной информации вы можете посетить блог автора.