Condividi tramite


Usare PowerShell in Linux per gestire SQL Server in Linux

Si applica a:SQL Server - Linux

Questo articolo presenta SQL Server PowerShell e illustra alcuni esempi su come usarlo con PowerShell in macOS e Linux. PowerShell è ora un progetto open source in GitHub.

Per altre informazioni su Windows PowerShell, vedere Che cos'è Windows PowerShell?

Opzioni dell'editor multipiattaforma

Tutti i passaggi seguenti per PowerShell funzionano in un normale terminale oppure è possibile eseguirli da un terminale all'interno di Visual Studio Code o 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 consigliabile usare il supporto dell'editor di PowerShell per Azure Data Studio.

Installare PowerShell

Per altre informazioni sull'installazione di PowerShell in varie piattaforme supportate e sperimentali, vedere gli articoli seguenti:

Installare il modulo SqlServer

Il modulo SqlServer viene mantenuto in PowerShell Gallery. Quando si usa SQL Server, è consigliabile usare sempre la versione più recente del SqlServer modulo PowerShell.

Per installare il SqlServer modulo, aprire una sessione di PowerShell ed eseguire il codice seguente:

Install-Module -Name SqlServer

Per altre informazioni su come installare il SqlServer modulo da PowerShell Gallery, vedere Installare il modulo PowerShell di SQL Server.

Uso del modulo SqlServer

Per iniziare, avviare PowerShell. Se si usa macOS o Linux, aprire una sessione del terminale nel computer e digitare pwsh per avviare una nuova sessione di PowerShell. In Windows usare Win+R e digitare pwsh per avviare una nuova sessione di PowerShell.

pwsh

SQL Server fornisce un modulo di PowerShell denominato SqlServer. È possibile usare il SqlServer modulo 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 SqlServer modulo nella sessione di PowerShell corrente:

Import-Module SqlServer

Digitare il comando seguente al prompt di PowerShell per verificare che il SqlServer modulo 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 per connettersi all'istanza di SQL Server in Linux e visualizzare un paio di 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 Get-SqlInstance cmdlet per connettersi a 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 tale scopo, usare il New-PSDrive cmdlet per creare un nuovo PSDrive e specificare 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 visualizzato da SQL Server Management Studio (SSMS) nel nodo Database. 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 ciò che il comando Get-SqlDatabase restituisce:

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 utilizza PowerShell per esaminare i log degli errori nella tua istanza di SQL Server su 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 Get-SqlErrorLog cmdlet per connettersi all'istanza di SQL Server su Linux e recuperare i log degli errori dal 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

Sebbene il modulo SqlServer disponga attualmente di 109 cmdlet disponibili in Windows PowerShell, in PowerShell sono disponibili solo 62 dei 109. 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-Object 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
  • Interrompi-SqlAvailabilityDatabase (comando per sospendere la disponibilità del database SQL)
  • GruppoDiDisponibilitàSqlNuovo
  • Set-SqlAvailabilityGroup
  • Remove-SqlAvailabilityGroup
  • Switch-SqlAvailabilityGroup
  • Join-SqlAvailabilityGroup
  • Revoke-SqlAvailabilityGroupCreateAnyDatabase
  • Grant-SqlAvailabilityGroupCreateAnyDatabase
  • New-SqlAvailabilityGroupListener
  • Set-SqlAvailabilityGroupListener
  • Aggiungi-SqlDisponibilitàGruppoListenerIpStatico
  • Set-SqlAvailabilityReplica
  • Remove-SqlAvailabilityReplica
  • New-SqlAvailabilityReplica
  • Set-SqlAvailabilityReplicaRoleToSecondary (Imposta il ruolo della replica di disponibilità SQL su secondario)
  • 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
  • Comando Set-SqlHADREndpoint (configura un endpoint SQL per l'HADR)
  • Get-SqlInstance
  • Add-SqlLogin
  • Remove-SqlLogin
  • Get-SqlLogin
  • Set-SqlSmartAdmin
  • Get-SqlSmartAdmin
  • Read-SqlTableData
  • Write-SqlTableData
  • Read-SqlViewData
  • Read-SqlXEvent
  • Convert-UrnToPath