Gérer SQL Server sur Linux avec PowerShell Core
S’applique à : SQL Server - Linux
Cet article présente SQL Server PowerShell et vous guide à travers quelques exemples de son utilisation avec PowerShell Core (PS Core) sur macOS et Linux. PowerShell Core est maintenant un projet Open Source sur GitHub.
Options de l'éditeur multiplateforme
Toutes les étapes suivantes pour PowerShell Core fonctionnent dans un terminal normal, ou vous pouvez les exécuter à partir d'un terminal dans Visual Studio Code ou Azure Data Studio. VS Code et Azure Data Studio sont disponibles sur macOS et Linux. Pour plus d’informations sur Azure Data Studio, consultez Démarrage rapide : Utiliser Azure Data Studio pour se connecter et interroger SQL Server. Vous pouvez également envisager d’utiliser la support de l'éditeur PowerShell pour Azure Data Studio.
Installez PowerShell Core.
Pour plus d'informations sur l'installation de PowerShell Core sur diverses plateformes prises en charge et expérimentales, consultez les articles suivants :
- Installation de PowerShell Core sur Windows
- Installation de PowerShell Core sur Linux
- Installation de PowerShell Core sur macOS
- Installation de PowerShell Core sur ARM
Installer le module SqlServer
Le module SqlServer
est géré dans la galerie PowerShell. Lorsque vous utilisez SQL Server, vous devez toujours utiliser la version la plus récente du module PowerShell SqlServer.
Pour installer le module SqlServer, ouvrez une session PowerShell Core et exécutez le code suivant :
Install-Module -Name SqlServer
Pour plus d'informations sur l'installation du module SqlServer à partir de PowerShell Gallery, consultez Installer le module SQL Server PowerShell.
Utiliser le module SqlServer
Commençons par lancer PowerShell Core. Si vous utilisez macOS ou Linux, ouvrez une session du terminal sur votre ordinateur, puis tapez pwsh
pour lancer une nouvelle session PowerShell Core. Sur Windows, utilise Win+R et tapez pwsh
pour lancer une nouvelle session PowerShell Core.
pwsh
SQL Server fournit un module PowerShell nommé SqlServer. Vous pouvez utiliser le module SqlServer pour importer les composants de SQL Server (fournisseur et cmdlets SQL Server) dans un environnement ou un script PowerShell.
Copiez et collez la commande suivante à l’invite PowerShell pour importer le module SqlServer dans votre session PowerShell actuelle :
Import-Module SqlServer
À l’invite de PowerShell, tapez la commande suivante pour vérifier que le module SqlServer a été correctement importé :
Get-Module -Name SqlServer
PowerShell doit afficher des informations similaires à la sortie suivante :
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 21.1.18102 SqlServer {Add-SqlAvailabilityDatabase, Add-SqlAvailabilityGroupList...
Se connecter à SQL Server et obtenir des informations sur le serveur
Les étapes suivantes utilisent PowerShell pour vous connecter à votre instance sur Linux et afficher plusieurs propriétés du serveur.
Copiez et collez les commandes suivantes à l’invite de PowerShell. Quand vous exécutez ces commandes, PowerShell :
- afficher une boîte de dialogue qui vous invite à entrer le nom d’hôte ou l’adresse IP de votre instance
- afficher la boîte de dialogue requête d’informations d’identification PowerShell, qui vous invite à entrer les informations d’identification. Vous pouvez utiliser votre nom d'utilisateur SQL et votre mot de passe SQL pour vous connecter à votre instance sur Linux
- Utilisez le cmdlet Get-SqlInstance pour vous connecter au Serveur et afficher quelques propriétés
Si vous le souhaitez, vous pouvez simplement remplacer la variable $serverInstance
par l’adresse IP ou le nom d’hôte de votre 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 doit afficher des informations similaires à la sortie suivante :
Instance Name Version ProductLevel UpdateLevel HostPlatform HostDistribution
------------- ------- ------------ ----------- ------------ ----------------
your_server_instance 14.0.3048 RTM CU13 Linux Ubuntu
Notes
Si rien ne s’affiche pour ces valeurs, la connexion à l’instance cible a probablement échoué. Assurez-vous que vous pouvez utiliser les mêmes informations de connexion pour vous connecter à partir de SQL Server Management Studio. Examinez ensuite les recommandations en matière de résolution des problèmes de connexion.
Utiliser le fournisseur SQL Server PowerShell
Une autre option pour se connecter à votre instance consiste à utiliser le Fournisseur SQL Server PowerShell. Ce fournisseur vous permet de naviguer dans l’instance comme si vous naviguiez dans l’arborescence dans l’Explorateur d’objets, mais a niveau de la cmdline. Par défaut, ce fournisseur est présenté sous la forme d’un PSDrive nommé SQLSERVER:\
que vous pouvez utiliser pour vous connecter et naviguer dans les instances auxquelles votre compte de domaine a accès. Consultez Étapes de configuration pour savoir comment configurer l’authentification Active Directory pour SQL Server sur Linux.
Vous pouvez également utiliser l’authentification SQL avec le fournisseur SQL Server PowerShell. Pour ce faire, utilisez la cmdlet New-PSDrive
pour créer un nouveau PSDrive et fournir les informations d’identification appropriées pour la connexion.
Dans l’exemple ci-dessous, vous verrez un exemple de création d’un nouveau PSDrive à l’aide de l’authentification 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
Vous pouvez vérifier que le lecteur a été créé en exécutant la cmdlet Get-PSDrive
.
Get-PSDrive
Une fois que vous avez créé votre nouveau PSDrive, vous pouvez commencer à le parcourir.
dir SQLonDocker:\Databases
Voici à quoi peut ressembler le résultat. Vous pouvez remarquer que ce résultat est similaire à ce que SSMS affiche dans le nœud Bases de données. Il affiche les bases de données utilisateur, mais pas les bases de données système.
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
Si vous avez besoin d’afficher toutes les bases de données sur votre instance, l’une des options consiste à utiliser la cmdlet Get-SqlDatabase
.
Obtenir des bases de données
Une cmdlet importante à connaître est Get-SqlDatabase
. Vous pouvez utiliser la cmdlet Get-SqlDatabase
dans de nombreuses opérations impliquant une base de données ou des objets d’une base de données. Si vous fournissez des valeurs pour les paramètres -ServerInstance
et -Database
, seul cet objet de base de données est récupéré. Cependant, si vous spécifiez uniquement le paramètre -ServerInstance
, une liste complète de toutes les bases de données de cette instance sera renvoyée.
# 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
Voici un échantillon de ce que la commande Get-SqlDatabase renvoie :
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
Examiner les journaux d'erreurs SQL Server
Les étapes suivantes utilisent PowerShell Core pour examiner les journaux d’erreurs se connecter à votre instance sur Linux.
Copiez et collez les commandes suivantes à l’invite de PowerShell. L’exécution peut prendre quelques minutes. Ces commandes effectuent les opérations suivantes :
- afficher une boîte de dialogue qui vous invite à entrer le nom d’hôte ou l’adresse IP de votre instance
- afficher la boîte de dialogue requête d’informations d’identification PowerShell, qui vous invite à entrer les informations d’identification. Vous pouvez utiliser votre nom d'utilisateur SQL et votre mot de passe SQL pour vous connecter à votre instance sur Linux
- Utilisez la cmdlet SqlErrorLog pour vous connecter à l’instance sur Linux et récupérer les journaux d’erreurs depuis Hier
Si vous le souhaitez, vous pouvez remplacer la variable $serverInstance
par l’adresse IP ou le nom d’hôte de votre 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
Explorer les cmdlets actuellement disponibles dans PowerShell Core
Même si le module SqlServer propose actuellement 109 applets de commande sur Windows PowerShell, seules 62 d’entre elles sont disponibles sur PSCore. Vous trouverez ci-dessous une liste complète des 62 cmdlets actuellement disponibles. Pour une documentation détaillée de tous les cmdlets du module SqlServer, voir la référence cmdlet SqlServer.
La commande suivante vous montrera tous les cmdlets disponibles sur la version PowerShell que vous utilisez.
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