Condividi tramite


Risolvere i problemi di configurazione del mirroring del database (SQL Server)

In questo argomento vengono fornite informazioni utili per risolvere i problemi relativi alla configurazione di una sessione di mirroring del database.

Annotazioni

Assicurarsi di soddisfare tutti i prerequisiti per il mirroring del database.

Problema Riassunto
Messaggio di errore 1418 Questo messaggio di SQL Server indica che l'indirizzo di rete del server non può essere raggiunto o non esiste e suggerisce di verificare il nome dell'indirizzo di rete e di eseguire nuovamente il comando. Per altre informazioni, vedere l'argomento MSSQLSERVER_1418 .
Account Vengono illustrati i requisiti per la configurazione corretta degli account in cui è in esecuzione SQL Server.
Endponti Vengono illustrati i requisiti per la configurazione corretta dell'endpoint del mirroring del database di ogni istanza del server.
SystemAddress Riepiloga le alternative per specificare il nome di sistema di un'istanza del server in una configurazione del mirroring del database.
Accesso alla rete Documenta il requisito che ogni istanza del server sia in grado di accedere alle porte dell'altra istanza del server o delle istanze su TCP.
Preparazione del database mirror Riepiloga i requisiti per la preparazione del database mirror per consentire l'avvio del mirroring.
Operazione di creazione file non riuscita Viene descritto come rispondere a un'operazione di creazione file non riuscita.
Avvio del mirroring tramite Transact-SQL Descrive l'ordine necessario degli istruzioni ALTER DATABASE database_name SET PARTNER ='partner_server'.
Transazioni tra database Un failover automatico potrebbe causare una risoluzione automatica e probabilmente errata delle transazioni in dubbio. Per questo motivo il mirroring del database non supporta le transazioni tra database.

Gli account

Gli account in cui è in esecuzione SQL Server devono essere configurati correttamente.

  1. Gli account dispongono delle autorizzazioni corrette?

    1. Se gli account sono in esecuzione negli stessi account di dominio, le probabilità di errori di configurazione vengono ridotte.

    2. Se gli account sono in esecuzione in domini diversi o non sono account di dominio, l'account di accesso di un account deve essere creato nel master nell'altro computer e a tale account di accesso devono essere concesse le autorizzazioni CONNECT per l'endpoint. Per altre informazioni, vedere Gestire i metadati quando si rende disponibile un database in un'altra istanza del server (SQL Server). Ciò include l'account del servizio di rete.

  2. Se SQL Server è in esecuzione come servizio che usa l'account di sistema locale, è necessario usare i certificati per l'autenticazione. Per ulteriori informazioni, vedere Usare i certificati per un endpoint di duplicazione del database (Transact-SQL).

Endpointi

Gli endpoint devono essere configurati correttamente.

  1. Assicurarsi che ogni istanza del server (server principale, server mirror e server di controllo, se presente) abbia un endpoint di mirroring del database. Per altre informazioni, vedere sys.database_mirroring_endpoints (Transact-SQL) e, a seconda della forma di autenticazione, creare un endpoint del mirroring del database per l'autenticazione di Windows (Transact-SQL) o Usare certificati per un endpoint del mirroring del database (Transact-SQL).

  2. Verificare che i numeri di porta siano corretti.

    Per identificare la porta attualmente associata a un endpoint del mirroring del database di un'istanza del server, utilizzare le viste catalogo sys.database_mirroring_endpoints e sys.tcp_endpoints.

  3. Per i problemi di configurazione del mirroring del database difficili da spiegare, è consigliabile esaminare ogni istanza del server per determinare se è in ascolto sulle porte corrette. Per informazioni sulla verifica della disponibilità delle porte, vedere MSSQLSERVER_1418.

  4. Verificare che gli endpoint siano avviati (STATE=STARTED). Usare la seguente istruzione Transact-SQL in ogni istanza del server.

    SELECT state_desc FROM sys.database_mirroring_endpoints  
    

    Per altre informazioni sulla colonna state_desc , vedere sys.database_mirroring_endpoints (Transact-SQL).

    Per avviare un endpoint, usare l'istruzione Transact-SQL seguente.

    ALTER ENDPOINT Endpoint_Mirroring   
    STATE = STARTED   
    AS TCP (LISTENER_PORT = <port_number>)  
    FOR database_mirroring (ROLE = ALL);  
    GO  
    

    Per altre informazioni, vedere ALTER ENDPOINT (Transact-SQL).

  5. Verificare che il RUOLO sia corretto. In ogni istanza del server usare l'istruzione Transact-SQL seguente.

    SELECT role FROM sys.database_mirroring_endpoints;  
    GO  
    

    Per altre informazioni, vedere sys.database_mirroring_endpoints (Transact-SQL).

  6. Le credenziali di accesso dell'account del servizio dalla istanza di un altro server richiedono l'autorizzazione CONNECT. Assicurarsi che l'account di accesso dall'altro server disponga dell'autorizzazione CONNECT. Per determinare chi dispone dell'autorizzazione CONNECT per un endpoint, in ogni istanza del server usare l'istruzione Transact-SQL seguente.

    SELECT 'Metadata Check';  
    SELECT EP.name, SP.STATE,   
       CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id))   
          AS GRANTOR,   
       SP.TYPE AS PERMISSION,  
       CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id))   
          AS GRANTEE   
       FROM sys.server_permissions SP , sys.endpoints EP  
       WHERE SP.major_id = EP.endpoint_id  
       ORDER BY Permission,grantor, grantee;   
    GO  
    
    

Indirizzo di sistema

Per il nome di sistema di un'istanza del server in una configurazione del mirroring del database, è possibile usare qualsiasi nome che identifichi in modo univoco il sistema. L'indirizzo del server può essere un nome di sistema (se i sistemi si trovano nello stesso dominio), un nome di dominio completo o un indirizzo IP (preferibilmente un indirizzo IP statico). L'uso del nome di dominio completamente qualificato garantisce il funzionamento. Per altre informazioni, vedere Specificare un indirizzo di rete del server - Mirroring del database.

Accesso alla rete

Ogni istanza del server deve essere in grado di accedere alle porte dell'altra istanza del server o delle istanze tramite TCP. Ciò è particolarmente importante se le istanze del server si trovano in domini diversi che non si considerano attendibili tra loro (domini non attendibili). Ciò limita gran parte della comunicazione tra le istanze del server.

Preparazione del database mirror

Sia che si stia avviando il mirroring per la prima volta o lo si stia riavviando dopo la sua rimozione, verificare che il database del mirror sia pronto per il mirroring.

Quando si crea il database mirror nel server mirror, assicurarsi di ripristinare il backup del database principale specificando lo stesso nome di database "WITH NORECOVERY". Inoltre, è necessario applicare anche tutti i backup del log creati dopo l'esecuzione di quel backup, e in questo caso, con NORECOVERY.

Inoltre, è consigliabile, se possibile, che il percorso del file (inclusa la lettera di unità) del database mirror sia identico al percorso del database principale. Se i percorsi dei file devono essere diversi, ad esempio se il database principale si trova nell'unità "F:", ma il sistema mirror non dispone di un'unità F: , è necessario includere l'opzione MOVE nell'istruzione RESTORE.

Importante

Se si spostano i file di database durante la creazione del database mirror, potrebbe non essere possibile aggiungere file al database in un secondo momento senza sospendere il mirroring.

Se il mirroring del database è stato arrestato, tutti i backup del log successivi eseguiti nel database principale devono essere applicati al database mirror prima del riavvio del mirroring.

Per altre informazioni, vedere Preparazione di un database mirror per il mirroring (SQL Server).

Operazione di Create-File non riuscita

L'aggiunta di un file senza alcun impatto su una sessione di mirroring richiede che il percorso del file esista in entrambi i server. Pertanto, se si spostano i file di database durante la creazione del database mirror, un'operazione successiva del file aggiuntivo potrebbe non riuscire nel database mirror e causare la sospensione del mirroring.

Per risolvere il problema:

  1. Il proprietario del database deve rimuovere la sessione di mirroring e ripristinare un backup completo del filegroup che contiene il file aggiunto.

  2. Il proprietario deve quindi eseguire il backup del log contenente l'operazione add-file nel server principale e ripristinare manualmente il backup del log nel database mirror usando le opzioni WITH NORECOVERY e WITH MOVE. In questo modo viene creato il percorso del file specificato nel server mirror e viene ripristinato il nuovo file in tale percorso.

  3. Per preparare il database per una nuova sessione di mirroring, il proprietario deve anche ripristinare SENZA RECUPERO qualsiasi altro backup del log rimanente dal server principale.

Per altre informazioni, vedere Rimozione del mirroring del database (SQL Server),Preparazione di un database mirror per il mirroring (SQL Server),Stabilire una sessione di mirroring del database usando l'autenticazione di Windows (Transact-SQL), Usare i certificati per un endpoint del mirroring del database (Transact-SQL)o stabilire una sessione di mirroring del database tramite l'autenticazione di Windows (SQL Server Management Studio).

Avvio del mirroring tramite Transact-SQL

L'ordine in cui vengono eseguite le istruzioni ALTER DATABASE database_name SET PARTNER ='partner_server' è molto importante.

  1. La prima istruzione deve essere eseguita nel server mirror. Quando viene eseguita questa istruzione, il server mirror non tenta di contattare altre istanze del server. Al contrario, il server mirror indica al database di attendere fino a quando il server mirror non è stato contattato dal server principale.

  2. La seconda istruzione ALTER DATABASE deve essere eseguita nel server principale. Questa istruzione fa sì che il server principale tenti di connettersi al server mirror. Dopo aver creato la connessione, il mirror tenta quindi di connettersi al server principale in un'altra connessione.

Per ulteriori informazioni, vedere ALTER DATABASE (Transact-SQL).

Transazioni tra database

Quando si esegue il mirroring di un database in modalità a sicurezza elevata con failover automatico, un failover automatico potrebbe causare una risoluzione automatica e probabilmente errata delle transazioni in dubbio. Se si verifica un failover automatico in entrambi i database mentre viene eseguito il commit di una transazione tra database, possono verificarsi incoerenze logiche tra i database.

I tipi di transazioni tra database che possono essere interessati da un failover automatico includono quanto segue:

  • Transazione che aggiorna più database nella stessa istanza di SQL Server.

  • Transazioni che usano Microsoft Distributed Transaction Coordinator (MS DTC).

Per altre informazioni, vedere Transazioni tra database non supportate per il mirroring del database o i gruppi di disponibilità AlwaysOn (SQL Server).

Vedere anche

Configurazione del mirroring del database (SQL Server)
Sicurezza del trasporto per il mirroring del database e i Gruppi di disponibilità AlwaysOn (SQL Server)