Verwalten von SQL Server für Linux mit PowerShell Core

In diesem Artikel werden SQL Server PowerShell und einige Beispiele zur Verwendung mit PowerShell Core (PS Core) unter macOS Linux erläutert. PowerShell Core ist jetzt ein Open Source-Projekt auf GitHub.

Plattformübergreifende Editor-Optionen

Alle unten genannten Schritte mit PowerShell Core funktionieren in einem regulären Terminal. Alternativ dazu können Sie die Schritte auch in einem Terminal in VS Code oder Azure Data Studio ausführen. Sowohl VS Code als auch Azure Data Studio sind unter macOS und Linux verfügbar. Weitere Informationen zu Azure Data Studio finden Sie in dieser Schnellstartanleitung. Sie können auch die Verwendung der PowerShell-Erweiterung in Betracht ziehen.

Installieren von PowerShell Core

Weitere Informationen zur Installation von PowerShell Core auf verschiedenen unterstützten und experimentellen Plattformen finden Sie in den folgenden Artikeln:

Installieren des SqlServer-Moduls

Das SqlServer Modul wird SqlServer. Wenn Sie mit SQL Server arbeiten, sollten Sie immer die neueste Version der PowerShell-Moduls „SqlServer“ verwenden.

Um das SqlServer-Modul zu installieren, öffnen Sie eine PowerShell Core-Sitzung, und führen Sie den folgenden Code aus:

Install-Module -Name SqlServer

Weitere Informationen zum Installieren des SqlServer-Moduls aus dem PowerShell-Katalog finden Sie auf dieser Seite.

Verwenden des SqlServer-Moduls

Starten Sie zunächst PowerShell Core. Wenn Sie auf einem macOS- oder Linux-Computer arbeiten, öffnen Sie eine Terminalsitzung, und geben Sie pwsh ein, um eine neue PowerShell Core-Sitzung zu starten. Verwenden Windows WinR, und geben Sie ein, um eine neue PowerShell Core starten.

pwsh

SQL Server stellt ein PowerShell-Modul namens SqlServer bereit. Sie können das Modul SqlServer verwenden, um die SQL Server-Komponenten (SQL Server-Anbieter und -Cmdlets) in eine PowerShell-Umgebung oder ein PowerShell-Skript zu importieren.

Kopieren Sie den folgenden Befehl in die PowerShell-Eingabeaufforderung, um das Modul SqlServer in Ihre aktuelle PowerShell-Sitzung zu importieren:

Import-Module SqlServer

Geben Sie den folgenden Befehl in die PowerShell-Eingabeaufforderung ein, um zu überprüfen, ob das SqlServer-Modul ordnungsgemäß importiert wurde:

Get-Module -Name SqlServer

PowerShell sollte Informationen ähnlich der folgenden Ausgabe anzeigen:

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

Herstellen einer Verbindung mit SQL Server und Abrufen von Serverinformationen

In den folgenden Schritten wird PowerShell Core verwendet, um eine Verbindung mit Ihrer SQL Server-Instanz unter Linux herzustellen und einige Servereigenschaften anzuzeigen.

Kopieren Sie die folgenden Befehle in die PowerShell-Eingabeaufforderung. Wenn Sie diese Befehle ausführen, führt PowerShell Folgendes aus:

  • Ein Dialogfeld wird angezeigt, das Sie auffordert, den Hostnamen oder die IP-Adresse Ihrer Instanz einzugeben.
  • Das Dialogfeld Bei PowerShell anmelden wird angezeigt, das Sie auffordert, die Anmeldeinformationen einzugeben. Sie können Ihren SQL-Benutzernamen und Ihr SQL-Kennwort verwenden, um eine Verbindung mit Ihrer SQL Server-Instanz unter Linux herzustellen.
  • Das Cmdlet Get-SqlInstance wird verwendet, um eine Verbindung mit dem Server herzustellen und einige Eigenschaften anzuzeigen.

Optional können Sie einfach die $serverInstance-Variable durch die IP-Adresse oder den Hostnamen Ihrer SQL Server-Instanz ersetzen.

# 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 sollte Informationen ähnlich der folgenden Ausgabe anzeigen:

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

Hinweis

Wenn für diese Werte nichts angezeigt wird, ist beim Herstellen einer Verbindung mit der SQL Server-Zielinstanz höchstwahrscheinlich ein Fehler aufgetreten. Stellen Sie sicher, dass Sie dieselben Verbindungsinformationen verwenden können, um eine Verbindung über SQL Server Management Studio herzustellen. Überprüfen Sie anschließend die Empfehlungen zur Verbindungsproblembehandlung.

Verwenden des SQL Server PowerShell-Anbieters

Die Verwendung des SQL Server PowerShell-Anbieters ist eine weitere Option zum Herstellen einer Verbindung mit Ihrer SQL Server-Instanz. Dieser Anbieter ermöglicht Ihnen die Navigation Ihrer SQL Server-Instanz über die Befehlszeile, so als würden Sie in der Struktur im Objekt-Explorer navigieren. Standardmäßig wird dieser Anbieter als PSDrive SQLSERVER:\& mit dem Namen angezeigt, mit dem Sie eine Verbindung mit navigieren SQL Server-Instanzen herstellen können, auf die Ihr Domänenkonto Zugriff hat. Informationen zum Einrichten der Active Directory-Authentifizierung für SQL Server für Linux finden Sie in den Konfigurationsschritten.

Für den SQL Server PowerShell-Anbieter können Sie auch die SQL-Authentifizierung verwenden. Verwenden Sie hierzu das Cmdlet New-PSDrive, um ein neues PSDrive zu erstellen, und geben Sie die entsprechenden Anmeldeinformationen zum Herstellen einer Verbindung an.

Das folgende Beispiel zeigt, wie Sie unter Verwendung der SQL-Authentifizierung ein neues PSDrive erstellen.

# 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

Sie können überprüfen, ob das Laufwerk erstellt wurde, indem Sie das Cmdlet Get-PSDrive ausführen.

Get-PSDrive

Sobald Sie das neue PSDrive erstellt haben, können Sie damit beginnen, darin zu navigieren.

dir SQLonDocker:\Databases

Die Ausgabe kann wie folgt aussehen. Möglicherweise stellen Sie fest, dass die Ausgabe derjenigen ähnelt, die SSMS auf dem Datenbankknoten anzeigt. Es werden die Benutzerdatenbanken angezeigt, aber nicht die Systemdatenbanken.

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

Wenn Sie alle Datenbanken in Ihrer Instanz anzeigen müssen, bietet sich beispielsweise das Cmdlet Get-SqlDatabase an.

Abrufen von Datenbanken

Ein wichtiges Cmdlet, das Sie kennen müssen, ist Get-SqlDatabase. Bei vielen Vorgängen, die eine Datenbank oder Objekte in einer Datenbank einbeziehen, kann das Cmdlet Get-SqlDatabase verwendet werden. Wenn Sie Werte für den -ServerInstance-Parameter und den -Database-Parameter angeben, wird nur dieses Datenbankobjekt abgerufen. Wenn Sie jedoch nur den -ServerInstance-Parameter angeben, wird eine vollständige Liste aller Datenbanken in dieser Instanz zurückgegeben.

# 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

Hier sehen Sie ein Beispiel einer möglichen Rückgabe des oben genannten Get-SqlDatabase-Befehls:

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

Untersuchen von SQL Server-Fehlerprotokollen

In den folgenden Schritten wird PowerShell Core zum Untersuchen von Fehlerprotokollen zu Ihrer SQL Server-Instanz unter Linux verwendet.

Kopieren Sie die folgenden Befehle in die PowerShell-Eingabeaufforderung. Die Ausführung dieser Befehle kann einige Minuten dauern. Diese Befehle bewirken Folgendes:

  • Ein Dialogfeld wird angezeigt, das Sie auffordert, den Hostnamen oder die IP-Adresse Ihrer Instanz einzugeben.
  • Das Dialogfeld Bei PowerShell anmelden wird angezeigt, das Sie auffordert, die Anmeldeinformationen einzugeben. Sie können Ihren SQL-Benutzernamen und Ihr SQL-Kennwort verwenden, um eine Verbindung mit Ihrer SQL Server-Instanz unter Linux herzustellen.
  • Das Cmdlet Get-SqlErrorLog wird verwendet, um eine Verbindung mit der SQL Server-Instanz unter Linux herzustellen und die Fehlerprotokolle abzurufen, die seit gestern (Yesterday) aufgetreten sind.

Alternativ dazu können Sie die $serverInstance-Variable durch die IP-Adresse oder den Hostnamen Ihrer SQL Server-Instanz ersetzen.

# 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

Erkunden der zurzeit in PS Core verfügbaren Cmdlets

Für das SqlServer-Modul stehen derzeit 109 Cmdlets in Windows PowerShell zur Verfügung, davon sind aber nur 62 in PSCore verfügbar. Unten finden Sie eine vollständige Liste der derzeit verfügbaren 62 Cmdlets. Eine ausführliche Dokumentation aller Cmdlets im SqlServer-Modul finden Sie in der Cmdlet-Referenz zu SqlServer.

Der folgende Befehl zeigt alle Cmdlets an, die in der von Ihnen verwendeten PowerShell-Version verfügbar sind.

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

Weitere Informationen