Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
2.6.2011, 19:55
Сообщение
#1
|
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1 |
В одном посте невозможно описать все возможности, появившиеся после введения поддержки Window Powershell в Microsoft SQL Server, однако этим постом я постараюсь показать хотя бы часть этих возможностей. В состав SQL Server, начиная с версии SQL Server 2008, входят две оснастки:
Таким образом, сейчас, вы можете без применения стороннего ПО получать в своих скриптах на 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. Теперь немного о самой большой, «вкусности». Командлеты. Всего нам доступно пять командлетов:
Самым важным, для меня, является командлет 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, позволяет значительно облегчить жизнь администратора баз данных. Ссылки:
Original source: habrahabr.ru (comments). Читать дальше -------------------- |
|
|
|
![]() ![]() |
| Текстовая версия | Сейчас: 3.11.2025, 8:44 | |
|
|
||