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

В этой статье рассматривается модуль SQL Server PowerShell и приводится несколько примеров того, как можно использовать его для работы с PowerShell Core в macOS и Linux.This article introduces SQL Server PowerShell and walks you through a couple of examples on how to use it with PowerShell Core (PS Core) on macOS & Linux. PowerShell Core — это проект с открытым кодом на сайте GitHub.PowerShell Core is now an Open Source project on GitHub.

Параметры кроссплатформенного редактораCross-platform editor options

Все инструкции, приведенные ниже для PowerShell Core, будут работать и в обычном терминале. Их также можно выполнять из терминала в VS Code или Azure Data Studio.All of the steps PowerShell Core below will work in a regular terminal, or you can run them from a terminal within VS Code or Azure Data Studio. Как VS Code, так и Azure Data Studio доступны в macOS и Linux.Both VS Code and Azure Data Studio are available on macOS and Linux. Дополнительные сведения об Azure Data Studio см. в этом кратком руководстве.For more information on Azure Data Studio, see this quickstart. Кроме того, можно использовать расширение PowerShell.You may also want to consider using the PowerShell extension for it.

Установка PowerShell CoreInstalling PowerShell Core

Дополнительные сведения об установке PowerShell Core на различных поддерживаемых и экспериментальных платформах см. в следующих статьях:For more information on installing PowerShell Core on various supported and experimental platforms, see the following articles:

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

Модуль SqlServer доступен в коллекции PowerShell.The SqlServer module is maintained in the PowerShell Gallery. При работе с SQL Server следует всегда использовать последнюю версию модуля SqlServer PowerShell.When working with SQL Server, you should always use the most recent version of the SqlServer PowerShell module.

Чтобы установить модуль SqlServer, откройте сеанс PowerShell Core и выполните следующий код:To install the SqlServer module, open a PowerShell Core session and run the following code:

Install-Module -Name SqlServer

Дополнительные сведения об установке модуля SqlServer из коллекции PowerShell см. на этой странице.For more information on how to install the SqlServer module from the PowerShell Gallery, see this page.

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

Для начала запустим PowerShell Core.Let's start by launching PowerShell Core. Если вы используете macOS или Linux, откройте сеанс терминала на своем компьютере и введите pwsh, чтобы запустить новый сеанс PowerShell Core.If you are on macOS or Linux, Open a terminal session on your computer, and type pwsh to launch a new PowerShell Core session. В Windows нажмите клавиши Win+R и введите pwsh, чтобы запустить новый сеанс PowerShell Core.On Windows, use Win+R, and type pwsh to launch a new PowerShell Core session.

pwsh

В SQL Server представлен модуль PowerShell под названием SqlServer.SQL Server provides a PowerShell module named SqlServer. Вы можете использовать модуль SqlServer для импорта компонентов SQL Server (поставщик и командлеты SQL Server) в скрипт или среду PowerShell.You can use the SqlServer module to import the SQL Server components (SQL Server provider and cmdlets) into a PowerShell environment or script.

Скопируйте следующую команду и вставьте ее в командную строку PowerShell, чтобы импортировать модуль SqlServer в текущий сеанс PowerShell:Copy and paste the following command at the PowerShell prompt to import the SqlServer module into your current PowerShell session:

Import-Module SqlServer

Введите следующую команду в командной строке PowerShell, чтобы убедиться в том, что модуль SqlServer был импортирован правильно:Type the following command at the PowerShell prompt to verify that the SqlServer module was imported correctly:

Get-Module -Name SqlServer

В PowerShell должны отображаться данные примерно следующего вида:PowerShell should display information similar to the following output:

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

Подключение к SQL Server и получение сведений о сервереConnect to SQL Server and get server information

В приведенных ниже инструкциях мы используем PowerShell Core для подключения к экземпляру SQL Server на Linux и просмотра некоторых свойств сервера.The following steps use PowerShell Core to connect to your SQL Server instance on Linux and display a couple of server properties.

Скопируйте следующие команды и вставьте их в командную строку PowerShell.Copy and paste the following commands at the PowerShell prompt. При запуске этих команд в PowerShell будут выполнены следующие действия:When you run these commands, PowerShell will:

  • отображение диалогового окна с запросом на ввод имени узла и IP-адреса экземпляра;Display a dialog that prompts you for the hostname or IP address of your instance
  • открытие диалогового окна Запрос учетных данных PowerShell, в котором необходимо ввести соответствующие сведения;Display the PowerShell credential request dialog, which prompts you for the credentials. для подключения к экземпляру SQL Server на Linux вы можете использовать свои имя пользователя SQL и пароль SQL;You can use your SQL username and SQL password to connect to your SQL Server instance on Linux
  • использование командлета Get-SqlInstance для подключения к серверу и просмотра некоторых свойств.Use the Get-SqlInstance cmdlet to connect to the Server and display a few properties

При необходимости можно заменить переменную $serverInstance IP-адресом или именем узла вашего экземпляра SQL Server.Optionally, you can just replace the $serverInstance variable with the IP address or the hostname of your SQL Server instance.

# 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 должны отображаться данные примерно следующего вида:PowerShell should display information similar to the following output:

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

Примечание

Если эти значения не отображаются, скорее всего, подключение к целевому экземпляру SQL Server установить не удалось.If nothing is displayed for these values, the connection to the target SQL Server instance most likely failed. Убедитесь в том, что эти же данные можно использовать для подключения из SQL Server Management Studio.Make sure that you can use the same connection information to connect from SQL Server Management Studio. Затем ознакомьтесь с рекомендациями по устранению неполадок с подключением.Then review the connection troubleshooting recommendations.

Использование поставщика SQL Server для PowerShellUsing the SQL Server PowerShell Provider

В качестве альтернативы для подключения к экземпляру SQL Server можно использовать поставщик SQL Server PowerShell.Another option for connecting to your SQL Server instance is to use the SQL Server PowerShell Provider. Он позволяет работать с экземпляром SQL Server из командной строки так же, как с древовидной структурой в обозревателе объектов.Using the provider allows you to navigate SQL Server instance similar to as if you were navigating the tree structure in Object Explorer, but at the cmdline. По умолчанию этот поставщик представлен в виде диска PSDrive с именем SQLSERVER:\, который может использоваться для подключения к экземплярам SQL Server, доступным вашей учетной записи домена, и работы с ними.By default this provider is presented as a PSDrive named SQLSERVER:\ which you can use to connect & navigate SQL Server instances that your domain account has access to. Дополнительные сведения о настройке проверки подлинности Active Directory для SQL Server на Linux см. в разделе Шаги настройки.See Configuration steps for information on how to setup Active Directory authentication for SQL Server on Linux.

Также вы можете использовать проверку подлинности SQL в поставщике SQL Server PowerShell.You can also use SQL authentication with the SQL Server PowerShell Provider. Для этого с помощью командлета New-PSDrive создайте новый диск PSDrive и укажите учетные данные для подключения.To do this, use the New-PSDrive cmdlet to create a new PSDrive and supply the proper credentials to connect.

В приведенном ниже примере демонстрируется создание диска PSDrive с использованием проверки подлинности SQL.In this example below, you will see an example of how to create a new PSDrive using SQL authentication.

# 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.You can confirm that the drive was created by running the Get-PSDrive cmdlet.

Get-PSDrive

После создания нового диска PSDrive вы можете начать работу с ним.Once you have created your new PSDrive, you can start navigating it.

dir SQLonDocker:\Databases

Выходные данные могут выглядеть следующим образом.Here is what the output might look like. Обратите внимание, что эти данные аналогичны тем, которые SSMS отображает в узле "Базы данных".You might notice this output is similar to what SSMS will display at the Databases node. В нем представлены пользовательские, а не системные базы данных.It displays the user databases, but not the system databases.

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

Чтобы просмотреть все базы данных в вашем экземпляре, можно использовать командлет Get-SqlDatabase.If you need to see all databases on your instance, one option is to use the Get-SqlDatabase cmdlet.

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

Один из важных командлетов, которые следует знать, — Get-SqlDatabase.An important cmdlet to know is the Get-SqlDatabase. Для многих операций с базами данных или содержащимися в них объектами можно использовать командлет Get-SqlDatabase.For many operations that involve a database, or objects within a database, the Get-SqlDatabase cmdlet can be used. Если заданы значения параметров -ServerInstance и -Database, будут извлечены только эти объекты базы данных.If you supply values for both the -ServerInstance and -Database parameters, only that one database object will be retrieved. Тем не менее, если вы зададите только параметр -ServerInstance, будет возвращен полный список баз данных в этом экземпляре.However, if you specify only the -ServerInstance parameter, a full list of all databases on that instance will be returned.

# 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, приведенной выше:Here is a sample of what might be returned by the Get-SqlDatabase command above:

Name                 Status           Size     Space  Recovery Compat. Owner
                                            Available  Model     Level
----                 ------           ---- ---------- -------- ------- -----
AdventureWorks2016   Normal      209.63 MB    1.31 MB Simple       130 sa
AdventureWorksDW2012 Normal      167.00 MB   32.47 MB Simple       110 sa
AdventureWorksDW2014 Normal      188.00 MB   78.10 MB Simple       120 sa
AdventureWorksDW2016 Normal      172.00 MB   74.88 MB Simple       130 sa
AdventureWorksDW2017 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 ServerExamine SQL Server error logs

Далее описывается использование PowerShell Core для проверки журналов ошибок подключения в вашем экземпляре SQL Server на Linux.The following steps use PowerShell Core to examine error logs connect on your SQL Server instance on Linux.

Скопируйте следующие команды и вставьте их в командную строку PowerShell.Copy and paste the following commands at the PowerShell prompt. Это может занять несколько минут.They might take a few minutes to run. Данные команды выполняют следующие действия:These commands do the following steps:

  • отображение диалогового окна с запросом на ввод имени узла и IP-адреса экземпляра;Display a dialog that prompts you for the hostname or IP address of your instance
  • открытие диалогового окна Запрос учетных данных PowerShell, в котором необходимо ввести соответствующие сведения;Display the PowerShell credential request dialog that prompts you for the credentials. для подключения к экземпляру SQL Server на Linux вы можете использовать свои имя пользователя SQL и пароль SQL;You can use your SQL username and SQL password to connect to your SQL Server instance on Linux
  • Использование командлета Get-SqlErrorLog для подключения к экземпляру SQL Server на Linux и извлечения журналов ошибок, обнаруженных со вчерашнего дняUse the Get-SqlErrorLog cmdlet to connect to the SQL Server instance on Linux and retrieve error logs since Yesterday

При необходимости можно заменить переменную $serverInstance IP-адресом или именем узла вашего экземпляра SQL Server.Optionally, you can replace the $serverInstance variable with the IP address or the hostname of your SQL Server instance.

# 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 CoreExplore cmdlets currently available in PS Core

Хотя модуль SqlServer сейчас содержит 109 командлетов Windows PowerShell, только 62 из них доступны в PowerShell Core.While the SqlServer module currently has 109 cmdlets available in Windows PowerShell, only 62 of the 109 are available in PSCore. Ниже приведен их список.A full list of 59 cmdlets currently available is included below. Подробную документацию по всем командлетам модуля SqlServer см. в справочнике по командлетам SqlServer.For in-depth documentation of all cmdlets in the SqlServer module, see the SqlServer cmdlet reference.

Приведенная ниже команда выводит все командлеты, доступные в используемой версии PowerShell.The following command will show you all of the cmdlets available on the version of PowerShell you are using.

Get-Command -Module SqlServer -CommandType Cmdlet |
SORT -Property Noun |
SELECT Name
  • ConvertFrom-EncodedSqlNameConvertFrom-EncodedSqlName
  • ConvertTo-EncodedSqlNameConvertTo-EncodedSqlName
  • Get-SqlAgentGet-SqlAgent
  • Get-SqlAgentJobGet-SqlAgentJob
  • Get-SqlAgentJobHistoryGet-SqlAgentJobHistory
  • Get-SqlAgentJobScheduleGet-SqlAgentJobSchedule
  • Get-SqlAgentJobStepGet-SqlAgentJobStep
  • Get-SqlAgentScheduleGet-SqlAgentSchedule
  • Invoke-SqlAssessmentInvoke-SqlAssessment
  • Get-SqlAssessmentItemGet-SqlAssessmentItem
  • Remove-SqlAvailabilityDatabaseRemove-SqlAvailabilityDatabase
  • Resume-SqlAvailabilityDatabaseResume-SqlAvailabilityDatabase
  • Add-SqlAvailabilityDatabaseAdd-SqlAvailabilityDatabase
  • Suspend-SqlAvailabilityDatabaseSuspend-SqlAvailabilityDatabase
  • New-SqlAvailabilityGroupNew-SqlAvailabilityGroup
  • Set-SqlAvailabilityGroupSet-SqlAvailabilityGroup
  • Remove-SqlAvailabilityGroupRemove-SqlAvailabilityGroup
  • Switch-SqlAvailabilityGroupSwitch-SqlAvailabilityGroup
  • Join-SqlAvailabilityGroupJoin-SqlAvailabilityGroup
  • Revoke-SqlAvailabilityGroupCreateAnyDatabaseRevoke-SqlAvailabilityGroupCreateAnyDatabase
  • Grant-SqlAvailabilityGroupCreateAnyDatabaseGrant-SqlAvailabilityGroupCreateAnyDatabase
  • New-SqlAvailabilityGroupListenerNew-SqlAvailabilityGroupListener
  • Set-SqlAvailabilityGroupListenerSet-SqlAvailabilityGroupListener
  • Add-SqlAvailabilityGroupListenerStaticIpAdd-SqlAvailabilityGroupListenerStaticIp
  • Set-SqlAvailabilityReplicaSet-SqlAvailabilityReplica
  • Remove-SqlAvailabilityReplicaRemove-SqlAvailabilityReplica
  • New-SqlAvailabilityReplicaNew-SqlAvailabilityReplica
  • Set-SqlAvailabilityReplicaRoleToSecondarySet-SqlAvailabilityReplicaRoleToSecondary
  • New-SqlBackupEncryptionOptionNew-SqlBackupEncryptionOption
  • Get-SqlBackupHistoryGet-SqlBackupHistory
  • Invoke-SqlcmdInvoke-Sqlcmd
  • New-SqlCngColumnMasterKeySettingsNew-SqlCngColumnMasterKeySettings
  • Remove-SqlColumnEncryptionKeyRemove-SqlColumnEncryptionKey
  • Get-SqlColumnEncryptionKeyGet-SqlColumnEncryptionKey
  • Remove-SqlColumnEncryptionKeyValueRemove-SqlColumnEncryptionKeyValue
  • Add-SqlColumnEncryptionKeyValueAdd-SqlColumnEncryptionKeyValue
  • Get-SqlColumnMasterKeyGet-SqlColumnMasterKey
  • Remove-SqlColumnMasterKeyRemove-SqlColumnMasterKey
  • New-SqlColumnMasterKeyNew-SqlColumnMasterKey
  • Get-SqlCredentialGet-SqlCredential
  • Set-SqlCredentialSet-SqlCredential
  • New-SqlCredentialNew-SqlCredential
  • Remove-SqlCredentialRemove-SqlCredential
  • New-SqlCspColumnMasterKeySettingsNew-SqlCspColumnMasterKeySettings
  • Get-SqlDatabaseGet-SqlDatabase
  • Restore-SqlDatabaseRestore-SqlDatabase
  • Backup-SqlDatabaseBackup-SqlDatabase
  • Set-SqlErrorLogSet-SqlErrorLog
  • Get-SqlErrorLogGet-SqlErrorLog
  • New-SqlHADREndpointNew-SqlHADREndpoint
  • Set-SqlHADREndpointSet-SqlHADREndpoint
  • Get-SqlInstanceGet-SqlInstance
  • Add-SqlLoginAdd-SqlLogin
  • Remove-SqlLoginRemove-SqlLogin
  • Get-SqlLoginGet-SqlLogin
  • Set-SqlSmartAdminSet-SqlSmartAdmin
  • Get-SqlSmartAdminGet-SqlSmartAdmin
  • Read-SqlTableDataRead-SqlTableData
  • Write-SqlTableDataWrite-SqlTableData
  • Read-SqlViewDataRead-SqlViewData
  • Read-SqlXEventRead-SqlXEvent
  • Convert-UrnToPathConvert-UrnToPath

См. также разделSee also