Sospendere un database di disponibilità (SQL Server)

Si applica a:SQL Server

È possibile sospendere un database di disponibilità in Gruppi di disponibilità Always On usando SQL Server Management Studio, Transact-SQL o PowerShell in SQL Server. Si noti che è necessario eseguire un comando di sospensione nell'istanza del server in cui viene ospitato il database da sospendere o riprendere.

L'effetto del comando di sospensione dipende dalla scelta di sospendere un database primario o secondario, come segue:

Database sospeso Effetto del comando di sospensione
Database secondario Viene sospeso solo il database secondario locale e il relativo stato di sincronizzazione diventa NOT SYNCHRONIZED. Gli altri database secondari non sono influenzati. Nel database sospeso non vengono più eseguite la ricezione e l'applicazione di dati (record di log) e viene persa la sincronizzazione con il database primario. Le connessioni esistenti nel database secondario leggibile rimangono utilizzabili. Non sono consentite nuove connessioni al database sospeso nel database secondario leggibile finché non viene ripreso lo spostamento di dati. Questo comportamento si applica solo quando le connessioni vengono aperte usando il listener e il routing di sola lettura.

Il database primario rimane disponibile. Se si sospende ogni database secondario corrispondente, il database primario viene eseguito senza mirroring.

** Importante ** Durante la fase di sospensione di un database secondario, nella coda di invio del database primario corrispondente verranno accumulati record del log delle transazioni non inviati. Tramite le connessioni alla replica secondaria vengono restituiti i dati disponibili quando lo spostamento di dati è stato sospeso.
Database primario Nel database primario viene arrestato lo spostamento di dati a ogni database secondario connesso. Il database primario rimane in esecuzione, in modalità senza mirroring. Il database primario rimane disponibile ai client e le connessioni esistenti in un database secondario leggibile rimangono utilizzabili ed è possibile effettuare nuove connessioni.

Nota

La sospensione di un database secondario Always On non incide direttamente sulla disponibilità del database primario. Tuttavia, la sospensione di un database secondario può avere un impatto sulle funzionalità di ridondanza e failover del database primario. Questo comportamento è diverso rispetto al mirroring del database, in cui lo stato del mirroring risulta sospeso sia sul database mirror che sul database principale. La sospensione di un database primario AlwaysOn comporta la sospensione dello spostamento di dati su tutti i corrispondenti database secondari e le funzionalità di ridondanza e failover cessano per tale database finché non viene ripreso il database primario.

Prima di iniziare

Limitazioni e restrizioni

Un comando SUSPEND viene restituito non appena è stato accettato dalla replica che ospita il database di destinazione, ma la sospensione effettiva del database avviene in modo asincrono.

Prerequisiti

È necessario essere connessi all'istanza del server che ospita il database che si desidera sospendere. Per sospendere un database primario e i database secondari corrispondenti, connettersi all'istanza del server che ospita la replica primaria. Per sospendere un database secondario lasciando disponibile il database primario, connettersi alla replica secondaria.

Consigli

Durante i colli di bottiglia, potrebbe essere utile sospendere brevemente uno o più database secondari per migliorare temporaneamente le prestazioni sulla replica primaria. Finché un database secondario rimane sospeso, il log delle transazioni del database primario corrispondente non può essere troncato. Per questo motivo, i record del log si accumulano sul database primario. È pertanto consigliabile riprendere o rimuovere rapidamente un database secondario sospeso. Per ulteriori informazioni, vedere Completamento: Come evitare il riempimento del log delle transazioni, più avanti in questo argomento.

Sicurezza

Autorizzazioni

È richiesta l'autorizzazione ALTER per il database.

Sono necessarie l'autorizzazione ALTER AVAILABILITY GROUP nel gruppo di disponibilità, l'autorizzazione CONTROL AVAILABILITY GROUP permission, l'autorizzazione ALTER ANY AVAILABILITY GROUP o l'autorizzazione CONTROL SERVER.

Utilizzo di SQL Server Management Studio

Per sospendere un database

  1. In Esplora oggetti connettersi all'istanza del server che ospita la replica di disponibilità in cui si desidera sospendere un database ed espandere l'albero del server. Per altre informazioni, vedere la sessione Prerequisitipiù indietro in questo argomento.

  2. Espandere il nodo Disponibilità elevata AlwaysOn e il nodo Gruppi di disponibilità.

  3. Espandere il gruppo di disponibilità.

  4. Espandere il nodo Database di disponibilità , fare clic con il pulsante destro del mouse sul database e scegliere Sospendi spostamento dati.

  5. Nella finestra di dialogo Sospendi spostamento dati fare clic su OK.

    In Esplora oggetti il database sospeso viene contrassegnato con l'icona di un indicatore di pausa.

Nota

Per sospendere database aggiuntivi in questo percorso di replica, ripetere i passaggi 4 e 5 per ogni database.

Utilizzo di Transact-SQL

Per sospendere un database

  1. Connettersi all'istanza del server che ospita la replica di cui si desidera sospendere il database. Per altre informazioni, vedere la sessione Prerequisitipiù indietro in questo argomento.

  2. Sospendere il database usando l'istruzione ALTER DATABASE seguente:

    ALTER DATABASE nome_database SET HADR SUSPEND;

Utilizzo di PowerShell

Per sospendere un database

  1. Passare alla directory (cd) dell'istanza del server che ospita la replica di cui si vuole sospendere il database. Per altre informazioni, vedere la sessione Prerequisitipiù indietro in questo argomento.

  2. Usare il cmdlet Suspend-SqlAvailabilityDatabase per sospendere il gruppo di disponibilità.

    Ad esempio, il seguente comando sospende la sincronizzazione dati per il database di disponibilità MyDb3 nel gruppo di disponibilità MyAg nell'istanza del server denominata Computer\Instance.

    Suspend-SqlAvailabilityDatabase `   
    -Path SQLSERVER:\Sql\Computer\Instance\AvailabilityGroups\MyAg\AvailabilityDatabases\MyDb3  
    

    Nota

    Per visualizzare la sintassi di un cmdlet, usare il cmdlet Get-Help nell'ambiente SQL Server PowerShell. Per altre informazioni, vedere Get Help SQL Server PowerShell.

Per impostare e utilizzare il provider PowerShell per SQL Server

Completamento: Come evitare il riempimento del log delle transazioni

In genere, quando su un database viene eseguito un checkpoint automatico, il relativo log delle transazioni viene troncato in corrispondenza di tale checkpoint dopo il successivo backup del log. Tuttavia, quando un database secondario viene sospeso, tutti i record del log correnti rimangono attivi sul database primario. Se il log delle transazioni si riempie, perché raggiunge le dimensioni massime o l'istanza del server esaurisce lo spazio, il database non può eseguire ulteriori aggiornamenti.

Per evitare il problema, effettuare una delle azioni seguenti:

Per risolvere i problemi di un log delle transazioni pieno

Attività correlate

Vedi anche

Panoramica di Gruppi di disponibilità AlwaysOn (SQL Server)
Riprendere un database di disponibilità (SQL Server)