Share via


Risoluzione dei problemi relativi alla distribuzione del mirroring del database

In questo argomento vengono fornite informazioni sulla risoluzione dei problemi relativi all'impostazione di una sessione di mirroring del database.

[!NOTA]

Assicurarsi che si stiano soddisfacendo tutti i prerequisiti per il mirroring del database.

Problema

Riepilogo

Account

Illustra i requisiti per la corretta configurazione degli account in cui viene eseguito SQL Server.

Endpoint

Illustra i requisiti per la corretta configurazione dell'endpoint di mirroring del database di ogni istanza del server.

Indirizzo di sistema

Riepiloga le alternative per la specifica del nome di sistema di un'istanza del server in una configurazione di mirroring del database.

Accesso alla rete

Documenta il requisito in base a cui ogni istanza del server deve essere in grado di accedere alle porte dell'altra istanza o delle altre istanze tramite 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

Descrive le attività da eseguire in seguito a un'operazione di creazione file non riuscita.

Avvio del mirroring (Transact-SQL)

Descrive l'ordine di esecuzione per le istruzioni ALTER DATABASE database_name SET PARTNER ='partner_server'.

Account

È necessario configurare correttamente gli account utilizzati per l'esecuzione di SQL Server.

  1. Autorizzazioni corrette per gli account

    1. Per ridurre l'eventualità di una configurazione non corretta, utilizzare account eseguiti negli stessi account di dominio.

    2. Se gli account vengono eseguiti in domini diversi oppure non sono account di dominio, è necessario che un account di accesso sia creato nel database master dell'altro computer e disponga delle autorizzazioni CONNECT per l'endpoint. Per ulteriori informazioni, vedere Gestione dei metadati quando si rende disponibile un database in un'altra istanza del server. Queste informazioni si riferiscono anche all'account Servizio di rete.

  2. Se SQL Server viene eseguito come servizio con l'account di sistema locale, è necessario utilizzare i certificati per l'autenticazione. Per ulteriori informazioni, vedere Utilizzo di certificati per il mirroring del database.

Endpoint

È necessario configurare correttamente gli endpoint.

  1. Verificare che per ogni istanza del server (server principale, server mirror e server di controllo del mirroring, se presente) sia disponibile un endpoint di mirroring del database. Per ulteriori informazioni, vedere sys.database_mirroring_endpoints (Transact-SQL) e, a seconda del metodo di autenticazione, Procedura: Creazione di un endpoint del mirroring per l'autenticazione Windows (Transact-SQL) o Procedura: Impostazione del mirroring del database per l'utilizzo di certificati per le connessioni in uscita (Transact-SQL).

  2. Verificare che i numeri di porta siano corretti.

    Per individuare la porta attualmente associata all'endpoint di mirroring del database per un'istanza del server, utilizzare l'istruzione Transact-SQL seguente:

    SELECT type_desc, port FROM sys.tcp_endpoints;
    GO
    
  3. Per i problemi di impostazione del mirroring del database che sono difficili diagnosticare, è consigliabile controllare ogni istanza del server per verificare che sia in attesa sulle porte corrette. Per informazioni sulla verifica della disponibilità delle porte, vedere MSSQLSERVER_1418.

  4. Verificare che gli endpoint siano stati avviati (STATE=STARTED). A tale scopo, utilizzare l'istruzione Transact-SQL seguente su ogni istanza del server:

    SELECT state_desc FROM sys.database_mirroring_endpoints
    

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

    Per avviare un endpoint, utilizzare l'istruzione Transact-SQL seguente:

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

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

  5. Verificare che ROLE sia corretto. A tale scopo, utilizzare l'istruzione Transact-SQL su ogni istanza del server.

    SELECT role FROM sys.database_mirroring_endpoints;
    GO
    

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

  6. Verificare che l'account di accesso dell'altro server disponga dell'autorizzazione CONNECT. Per individuare gli account che dispongono dell'autorizzazione CONNECT per un endpoint, utilizzare l'istruzione Transact-SQL seguente su ogni istanza del server:

    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

Quale nome di sistema di un'istanza del server in una configurazione di mirroring del database è possibile utilizzare qualsiasi nome che identifichi univocamente 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'utilizzo del nome di dominio completo è una soluzione efficace. Per ulteriori informazioni, vedere Impostazione di 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 o delle altre istanze tramite TCP. Questo requisito è particolarmente importante quando le istanze del server appartengono a domini diversi non trusted, il che limita buona parte delle comunicazioni tra le istanze del server.

Preparazione del database mirror

Sia che si avvii il mirroring per la prima volta o che lo si avvii nuovamente dopo averlo rimosso, verificare che il database mirror sia predisposto per il mirroring.

Quando si crea il database mirror sul server mirror, assicurarsi di ripristinare il backup del database principale specificando lo stesso nome di database con l'opzione WITH NORECOVERY. È inoltre necessario applicare tutti i backup di log creati dopo l'esecuzione di tale backup, sempre tramite WITH NORECOVERY.

Se possibile, è inoltre consigliabile che il percorso del database mirror, inclusa la lettera di unità, sia identico a quello del database principale. Se i layout dei file sono diversi, ad esempio se il database principale si trova sull'unità F:, ma tale unità non è presente nel sistema mirror, sarà necessario includere l'opzione MOVE nell'istruzione RESTORE.

Nota importanteImportante

Se durante la creazione del database mirror i file del database vengono spostati, potrebbe essere impossibile aggiungere successivamente file al database senza sospendere il mirroring.

Se il mirroring di database è stato interrotto, prima di poter riavviare il mirroring è necessario che tutti i backup di log successivi eseguiti sul database vengano applicati al database.

Per ulteriori informazioni, vedere Procedura: Preparazione di un database mirror per il mirroring (Transact-SQL).

Operazione di creazione file non riuscita

Per aggiungere un file senza conseguenze per la sessione di mirroring, è necessario che il percorso del file esista in entrambi i server. Pertanto, se durante la creazione del database mirror i file del database vengono spostati, potrebbe essere impossibile aggiungere successivamente file al database mirror senza sospendere il mirroring.

Per risolvere il problema:

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

  2. Il proprietario deve quindi eseguire il backup del log contenente l'operazione di aggiunta file nel server principale e ripristinare manualmente il backup del log nel database mirror utilizzando le opzioni WITH NORECOVERY e WITH MOVE. L'esecuzione di questa operazione consente di creare il percorso del file specificato nel server mirror e di ripristinare il nuovo file in tale percorso.

  3. Per preparare il database per una nuova sessione di mirroring, il proprietario deve inoltre ripristinare con l'opzione WITH NO RECOVERY tutti gli altri backup del log in sospeso dal server principale.

Per ulteriori informazioni, vedere Rimozione del mirroring del database, Procedura: Preparazione di un database mirror per il mirroring (Transact-SQL), Procedura: Stabilire una sessione di mirroring del database tramite autenticazione di Windows (Transact-SQL), Utilizzo di certificati per il mirroring del database o Procedura: Configurazione di una sessione di mirroring del database (SQL Server Management Studio).

Avvio del mirroring (Transact-SQL)

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

  1. La prima istruzione deve essere eseguita sul server mirror. Quando viene eseguita questa istruzione, il server mirror non tenta di contattare altre istanze del server e indica invece al database di attendere che il server mirror venga contattato dal server principale.

  2. La seconda istruzione ALTER DATABASE deve essere eseguita sul server principale e fa in modo che il server principale tenti di connettersi al server mirror. Dopo che è stata creata la connessione, il server mirror tenta di connettersi al server principale tramite un'altra connessione.

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

Messaggio di errore 1418

Questo messaggio di SQL Server indica che l'indirizzo di rete del server non è raggiungibile o non esiste, pertanto si consiglia di controllare il nome dell'indirizzo di rete e quindi eseguire nuovamente il comando. Per ulteriori informazioni, vedere MSSQLSERVER_1418.

Transazioni tra database

Quando viene eseguito il mirroring di un database in modalità a protezione elevata con failover automatico, un failover automatico può portare a una risoluzione automatica e talvolta errata delle transazioni in dubbio. Se si verifica un failover automatico su uno dei database mentre è stato eseguito il commit di una transazione tra database, possono verificarsi inconsistenze logiche tra i database.

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

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

  • Le transazioni che utilizzano Microsoft Distributed Transaction Coordinator (MS DTC).

Per ulteriori informazioni, vedere Mirroring del database e transazioni tra database.