Gestire SQL Server in Linux con PowerShell Core
Si applica a: SQL Server - Linux
Questo articolo presenta SQL Server PowerShell e illustra alcuni esempi di come usarlo con PowerShell Core (PS Core) in macOS e Linux. PowerShell Core è ora un progetto open source in GitHub.
Opzioni dell'editor multipiattaforma
Tutti i passaggi seguenti di PowerShell Core funzionano in un terminale normale. In alternativa, è possibile eseguirli da un terminale all'interno di Visual Studio Code o di Azure Data Studio. Sia VS Code che Azure Data Studio sono disponibili in macOS e Linux. Per altre informazioni su Azure Data Studio, vedere Avvio rapido: Usare Azure Data Studio per connettersi ed eseguire query su SQL Server. È anche possibile prendere in considerazione l'uso del supporto dell'editor di PowerShell per Azure Data Studio.
Installare PowerShell Core
Per altre informazioni sull'installazione di PowerShell Core in varie piattaforme supportate e sperimentali, vedere gli articoli seguenti:
- Installazione di PowerShell Core in Windows
- Installazione di PowerShell Core in Linux
- Installazione di PowerShell Core in macOS
- Installazione di PowerShell Core in ARM
Installare il modulo SqlServer
Il modulo SqlServer
viene mantenuto in PowerShell Gallery. Quando si lavora con SQL Server, è consigliabile usare sempre la versione più recente del modulo di PowerShell SqlServer.
Per installare il modulo SqlServer, aprire una sessione di PowerShell Core ed eseguire il codice seguente:
Install-Module -Name SqlServer
Per altre informazioni su come installare il modulo SqlServer da PowerShell Gallery, vedere Installare il modulo SQL Server PowerShell.
Uso del modulo SqlServer
Avviare PowerShell Core. Se si usa macOS o Linux, aprire una sessione del terminale sul computer e digitare pwsh
per avviare una nuova sessione di PowerShell Core. In Windows usare Win+R e digitare pwsh
per avviare una nuova sessione di PowerShell Core.
pwsh
SQL Server fornisce un modulo di PowerShell denominato SqlServer. È possibile usare il modulo SqlServer per importare i componenti di SQL Server (provider e cmdlet di SQL Server) in un ambiente o uno script di PowerShell.
Copiare e incollare il comando seguente al prompt di PowerShell per importare il modulo SqlServer nella sessione di PowerShell corrente:
Import-Module SqlServer
Digitare il comando seguente al prompt di PowerShell per verificare che il modulo di SqlServer sia stato importato correttamente:
Get-Module -Name SqlServer
PowerShell dovrebbe visualizzare informazioni simili all'output seguente:
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 21.1.18102 SqlServer {Add-SqlAvailabilityDatabase, Add-SqlAvailabilityGroupList...
Connettersi a SQL Server e ottenere informazioni sul server
La procedura seguente usa PowerShell Core per connettersi all'istanza di SQL Server in Linux e visualizzare alcune proprietà del server.
Copiare e incollare i comandi seguenti al prompt di PowerShell. Quando si eseguono questi comandi, PowerShell effettua le operazioni seguenti:
- Visualizzano una finestra di dialogo in cui viene richiesto il nome host o l'indirizzo IP dell'istanza
- Visualizza la finestra di dialogo PowerShell credential request (Richiesta credenziali di PowerShell), in cui vengono richieste le credenziali. È possibile usare il nome utente SQL e la password SQL per connettersi all'istanza di SQL Server in Linux
- Usare il cmdlet Get-SqlInstance per connettersi al server e visualizzare alcune proprietà
Facoltativamente, è possibile sostituire la variabile $serverInstance
con l'indirizzo IP o il nome host dell'istanza di 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 dovrebbe visualizzare informazioni simili all'output seguente:
Instance Name Version ProductLevel UpdateLevel HostPlatform HostDistribution
------------- ------- ------------ ----------- ------------ ----------------
your_server_instance 14.0.3048 RTM CU13 Linux Ubuntu
Nota
Se non viene visualizzato nulla per questi valori, la connessione all'istanza di SQL Server di destinazione probabilmente non è riuscita. Verificare che sia possibile usare le stesse informazioni di connessione per connettersi da SQL Server Management Studio. Rivedere poi i consigli per la risoluzione dei problemi di connessione.
Utilizzare il provider di SQL Server PowerShell
Un'altra opzione per connettersi all'istanza di SQL Server prevede l'uso del provider SQL Server PowerShell. L'uso del provider consente di esplorare l'istanza di SQL Server come se si stesse esplorando la struttura ad albero in Esplora oggetti, ma nella riga di comando. Per impostazione predefinita, questo provider viene presentato come unità PSDrive denominata SQLSERVER:\
, che è possibile usare per connettersi alle istanze di SQL Server a cui l'account di dominio ha accesso ed esplorarle. Per informazioni su come configurare l'autenticazione di Active Directory per SQL Server in Linux, vedere Passaggi di configurazione.
È anche possibile usare l'autenticazione di SQL con il provider SQL Server PowerShell. A questo scopo, usare il cmdlet New-PSDrive
per creare una nuova unità PSDrive e immettere le credenziali appropriate per la connessione.
Nell'esempio seguente viene illustrato come creare una nuova unità PSDrive usando l'autenticazione di 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
Per verificare che l'unità sia stata creata, eseguire il cmdlet Get-PSDrive
.
Get-PSDrive
Dopo aver creato la nuova unità PSDrive, è possibile iniziare a esplorarla.
dir SQLonDocker:\Databases
L'output potrebbe essere simile al seguente. È possibile notare che questo output è simile a quello che viene visualizzato da SSMS nel nodo Databases. Visualizza i database utente, ma non i database di sistema.
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
Se è necessario visualizzare tutti i database dell'istanza, è possibile usare il cmdlet Get-SqlDatabase
.
Ottenere i database
Un cmdlet importante da conoscere è Get-SqlDatabase
. Per molte operazioni che coinvolgono un database o gli oggetti all'interno di un database, è possibile usare il cmdlet Get-SqlDatabase
. Se si specificano i valori per entrambi i parametri -ServerInstance
e -Database
, viene recuperato solo l'oggetto di database. Se tuttavia si specifica solo il parametro -ServerInstance
, verrà restituito un elenco completo di tutti i database di tale istanza.
# 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
Di seguito è riportato un esempio di output che potrebbe restituire il comando Get-SqlDatabase precedente:
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
Esaminare i log degli errori di SQL Server
La procedura seguente usa PowerShell Core per esaminare i log degli errori connettendosi all'istanza di SQL Server in Linux.
Copiare e incollare i comandi seguenti al prompt di PowerShell. L'esecuzione dei comandi potrebbe richiedere alcuni minuti. Questi comandi eseguono i passaggi seguenti:
- Visualizzano una finestra di dialogo in cui viene richiesto il nome host o l'indirizzo IP dell'istanza
- Visualizzano la finestra di dialogo PowerShell credential request (Richiesta credenziali di PowerShell), in cui vengono richieste le credenziali. È possibile usare il nome utente SQL e la password SQL per connettersi all'istanza di SQL Server in Linux
- Usare il cmdlet Get-SqlErrorLog per connettersi all'istanza di SQL Server in Linux e recuperare i log degli errori da ieri (Yesterday)
Facoltativamente, è possibile sostituire la variabile $serverInstance
con l'indirizzo IP o il nome host dell'istanza di 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
Esplorare i cmdlet attualmente disponibili in PowerShell Core
Nonostante il modulo SqlServer abbia attualmente 109 cmdlet disponibili in Windows PowerShell, in PSCore ne sono disponibili solo 62. Di seguito è riportato un elenco completo di 62 cmdlet attualmente disponibili. Per una documentazione dettagliata di tutti i cmdlet del modulo SqlServer, vedere le informazioni di riferimento sui cmdlet di SqlServer.
Il comando seguente consente di visualizzare tutti i cmdlet disponibili nella versione di PowerShell in uso.
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