ALTER DATABASE (Transact-SQL) Database Mirroring

Si applica a:SQL Server

Nota

Questa funzionalità verrà rimossa nelle versioni future di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Usare invece Gruppi di disponibilità Always On.

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à. È consentito solo un <database_mirroring_option> per dichiarazione 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 le ALTER DATABASE opzioni, vedi ALTER DATABASE. Per le ALTER DATABASE SET opzioni, vedi ALTER DATABASE SET Opzioni.

Convenzioni relative alla 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

Importante

Un SET comando PARTNER o SET WITNESS può completarsi con successo se inserito, ma fallire in seguito.

Nota

ALTER DATABASE Le opzioni di mirroring del database non sono disponibili per un database contenuto.

database_name è il 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 SET opzioni PARTNER possono essere impostate su entrambi i partner; altre sono limitate al server principale o al server mirror. Per ulteriori informazioni, vedere le descrizioni seguenti delle singole opzioni PARTNER. Una SET clausola PARTNER influisce su entrambe le copie del database, indipendentemente dal partner su cui è specificata.

Per eseguire un'istruzione SET PARTNER, è necessario impostare LO STATO degli endpoint di entrambi i partner su STARTED. Si noti inoltre che il ROLE punto finale di mirroring del database di ciascuna istanza server partner deve essere impostato su PARTNER o ALL. Per informazioni su come specificare un endpoint, vedere Creare un endpoint del mirroring del database per l'autenticazione Windows. Per informazioni sul ruolo e sullo stato dell'endpoint di mirroring del database per un'istanza del server, usare l'istruzione Transact-SQL seguente sull'istanza:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

<partner_option> ::=

Nota

È consentito un <solo partner_option> per clausola SET PARTNER.

'partner_server' Specifica l'indirizzo di rete del server di un'istanza di SQL Server per fungere 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. L'avvio di una sessione di mirroring del database richiede due ALTER DATABASEistruzionidatabaseSETPARTNER ='partner_server'. L'ordine con cui vengono specificate è significativo. Per prima cosa, collegati al server specchio e specifica l'istanza principale del server come partner_server (SET PARTNER ='principal_server'). In secondo luogo, collegarsi al server principale e specificare l'istanza del server mirror come partner_server (SET PARTNER ='mirror_server'); questo avvia una sessione di mirroring del database tra questi due partner. Per altre 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>:**<porta>

where

  • <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> è un numero di porta associato all'endpoint di mirroring dell'istanza del server partner.

Per altre informazioni, vedere Specificare un indirizzo di rete del server - Mirroring del database.

Il seguente esempio illustra la SET clausola PARTNER ='partner_server' :

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

Importante

Se una sessione viene impostata utilizzando l'istruzione ALTER DATABASE invece di SQL Server Management Studio, la sessione viene impostata di default su massima sicurezza delle transazioni (SAFETY è impostata su FULL) ed esegue in modalità ad alta sicurezza 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 usare master come contesto di database.

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 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.

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.

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 inmodalità 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 altre informazioni, vedere Quorum: Impatto di un server di controllo del mirroring sulla disponibilità del database - Mirroring 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.

Importante

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.

SUSPEND sospende una sessione di mirroring del database.

È possibile specificare l'opzione SUSPEND in qualsiasi partner.

TIMEOUT valore intero 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.

Importante

È consigliabile usare 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 altre informazioni, vedere Possibili errori durante il mirroring del database.

WITNESS <witness_option> Controlla le proprietà del database che definiscono un server di controllo di mirroring del database. Una SET clausola WITNESS riguarda entrambe le copie del database, ma puoi specificare SET WITNESS solo sul server principale. Se un server di controllo del mirroring è impostato per una sessione, è necessario che il quorum gestisca il database, indipendentemente dall'impostazione SAFETY; Per altre informazioni, vedere Quorum: Impatto di un server di controllo del mirroring sulla disponibilità del database - Mirroring 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, vedere Server di controllo del mirroring del database.

Per eseguire un'istruzione SET WITNESS, lo STATO degli endpoint sia delle istanze principale che di quelle server testimoni deve essere impostato su STARTED. Si noti inoltre che il ROLE punto finale di mirroring del database di un'istanza di server witness deve essere impostato su WITNESS o ALL. Per informazioni su come specificare 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, usare l'istruzione Transact-SQL seguente sull'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

È consentito solo un <witness_option> secondo SET la clausola del TESTIMONE.

'witness_server' Specifica un'istanza del motore di database per fungere da server di controllo del mirroring per una sessione di mirroring del database. Puoi specificare SET le dichiarazioni WITNESS solo sul server principale.

In una SET dichiarazione WITNESS ='witness_server' , la sintassi di witness_server è la stessa 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.

Osservazioni:

Esempi

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

Configurare il mirroring del database con un testimone richiede la configurazione della sicurezza e la preparazione del database mirror, oltre a usare ALTER DATABASE l'uso per impostare i 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 AdventureWorks2025, 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'AdventureWorks2022';
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 AdventureWorks2022 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'AdventureWorks2022';
    GO
    

Il valore corrente di mirroring_role_desc è ora Mirror.

Vedi anche