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


Управление 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 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

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