Скорая Компьютерная Помощь г. Калуга

Полный спектр компьютерных услуг!

Здравствуйте, гость ( Вход | Регистрация )

> Внимание!

  • Вся информация, расположенная в данном и других разделах форума получена из открытых источников (интернет-ресурсы, средства массовой информации, печатные издания и т.п.) и/или добавлена самими пользователями. Администрация форума предоставляет его участникам площадку для общения / размещения файлов / статей и т.п. и не несет ответственности за содержание сообщений, а также за возможное нарушение авторских, смежных и каких-либо иных прав, которое может повлечь за собой информация, содержащаяся в сообщениях.
 
Ответить в эту темуОткрыть новую тему
> PowerShell / [Из песочницы] Использование PowerShell для администрирования Microsoft SQL Server
Decker
сообщение 2.6.2011, 19:55
Сообщение #1


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1



В одном посте невозможно описать все возможности, появившиеся после введения поддержки 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:



Выполнив cd SQLServer:SQLServerNameInstanceName, мы добьемся того же результата, что и запуская 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:tmpmemory.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/

Original source: habrahabr.ru (comments).

Читать дальше


--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 3.11.2025, 8:44
Яндекс цитирования