Как стать автором
Обновить

Использование PowerShell для администрирования Microsoft SQL Server

Время на прочтение 3 мин
Количество просмотров 30K
В одном посте невозможно описать все возможности, появившиеся после введения поддержки Window Powershell в Microsoft SQL Server, однако этим постом я постараюсь показать хотя бы часть этих возможностей. В состав SQL Server, начиная с версии SQL Server 2008, входят две оснастки:
  1. Поставщик (Provider) SQL Server, предоставляющий простой механизм навигации – «внутри» SQL Server, можно использовать команды dir, ls, cd, Set-Location, Get-Location и т.д.;
  2. Набор командлетов для указания действий SQL Server (например, выполнение скрипта sqlcmd).

Таким образом, сейчас, вы можете без применения стороннего ПО получать в своих скриптах на PowerShell всю необходимую информацию с SQL Server.

Чем это может быть полезно для администратора?


Итак, если у вас уже установлены клиентские утилиты (SQL Server Management Studio), то в вашей системе уже есть перечисленные выше оснастки и дополнительных действий не требуется. Если нет – вы можете скачать Management Studio бесплатно здесь.
После установки Management Studio и подключения к интересующему вас экземпляру SQL Server, можно запустить утилиту sqlps прямо оттуда:

Если в появившемся окне sqlps набрать команду `dir`, можно увидеть любопытную картину (обратите внимание на объекты в ObjectExplorer в SSMS и результатом команды `dir`):

Вместо использования sqlps, можно просто добавить новые оснастки так:
add-pssnapin SqlServerCmdletSnapin100;
add-pssnapin SqlServerProviderSnapin100;

Убедиться, что они установлены, можно ознакомившись с помощью командлета get-pssnapin –registered.
Итак, после добавления этих оснасток можно посмотреть вывод командлета Get-Psdrive:
image
Выполнив cd SQLServer:\SQL\ServerName\InstanceName\, мы добьемся того же результата, что и запуская sqlps из SSMS.
Теперь немного о самой большой, «вкусности». Командлеты. Всего нам доступно пять командлетов:
  1. Invoke-Sqlcmd – практически то же самое, что утилита sqlcmd, c помощью этого командлета можно выполнять SQL-запросы на нужном SQLServer.
  2. Invoke-PolicyEvaluation – проверяет соответствует ли целевой набор объектов SQL Server условиям, определенным в схемах управления на основе политик.
  3. Encode-Sqlname – кодировка идентификаторов SQL Server. В SQL Server вы можете присвоить идентификатору в квадратных скобках практически любое значение, что может создать трудности при обращении к нему с помощью PowerShell. Для этого используется командлет Encode-Sqlname, превращающий «My:long_and|complexity|identy» в «My%3Along_and%7Ccomplexity%7Cidenty»
  4. Decode-Sqlname – совершает обратное преобразование
  5. Convert-UrnToPath – преобразует URN-строки, используемые моделью объектов SMO, в «читабельные» пути.

Самым важным, для меня, является командлет Invoke-Sqlcmd позволяющий выполнять произвольный SQL-запрос на сервере.
Представим ситуацию, что вам нужно собрать информацию по используемой памяти на десятке экземпляров, установленных на некотором количестве физических серверов в вашей сети. Чтобы добиться этого, можно использовать сторонние утилиты, позволяющие выполнять запрос на некотором количестве экземпляров, можно использовать ту же sqlcmd, вручную указывая с каких серверов требуется получить данные. С помощью PowerShell эту задачу можно решить проще и элегантнее. Следующий скрипт, например, выведет вам информацию о настройке ‘Max Server Memory (MB)’, на всех экземплярах зарегистрированных на вашем компьютере:

$ServerList = dir -recurse SQLSERVER:\SQLRegistration\'Database Engine Server Group'\ | where {$_.Mode -ne "d"}
foreach ($RegisteredSQLs in $ServerList)
{
$dt = invoke-sqlcmd -ServerInstance $RegisteredSQLs.ServerName -database master -Query "SELECT SERVERPROPERTY('servername'), SERVERPROPERTY ('instancename'), value FROM sys.configurations
WHERE name = 'Max Server Memory (MB)'";
echo $dt >> C:\tmp\memory.txt;
}


Обратите внимание, что в данном случае, для аккаунта под которым запускается этот скрипт должен быть создан login на SQL Server'e и ему должно хватать прав на выполнение запроса к sys.configurations. Если вы используете SQL-логины, нужно указать имя пользователя и пароль в параметрах командлета Invoke-Sqlcmd.

А теперь представьте, что вам надо абсолютно одинаково настроить семь серверов, или добавить на них один и тот же логин, или сделать бэкапы всех баз на сервере… Надеюсь, у меня получилось показать, что использование PowerShell, совместно с SQL Server, позволяет значительно облегчить жизнь администратора баз данных.

Ссылки:
  1. Общие сведения о SQL Server PowerShell, Books Online — msdn.microsoft.com/ru-ru/library/cc281954.aspx
  2. Использование командлета Invoke-Sqlcmd, Books Online — msdn.microsoft.com/ru-ru/library/cc281720.aspx
  3. SQL University — sqlchicken.com/sql-university
Теги:
Хабы:
+23
Комментарии 6
Комментарии Комментарии 6

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн