Mirroring del database di ALTER DATABASE (Transact-SQL)

Controlla il mirroring del database per un database. I valori specificati per le opzioni di mirroring del database vengono applicati a entrambe le copie del database e alla sessione di mirroring del database nella sua globalità. È permesso solo un <database_mirroring_option> per istruzione ALTER DATABASE.

[!NOTA]

È consigliabile configurare il mirroring del database durante le fasce orarie di minore attività, dato che la configurazione può influire sulle prestazioni.

Per ulteriori informazioni sul mirroring del database, vedere Amministrazione del mirroring del database. Per altre opzioni relative a ALTER DATABASE, vedere ALTER DATABASE (Transact-SQL). Per altre opzioni relative a ALTER DATABASE SET, vedere Opzioni ALTER DATABASE SET (Transact-SQL).

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

ALTER DATABASE database_name 
SET { <partner_option> | <witness_option> }
    <partner_option> ::=
    PARTNER { = 'partner_server' 
            | FAILOVER 
            | FORCE_SERVICE_ALLOW_DATA_LOSS
            | OFF
            | RESUME 
            | SAFETY { FULL | OFF }
            | SUSPEND 
            | TIMEOUT integer
            }
    <witness_option> ::=
    WITNESS { = 'witness_server' 
            | OFF 
            }

Argomenti

Nota importanteImportante

È possibile che un comando SET PARTNER o SET WITNESS venga completato correttamente al momento dell'immissione, ma non riesca in un secondo momento.

  • database_name
    Nome del database da modificare.

  • PARTNER <partner_option>
    Controlla le proprietà del database che definiscono i partner di failover di una sessione di mirroring del database e il relativo comportamento. Alcune opzioni SET PARTNER possono essere impostate indifferentemente in uno dei partner. Altre sono supportate solo nel server principale o nel server mirror. Per ulteriori informazioni, vedere le descrizioni seguenti delle singole opzioni PARTNER. La clausola SET PARTNER influisce su entrambe le copie del database, indipendentemente dal partner in cui viene specificata.

    Per eseguire un'istruzione SET PARTNER, l'opzione STATE degli endpoint di entrambi i partner deve essere impostata su STARTED. Si noti, inoltre, che l'opzione ROLE dell'endpoint di mirroring del database di ogni istanza del server partner deve essere impostata su PARTNER o su ALL. Per informazioni sull'impostazione di un endpoint, vedere Procedura: Creazione di un endpoint del mirroring per l'autenticazione Windows (Transact-SQL). Per informazioni sul ruolo e sullo stato dell'endpoint di mirroring del database per un'istanza del server, utilizzare l'istruzione Transact-SQL seguente in tale istanza:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    

    <partner_option> ::=

    [!NOTA]

    È consentita una sola occorrenza di <partner_option> per ogni clausola SET PARTNER.

    • 'partner_server'
      Specifica l'indirizzo di rete del server di un'istanza di SQL Server che fungerà da partner di failover in una nuova sessione di mirroring del database. Ogni sessione deve includere due partner, uno avviato come server principale e l'altro come server mirror. È consigliabile che tali partner si trovino in computer diversi.

      Questa opzione viene specificata una sola volta per sessione in ogni partner. Per iniziare una sessione di mirroring del database sono necessarie due istruzioni ALTER DATABASE database SET PARTNER ='partner_server'. L'ordine con cui vengono specificate è significativo. Connettersi innanzitutto al server mirror e specificare l'istanza del server principale come partner_server (SET PARTNER ='principal_server'). Connettersi poi al server principale e specificare l'istanza del server mirror come partner_server (SET PARTNER ='mirror_server'). In questo modo viene avviata una sessione di mirroring del database tra i due partner. Per ulteriori informazioni, vedere Impostazione del mirroring del database.

      Il valore di partner_server è un indirizzo di rete del server. La sintassi è la seguente:

      TCP**://<system-address>:**<port>

      dove

      • <system-address> è una stringa, ad esempio un nome di sistema, un nome di dominio completo o un indirizzo IP, che identifica in modo univoco il computer di destinazione.

      • <port> è il numero di porta associato all'endpoint del mirroring dell'istanza del server partner.

      Per ulteriori informazioni, vedere Impostazione di un indirizzo di rete del server (mirroring del database).

      Nell'esempio seguente viene illustrata la clausola SET PARTNER ='partner_server':

      'TCP://MYSERVER.mydomain.Adventure-Works.com:7777'
      
      Nota importanteImportante

      Se una sessione viene configurata tramite l'istruzione ALTER DATABASE anziché con SQL Server Management Studio, per la sessione viene specificato per impostazione predefinita il livello di protezione completo delle transazioni (opzione SAFETY impostata su FULL) e tale sessione viene eseguita in modalità a protezione elevata senza failover automatico. Per consentire il failover automatico, configurare un server di controllo del mirroring. Per l'esecuzione in modalità a prestazioni elevate, disattivare la protezione delle transazioni (opzione SAFETY impostata su OFF).

    • FAILOVER
      Esegue manualmente il failover del server principale nel server mirror. È possibile specificare l'opzione FAILOVER solo nel server principale. Questa opzione è valida solo con l'impostazione FULL per SAFETY (impostazione predefinita).

      Per l'opzione FAILOVER è necessario utilizzare il database master come contesto di database.

      Per ulteriori informazioni, vedere Failover manuale.

    • FORCE_SERVICE_ALLOW_DATA_LOSS
      Forza il servizio di database nel database mirror in seguito a errori del server principale con il database in stato non sincronizzato o in stato sincronizzato, quando il failover automatico non si verifica.

      È consigliabile forzare il servizio solo se il server principale non è più in esecuzione. In caso contrario, alcuni client potrebbero continuare ad accedere al database principale originale anziché al nuovo database principale.

      FORCE_SERVICE_ALLOW_DATA_LOSS è disponibile solo nel server mirror ed esclusivamente quando sono valide tutte le condizioni seguenti:

      • Il server principale non è disponibile.

      • L'opzione WITNESS è impostata su OFF o il server di controllo del mirroring è connesso al server mirror.

      Forzare il servizio solo se il rischio di perdita parziale dei dati è accettabile al fine di ripristinare immediatamente il database. Per informazioni sulle alternative disponibili per evitare di forzare il servizio, vedere Mirroring asincrono del database (modalità a prestazioni elevate).

      Quando si forza il servizio, la sessione viene sospesa mantenendo temporaneamente tutti i dati nel database principale originale. Dopo che il server principale originale viene attivato ed è in grado di comunicare con il nuovo server principale, l'amministratore del database può ripristinare il servizio. Alla ripresa della sessione, tutti i record di log non inviati e gli aggiornamenti corrispondenti vengono persi.

      Per ulteriori informazioni sui rischi derivanti dalla forzatura del servizio, vedere Servizio forzato (con possibile perdita di dati).

    • OFF
      Rimuove una sessione di mirroring del database e rimuove il mirroring dal database. È possibile specificare l'opzione OFF in qualsiasi partner. Per informazioni sull'impatto della rimozione del mirroring, vedere Rimozione del mirroring del database.

    • RESUME
      Riprende una sessione di mirroring del database sospesa. È possibile specificare l'opzione RESUME solo nel server principale.

    • SAFETY { FULL | OFF }
      Imposta il livello di protezione delle transazioni. È possibile specificare l'opzione SAFETY solo nel server principale.

      Il valore predefinito è FULL. Con la protezione completa, la sessione di mirroring del database viene eseguita in modo sincrono, ovvero in modalità a protezione elevata. Se l'opzione SAFETY è impostata su OFF, la sessione di mirroring del database viene eseguita in modo asincrono, ovvero in modalità a prestazioni elevate.

      Il comportamento della modalità a protezione elevata dipende in parte dal server di controllo del mirroring, come indicato di seguito:

      • Se la protezione è impostata su FULL e per la sessione è impostato un server di controllo del mirroring, la sessione viene eseguita in modalità a protezione elevata con failover automatico. Quando il server principale non è più disponibile, viene eseguito il failover automatico della sessione se il database è sincronizzato e se l'istanza del server mirror e il server di controllo del mirroring sono ancora connessi tra loro, ovvero se dispongono di un quorum. Per ulteriori informazioni, vedere Quorum: Impatto di un server di controllo del mirroring sulla disponibilità del database.

        Se per la sessione è impostato un server di controllo del mirroring ma quest'ultimo è disconnesso, in caso di interruzione del server mirror il server principale si arresta.

      • Se la protezione è impostata su FULL e il server di controllo del mirroring è impostato su OFF, la sessione viene eseguita in modalità a protezione elevata senza failover automatico. Un eventuale arresto dell'istanza del server mirror non influisce sul server principale. Se l'istanza del server principale si arresta, è possibile forzare il servizio nell'istanza del server mirror, con una possibile perdita di dati.

      Se l'opzione SAFETY è impostata su OFF, la sessione viene eseguita in modalità a prestazioni elevate, in cui non sono supportati né il failover automatico né quello manuale . I problemi del server mirror, tuttavia, non influiscono sul server principale. Se l'istanza del server principale si arresta e l'opzione WITNESS è impostata su OFF o il server di controllo del mirroring è connesso al server mirror, è possibile, se necessario, forzare il servizio nell'istanza del server mirror, con una possibile perdita di dati. Per ulteriori informazioni sulla forzatura del servizio, vedere "FORCE_SERVICE_ALLOW_DATA_LOSS" più indietro in questa sezione.

      Nota importanteImportante

      La modalità a prestazioni elevate non prevede l'utilizzo di un server di controllo del mirroring. Ogni volta che l'opzione SAFETY viene impostata su OFF, è tuttavia consigliabile verificare che l'opzione WITNESS sia impostata su OFF.

      Per ulteriori informazioni, vedere Impostazioni di Transact-SQL e modalità operative del mirroring del database.

    • SUSPEND
      Sospende una sessione di mirroring del database.

      È possibile specificare l'opzione SUSPEND in qualsiasi partner.

    • TIMEOUT integer
      Specifica il periodo di timeout in secondi. Il periodo di timeout indica l'intervallo di attesa massimo rispettato dall'istanza del server per la ricezione di un messaggio PING da un'altra istanza nella sessione di mirroring, prima che l'altra istanza venga considerata disconnessa.

      È possibile specificare l'opzione TIMEOUT solo nel server principale. Se non si specifica questa opzione, il periodo di timeout predefinito è di 10 secondi. Se si specifica un valore maggiore o uguale a 5, il periodo di timeout viene impostato sul numero di secondi specificato. Se si specifica un valore di timeout compreso tra 0 e 4 secondi, l'intervallo viene impostato automaticamente su 5 secondi.

      Nota importanteImportante

      È consigliabile utilizzare un periodo di timeout di almeno 10 secondi. Con un valore inferiore a 10 secondi, può verificarsi un sovraccarico del sistema, con perdita di PING e generazione di falsi errori.

      Per ulteriori informazioni, vedere Possibili errori durante il mirroring del database.

  • WITNESS <witness_option>
    Controlla le proprietà del database che definiscono un server di controllo del mirroring del database. La clausola SET WITNESS influisce su entrambe le copie del database, ma è possibile specificare SET WITNESS solo nel server principale. Se per una sessione è impostato un server di controllo del mirroring, per l'utilizzo del database è necessaria una relazione di quorum, indipendentemente dall'impostazione di SAFETY. Per ulteriori informazioni, vedere Quorum: Impatto di un server di controllo del mirroring sulla disponibilità del database.

    È consigliabile che il server di controllo del mirroring e i partner di failover si trovino in computer diversi. Per informazioni sul server di controllo del mirroring, vedere Server di controllo del mirroring del database. Per informazioni sul failover automatico, vedere Failover automatico.

    Per eseguire un'istruzione SET WITNESS, l'opzione STATE degli endpoint deve essere impostata su STARTED sia nell'istanza del server principale che nell'istanza del server di controllo del mirroring. Si noti, inoltre, che l'opzione ROLE dell'endpoint di mirroring del database di un'istanza del server di controllo del mirroring deve essere impostata su WITNESS o su ALL. Per informazioni sull'impostazione di un endpoint, vedere Endpoint del mirroring del database.

    Per informazioni sul ruolo e sullo stato dell'endpoint di mirroring del database per un'istanza del server, utilizzare l'istruzione Transact-SQL seguente in tale istanza:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    

    [!NOTA]

    Non è possibile impostare le proprietà del database nel server di controllo del mirroring.

    <witness_option> ::=

    [!NOTA]

    È consentita una sola occorrenza di <witness_option> per ogni clausola SET WITNESS.

    • 'witness_server'
      Specifica un'istanza del Motore di database da utilizzare come server di controllo del mirroring per una sessione di mirroring del database. È possibile specificare istruzioni SET WITNESS solo nel server principale.

      In un'istruzione SET WITNESS ='witness_server' la sintassi di witness_server è uguale alla sintassi di partner_server.

    • OFF
      Rimuove il server di controllo del mirroring da una sessione di mirroring del database. L'impostazione del server di controllo del mirroring su OFF disabilita il failover automatico. Se per il database l'opzione SAFETY è impostata su FULL e il server di controllo del mirroring è impostato su OFF, in caso di errore nel server mirror, il server principale rende il database non disponibile.

Esempi

A. Creazione di una sessione di mirroring del database con un server di controllo del mirroring

Per configurare il mirroring del database con un server di controllo del mirroring, è necessario configurare la protezione e preparare il database mirror, nonché utilizzare l'istruzione ALTER DATABASE per l'impostazione dei partner. Per un esempio del processo di configurazione completo, vedere Impostazione del mirroring del database.

B. Failover manuale di una sessione di mirroring del database

È possibile avviare il failover manuale da qualsiasi partner di mirroring del database. Prima di eseguire il failover, è necessario verificare che il server che si ritiene essere il server principale corrente, sia effettivamente il server principale. Nel caso del database AdventureWorks, ad esempio, eseguire la query seguente nell'istanza del server che si ritiene essere il server principale corrente:

SELECT db.name, m.mirroring_role_desc 
FROM sys.database_mirroring m 
JOIN sys.databases db
ON db.database_id = m.database_id
WHERE db.name = N'AdventureWorks'; 
GO

Se l'istanza del server in oggetto è effettivamente il server principale, il valore di mirroring_role_desc è Principal. Se questa istanza del server fosse invece il server mirror, l'istruzione SELECT restituirebbe Mirror.

Nell'esempio seguente si presuppone che il server sia il server principale corrente.

  1. Eseguire il failover manuale nel partner di mirroring del database:

    ALTER DATABASE AdventureWorks SET PARTNER FAILOVER;
    GO
    
  2. Per verificare i risultati del failover nel nuovo server mirror, eseguire la query seguente:

    SELECT db.name, m.mirroring_role_desc 
    FROM sys.database_mirroring m 
    JOIN sys.databases db
    ON db.database_id = m.database_id
    WHERE db.name = N'AdventureWorks'; 
    GO
    

    Il valore corrente di mirroring_role_desc è ora Mirror.