Изменить параметры сортировки на уровне экземпляра SQL Server с помощью powershell - PullRequest
0 голосов
/ 11 октября 2019

Я хочу изменить параметры сортировки экземпляра SQL Server программно, используя скрипт powershell. Следующие шаги выполняются вручную:

  1. Остановите экземпляр SQL Server
  2. Перейдите в каталог: «C: \ Program Files \ Microsoft SQL Server \ MSSQL14.SQL2017 \ MSSQL \ Binn»
  3. Выполнить следующую команду: sqlservr -c -m -T4022 -T3659 -s "SQL2017" -q "SQL_Latin1_General_CP1_CI_AS"
  4. После выполнения вышеуказанной команды отобразится следующее сообщение: "По умолчаниюсортировка была успешно изменена. "
  5. Затем мне нужно нажать Ctrl + C, чтобы остановить дальнейшее выполнение. Как я могу сделать это программно?

1 Ответ

0 голосов
/ 05 ноября 2019

Когда мы выполняем команду для изменения параметров сортировки SQL Server, она записывает подробности выполнения в журналы приложений средства просмотра событий. Используя цикл, мы можем непрерывно проверять журналы приложения просмотра событий для SqlServr.exe, и когда он генерирует следующее сообщение журнала: «Сортировка по умолчанию была успешно изменена», мы можем завершить процесс.

#Take the time stamp before execution of Collation Change Command
$StartDateTime=(Get-Date).AddMinutes(-1)

# Execute the Collation Change Process
Write-Host "Executing SQL Server Collation Change Command"
$CollationChangeProcess=Start-Process -FilePath $SQLRootDirectory -ArgumentList 
"-c -m -T 4022 -T 3659 -s $JustServerInstanceName -q $NewCollationName" - 
NoNewWindow -passthru

Do
{
  $log=Get-WinEvent -FilterHashtable @{logname='application'; 
  providername=$SQLServiceName; starttime = $StartDateTime} | Where-Object - 
  Property Message -Match 'The default collation was successfully changed.'
  IF($log.count -gt 0 -and  $log.TimeCreated -gt $StartDateTime )
  {
    Stop-Process -ID $CollationChangeProcess.ID
    write-host 'Collation Change Process Completed Successfully.'
    break
  }
  $DateTimeNow=(Get-Date)
  $Duration=$DateTimeNow-$StartDateTime
  write-host  $Duration.totalminutes
  Start-Sleep -Seconds 2
  IF ($Duration.totalminutes -gt 2)
  {
    write-host 'Collation Change Process Failed.'
    break
  }
 }while (1 -eq 1)
...