Published on

March 11, 2016

Автоматизация задач SQL Server с помощью PowerShell

При управлении несколькими 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-серверах. Этот сценарий также может быть превращен в повторно используемую функцию для еще большей эффективности.

Для полного сценария и дополнительной информации вы можете посетить блог автора.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.