Поделиться через


Использование PowerShell в Linux для управления SQL Server в Linux

Область применения: SQL Server — Linux

В этой статье описывается SQL Server PowerShell и приведены несколько примеров использования с PowerShell в macOS и Linux. PowerShell теперь является проектом с открытым исходным кодом на GitHub.

Дополнительные сведения о Windows PowerShell см. в статье "Что такое Windows PowerShell?

Параметры кроссплатформенного редактора

Все следующие шаги для PowerShell работают в обычном терминале, или из терминала в Visual Studio Code или Azure Data Studio. Как VS Code, так и Azure Data Studio доступны в macOS и Linux. Дополнительные сведения о Azure Data Studio см. в кратком руководстве: использование Azure Data Studio для подключения и запроса SQL Server. Возможно, вам также стоит рассмотреть использование поддержки редактора PowerShell для Azure Data Studio.

Установка PowerShell

Дополнительные сведения об установке PowerShell на различных поддерживаемых и экспериментальных платформах см. в следующих статьях:

Установка модуля SqlServer

Модуль SqlServer доступен в коллекции PowerShell. При работе с SQL Server всегда следует использовать последнюю версию SqlServer модуля PowerShell.

Чтобы установить SqlServer модуль, откройте сеанс PowerShell и запустите следующий код:

Install-Module -Name SqlServer

Дополнительные сведения об установке SqlServer модуля из коллекции PowerShell см. в разделе "Установка модуля SQL Server PowerShell".

Использование модуля SqlServer

Начнем с запуска PowerShell. Если вы используете macOS или Linux, откройте сеанс терминала на компьютере и введите pwsh , чтобы запустить новый сеанс PowerShell. В Windows используйте Win+R и введите pwsh для запуска нового сеанса PowerShell.

pwsh

SQL Server предоставляет модуль PowerShell с именем SqlServer. Модуль можно использовать SqlServer для импорта компонентов SQL Server (поставщика и командлетов SQL Server) в среду и скрипт PowerShell.

Скопируйте и вставьте следующую команду в командной строке PowerShell, чтобы импортировать SqlServer модуль в текущий сеанс PowerShell:

Import-Module SqlServer

Введите следующую команду в командной строке PowerShell, чтобы убедиться, что SqlServer модуль импортирован правильно:

Get-Module -Name SqlServer

В PowerShell должны отображаться данные примерно следующего вида:

ModuleType Version    Name          ExportedCommands
---------- -------    ----          ----------------
Script     21.1.18102 SqlServer     {Add-SqlAvailabilityDatabase, Add-SqlAvailabilityGroupList...

Подключение к SQL Server и получение сведений о сервере

Следующие действия используют PowerShell для подключения к экземпляру SQL Server в Linux и отображения нескольких свойств сервера.

Скопируйте следующие команды и вставьте их в командную строку PowerShell. При запуске этих команд в PowerShell будут выполнены следующие действия:

  • отображение диалогового окна с запросом на ввод имени узла и IP-адреса экземпляра;
  • открытие диалогового окна Запрос учетных данных PowerShell, в котором необходимо ввести соответствующие сведения; для подключения к экземпляру SQL Server на Linux вы можете использовать свои имя пользователя SQL и пароль SQL;
  • Используйте командлет Get-SqlInstance для подключения к Server и отображения нескольких свойств.

При необходимости можно заменить переменную $serverInstance IP-адресом или именем узла вашего экземпляра SQL Server.

# Prompt for instance & credentials to login into SQL Server
$serverInstance = Read-Host "Enter the name of your instance"
$credential = Get-Credential

# Connect to the Server and return a few properties
Get-SqlInstance -ServerInstance $serverInstance -Credential $credential
# done

В PowerShell должны отображаться данные примерно следующего вида:

Instance Name                   Version    ProductLevel UpdateLevel  HostPlatform HostDistribution
-------------                   -------    ------------ -----------  ------------ ----------------
your_server_instance            14.0.3048  RTM          CU13         Linux        Ubuntu

Примечание.

Если эти значения не отображаются, скорее всего, подключение к целевому экземпляру SQL Server установить не удалось. Убедитесь в том, что эти же данные можно использовать для подключения из SQL Server Management Studio. Затем ознакомьтесь с рекомендациями по устранению неполадок с подключением.

Использование поставщика SQL Server PowerShell

В качестве альтернативы для подключения к экземпляру сервера SQL Server можно использовать SQL Server PowerShell Provider. Использование провайдера позволяет работать с экземпляром SQL Server из командной строки, аналогично навигации по древовидной структуре в Обозревателе объектов. По умолчанию этот поставщик представлен как PSDrive с именем SQLSERVER:\, к которому можно подключать и перемещать экземпляры SQL Server, к которым имеет доступ ваша учетная запись домена. См. раздел Шаги настройки для получения информации о том, как настроить проверку подлинности Active Directory для SQL Server на Linux.

Также вы можете использовать проверку подлинности SQL в поставщике SQL Server PowerShell. Для этого используйте New-PSDrive командлет для создания нового PSDrive и предоставления соответствующих учетных данных для подключения.

В следующем примере показано, как создать PSDrive с помощью проверки подлинности SQL.

# NOTE: We are reusing the values saved in the $credential variable from the above example.

New-PSDrive -Name SQLonDocker -PSProvider SqlServer -Root 'SQLSERVER:\SQL\localhost,10002\Default\' -Credential $credential

Чтобы убедиться в том, что диск был создан, выполните командлет Get-PSDrive.

Get-PSDrive

После создания нового диска PSDrive вы можете начать работу с ним.

dir SQLonDocker:\Databases

Выходные данные могут выглядеть следующим образом: Вы можете заметить, что этот вывод аналогичен тому, что отображается в узле "Базы данных" SQL Server Management Studio (SSMS). В нем представлены пользовательские, а не системные базы данных.

Name                 Status           Size     Space  Recovery Compat. Owner
                                            Available  Model     Level
----                 ------           ---- ---------- -------- ------- -----
AdventureWorks2022   Normal      209.63 MB    1.31 MB Simple       130 sa
AdventureWorksDW2022 Normal      167.00 MB   32.47 MB Simple       110 sa
AdventureWorksDW2022 Normal      188.00 MB   78.10 MB Simple       120 sa
AdventureWorksDW2022 Normal      172.00 MB   74.76 MB Simple       130 sa
AdventureWorksDW2022 Normal      208.00 MB   40.57 MB Simple       140 sa

Чтобы просмотреть все базы данных в вашем экземпляре, можно использовать командлет Get-SqlDatabase.

Получение баз данных

Важно знать такой командлет, как Get-SqlDatabase. Для многих операций с базами данных или содержащимися в них объектами можно использовать командлет Get-SqlDatabase. Если вы предоставляете значения как для параметра -ServerInstance, так и для параметра -Database, извлекается только соответствующий объект базы данных. Однако если указать только -ServerInstance параметр, возвращается полный список всех баз данных в этом экземпляре.

# NOTE: We are reusing the values saved in the $credential variable from the above example.

# Connect to the Instance and retrieve all databases
Get-SqlDatabase -ServerInstance ServerB -Credential $credential

Ниже приведен пример того, что возвращает команда Get-SqlDatabase:

Name                 Status           Size     Space  Recovery Compat. Owner
                                            Available  Model     Level
----                 ------           ---- ---------- -------- ------- -----
AdventureWorks2022   Normal      209.63 MB    1.31 MB Simple       130 sa
AdventureWorksDW2022 Normal      167.00 MB   32.47 MB Simple       110 sa
AdventureWorksDW2022 Normal      188.00 MB   78.10 MB Simple       120 sa
AdventureWorksDW2022 Normal      172.00 MB   74.88 MB Simple       130 sa
AdventureWorksDW2022 Normal      208.00 MB   40.63 MB Simple       140 sa
master               Normal        6.00 MB  600.00 KB Simple       140 sa
model                Normal       16.00 MB    5.70 MB Full         140 sa
msdb                 Normal       15.50 MB    1.14 MB Simple       140 sa
tempdb               Normal       16.00 MB    5.49 MB Simple       140 sa

Проверка журналов ошибок SQL Server

В следующих шагах используется PowerShell для проверки журналов ошибок на экземпляре SQL Server в Linux.

Скопируйте следующие команды и вставьте их в командную строку PowerShell. Это может занять несколько минут. Данные команды выполняют следующие действия:

  • отображение диалогового окна с запросом на ввод имени узла и IP-адреса экземпляра;
  • открытие диалогового окна Запрос учетных данных PowerShell, в котором необходимо ввести соответствующие сведения; для подключения к экземпляру SQL Server на Linux вы можете использовать свои имя пользователя SQL и пароль SQL;
  • Используйте командлет Get-SqlErrorLog для подключения к экземпляру SQL Server в Linux и получения журналов ошибок с момента Yesterday.

При необходимости можно заменить переменную $serverInstance IP-адресом или именем узла вашего экземпляра SQL Server.

# Prompt for instance & credentials to login into SQL Server
$serverInstance = Read-Host "Enter the name of your instance"
$credential = Get-Credential

# Retrieve error logs since yesterday
Get-SqlErrorLog -ServerInstance $serverInstance -Credential $credential -Since Yesterday
# done

Исследуйте командлеты, доступные в настоящее время в PowerShell.

Хотя модуль SqlServer в настоящее время имеет 109 командлетов, доступных в Windows PowerShell, в PowerShell доступно только 62 из 109. Следующий полный список включает 62 доступных командлетов. Подробную документацию по всем командлетам модуля SqlServer см. в справочнике по командлетам SqlServer.

Следующая команда показывает вам все командлеты, доступные в той версии PowerShell, которую вы используете.

Get-Command -Module SqlServer -CommandType Cmdlet |
Sort-Object -Property Noun |
Select-Object Name
  • ConvertFrom-EncodedSqlName
  • ConvertTo-EncodedSqlName
  • Get-SqlAgent
  • Get-SqlAgentJob
  • Get-SqlAgentJobHistory (получить историю заданий SQL Agent)
  • Get-SqlAgentJobSchedule
  • Get-SqlAgentJobStep
  • Get-SqlAgentSchedule
  • Invoke-SqlAssessment
  • Получить элемент оценки SQL (Get-SqlAssessmentItem)
  • Remove-SqlAvailabilityDatabase
  • Resume-SqlAvailabilityDatabase
  • Add-SqlAvailabilityDatabase
  • Приостановить-SqlAvailabilityDatabase
  • New-SqlAvailabilityGroup
  • Set-SqlAvailabilityGroup
  • Remove-SqlAvailabilityGroup
  • Switch-SqlAvailabilityGroup
  • Join-SqlAvailabilityGroup
  • Revoke-SqlAvailabilityGroupCreateAnyDatabase
  • Grant-SqlAvailabilityGroupCreateAnyDatabase
  • New-SqlAvailabilityGroupListener
  • Установить прослушиватель группы доступности SQL
  • Add-SqlAvailabilityGroupListenerStaticIp
  • Set-SqlAvailabilityReplica
  • Удаление реплики доступности SQL (Remove-SqlAvailabilityReplica)
  • New-SqlAvailabilityReplica
  • Set-SqlAvailabilityReplicaRoleToSecondary
  • Новый-ОпцияШифрованияРезервнойКопииSQL
  • Get-SqlBackupHistory
  • Invoke-Sqlcmd
  • New-SqlCngColumnMasterKeySettings
  • Remove-SqlColumnEncryptionKey (Удалить ключ шифрования столбцов SQL)
  • Get-SqlColumnEncryptionKey (Получение ключа шифрования столбца SQL)
  • Remove-SqlColumnEncryptionKeyValue
  • Add-SqlColumnEncryptionKeyValue
  • Get-SqlColumnMasterKey
  • Remove-SqlColumnMasterKey
  • New-SqlColumnMasterKey
  • Get-SqlCredential
  • Set-SqlCredential
  • New-SqlCredential
  • Remove-SqlCredential
  • New-SqlCspColumnMasterKeySettings
  • Get-SqlDatabase
  • Restore-SqlDatabase
  • Резервное копирование базы данных SQL (Backup-SqlDatabase)
  • Set-SqlErrorLog
  • Get-SqlErrorLog
  • New-SqlHADREndpoint
  • Set-SqlHADREndpoint
  • Get-SqlInstance
  • Add-SqlLogin
  • Remove-SqlLogin
  • Get-SqlLogin
  • Set-SqlSmartAdmin
  • Get-SqlSmartAdmin
  • Read-SqlTableData
  • Write-SqlTableData
  • Read-SqlViewData
  • Read-SqlXEvent
  • Convert-UrnToPath