Управление SQL Server на Linux с помощью PowerShell Core

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

В этой статье рассматривается модуль SQL Server PowerShell и приводится несколько примеров того, как можно использовать его для работы с PowerShell Core в macOS и Linux. PowerShell Core — это проект с открытым кодом на сайте GitHub.

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

Все приведенные ниже действия для Работы PowerShell Core в обычном терминале или их можно запустить из терминала в 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 Core

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

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

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

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

Install-Module -Name SqlServer

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

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

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

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 Core для подключения к экземпляру SQL Server на Linux и просмотра некоторых свойств сервера.

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

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

При необходимости можно заменить переменную $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. Он позволяет работать с экземпляром 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

Выходные данные могут выглядеть следующим образом. Вы можете заметить, что эти выходные данные похожи на то, что 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 Core для проверки журналов ошибок подключения в вашем экземпляре SQL Server на Linux.

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

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

При необходимости можно заменить переменную $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 Core в настоящее время

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

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

Get-Command -Module SqlServer -CommandType Cmdlet |
Sort-Object -Property Noun |
SELECT Name
  • ConvertFrom-EncodedSqlName
  • ConvertTo-EncodedSqlName
  • Get-SqlAgent
  • Get-SqlAgentJob
  • Get-SqlAgentJobHistory
  • Get-SqlAgentJobSchedule
  • Get-SqlAgentJobStep
  • Get-SqlAgentSchedule
  • Invoke-SqlAssessment
  • Get-SqlAssessmentItem
  • Remove-SqlAvailabilityDatabase
  • Resume-SqlAvailabilityDatabase
  • Add-SqlAvailabilityDatabase
  • Suspend-SqlAvailabilityDatabase
  • New-SqlAvailabilityGroup
  • Set-SqlAvailabilityGroup
  • Remove-SqlAvailabilityGroup
  • Switch-SqlAvailabilityGroup
  • Join-SqlAvailabilityGroup
  • Revoke-SqlAvailabilityGroupCreateAnyDatabase
  • Grant-SqlAvailabilityGroupCreateAnyDatabase
  • New-SqlAvailabilityGroupListener
  • Set-SqlAvailabilityGroupListener
  • Add-SqlAvailabilityGroupListenerStaticIp
  • Set-SqlAvailabilityReplica
  • Remove-SqlAvailabilityReplica
  • New-SqlAvailabilityReplica
  • Set-SqlAvailabilityReplicaRoleToSecondary
  • New-SqlBackupEncryptionOption
  • Get-SqlBackupHistory
  • Invoke-Sqlcmd
  • New-SqlCngColumnMasterKeySettings
  • Remove-SqlColumnEncryptionKey
  • Get-SqlColumnEncryptionKey
  • Remove-SqlColumnEncryptionKeyValue
  • Add-SqlColumnEncryptionKeyValue
  • Get-SqlColumnMasterKey
  • Remove-SqlColumnMasterKey
  • New-SqlColumnMasterKey
  • Get-SqlCredential
  • Set-SqlCredential
  • New-SqlCredential
  • Remove-SqlCredential
  • New-SqlCspColumnMasterKeySettings
  • Get-SqlDatabase
  • Restore-SqlDatabase
  • 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