Risolvere i problemi relativi alla configurazione del mirroring del database (SQL Server)Troubleshoot Database Mirroring Configuration (SQL Server)

In questo argomento vengono fornite informazioni sulla risoluzione dei problemi relativi all'impostazione di una sessione di mirroring del database.This topic provides information to help you troubleshoot problems in setting up a database mirroring session.

Nota

Assicurarsi che vengano soddisfatti tutti i prerequisiti per il mirroring del database.Ensure that you are meeting all the prerequisites for database mirroring.

ProblemaIssue RiepilogoSummary
Messaggio di errore 1418Error Message 1418 Questo messaggio di SQL ServerSQL 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.This SQL ServerSQL Server message indicates that the server network address cannot be reached or does not exist, and it suggests that you verify the network address name and reissue the command.
AccountsAccounts Illustra i requisiti per la corretta configurazione degli account in cui viene eseguito SQL ServerSQL Server .Discusses requirements for correctly configuring the accounts under which SQL ServerSQL Server is running.
EndpointEndpoints Illustra i requisiti per la corretta configurazione dell'endpoint di mirroring del database di ogni istanza del server.Discusses requirements for correctly configuring the database mirroring endpoint of each server instance.
SystemAddressSystemAddress Riepiloga le alternative per la specifica del nome di sistema di un'istanza del server in una configurazione di mirroring del database.Summarizes the alternatives for specifying the system name of a server instance in a database mirroring configuration.
Accesso alla reteNetwork access 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.Documents the requirement that each the server instance be able to access the ports of the other server instance or instances over TCP.
Preparazione del database mirrorMirror database preparation Riepiloga i requisiti per la preparazione del database mirror per consentire l'avvio del mirroring.Summarizes the requirements for preparing the mirror database to enable mirroring to start.
Operazione di creazione file non riuscitaFailed create-file operation Descrive le attività da eseguire in seguito a un'operazione di creazione file non riuscita.Describes how to respond to a failed create-file operation.
Avvio del mirroring mediante Transact-SQLStarting mirroring by Using Transact-SQL Descrive l'ordine richiesto per le istruzioni ALTER DATABASE _database SET PARTNER ='_partner' .Describes the required order for ALTER DATABASE database_name SET PARTNER ='partner_server' statements.
Transazioni tra databaseCross-Database Transactions Un failover automatico può portare a una risoluzione automatica e talvolta errata delle transazioni in dubbio.An automatic failover could lead to automatic and possibly incorrect resolution of in-doubt transactions. Per questo motivo, il mirroring del database non supporta transazioni tra database.For this reason database mirroring does not support cross-database transactions.

Accounts Accounts

È necessario configurare correttamente gli account utilizzati per l'esecuzione di SQL ServerSQL Server .The accounts under which SQL ServerSQL Server is running must be correctly configured.

  1. Autorizzazioni corrette per gli accountDo the accounts have the correct permissions?

    1. Per ridurre l'eventualità di una configurazione non corretta, utilizzare account eseguiti negli stessi account di dominio.If the accounts are running in the same domain accounts, the chances of misconfiguration are reduced.

    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.If the accounts are running in different domains or are not domain accounts, the login of one account must be created in master on the other computer, and that login must be granted CONNECT permissions on the endpoint. Per altre informazioni, vedere Gestire i metadati quando si rende disponibile un database in un'altra istanza del server (SQL Server).For more information, see Manage Metadata When Making a Database Available on Another Server Instance (SQL Server). Queste informazioni si riferiscono anche all'account Servizio di rete.This includes the Network Service account.

  2. Se SQL ServerSQL Server viene eseguito come servizio con l'account di sistema locale, è necessario utilizzare i certificati per l'autenticazione.If SQL ServerSQL Server is running as a service that is using the local system account, you must use certificates for authentication. Per ulteriori informazioni, vedere Utilizzare certificati per un endpoint del mirroring del database (Transact-SQL).For more information, see Use Certificates for a Database Mirroring Endpoint (Transact-SQL).

Endpoint Endpoints

È necessario configurare correttamente gli endpoint.Endpoints must be correctly configured.

  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.Make sure that each server instance (the principal server, mirror server, and witness, if any) has a database mirroring endpoint. 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 Windows (Transact-SQL) oppure Usare certificati per un endpoint del mirroring del database (Transact-SQL).For more information, see sys.database_mirroring_endpoints (Transact-SQL) and, depending on the form of authentication, either Create a Database Mirroring Endpoint for Windows Authentication (Transact-SQL) or Use Certificates for a Database Mirroring Endpoint (Transact-SQL).

  2. Verificare che i numeri di porta siano corretti.Check that the port numbers are correct.

    Per trovare la porta attualmente associata all'endpoint del mirroring del database per un'istanza del server, usare le viste del catalogo sys.database_mirroring_endpoints e sys.tcp_endpoints .To identify the port currently associated with database mirroring endpoint of a server instance, use the sys.database_mirroring_endpoints and sys.tcp_endpoints catalog views.

  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.For database mirroring setup issues that are difficult to explain, we recommend that you inspect each server instance to determine whether it is listening on the correct ports.

  4. Verificare che gli endpoint siano stati avviati (STATE=STARTED).Make sure that the endpoints are started (STATE=STARTED). A tale scopo, utilizzare l'istruzione Transact-SQLTransact-SQL seguente su ogni istanza del server:On each server instance, use the following Transact-SQLTransact-SQL statement.

    SELECT state_desc FROM sys.database_mirroring_endpoints  
    

    Per altre informazioni sulla colonna state_desc, vedere sys.database_mirroring_endpoints (Transact-SQL).For more information about the state_desc column, see sys.database_mirroring_endpoints (Transact-SQL).

    Per avviare un endpoint, utilizzare l'istruzione Transact-SQLTransact-SQL seguente:To start an endpoint, use the following Transact-SQLTransact-SQL statement.

    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).For more information, see ALTER ENDPOINT (Transact-SQL).

  5. Verificare che ROLE sia corretto.Check that the ROLE is correct. A tale scopo, utilizzare l'istruzione Transact-SQLTransact-SQL su ogni istanza del server.On each server instance use the following Transact-SQLTransact-SQL statement.

    SELECT role FROM sys.database_mirroring_endpoints;  
    GO  
    

    Per altre informazioni, vedere sys.database_mirroring_endpoints (Transact-SQL).For more information, see sys.database_mirroring_endpoints (Transact-SQL).

  6. Per l'account di accesso per l'account del servizio dell'altra istanza del server è richiesta l'autorizzazione CONNECT.The login for the service account from the other server instance requires CONNECT permission. Verificare che l'account di accesso dell'altro server disponga dell'autorizzazione CONNECT.Make sure that the login from the other server has CONNECT permission. Per individuare gli account che dispongono dell'autorizzazione CONNECT per un endpoint, utilizzare l'istruzione Transact-SQLTransact-SQL seguente su ogni istanza del server:To determine who has CONNECT permission for an endpoint, on each server instance use the following Transact-SQLTransact-SQL statement.

    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 System Address

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.For the system name of a server instance in a database mirroring configuration, you can use any name that unambiguously identifies the system. 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).The server address can be a system name (if the systems are in the same domain), a fully qualified domain name, or an IP address (preferably, a static IP address). L'utilizzo del nome di dominio completo è una soluzione efficace.Using the fully qualified domain name is guaranteed to work. Per altre informazioni, vedere Specificare un indirizzo di rete del server (Mirroring del database).For more information, see Specify a Server Network Address (Database Mirroring).

Network Access Network Access

Ogni istanza del server deve essere in grado di accedere alle porte dell'altra istanza o delle altre istanze tramite TCP.Each server instance must be able to access the ports of the other server instance or instances over TCP. Questo requisito è particolarmente importante quando le istanze del server appartengono a domini diversi non trusted.This is especially important if the server instances are in different domains that do not trust each other (untrusted domains). il che limita buona parte delle comunicazioni tra le istanze del server.This restricts much of the communication between the server instances.

Mirror Database Preparation Mirror Database Preparation

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.Whether starting mirroring for the first time or starting it again after mirroring was removed, verify that the mirror database is prepared for 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.When you create the mirror database on the mirror server, make sure that you restore the backup of the principal database specifying the same database name WITH NORECOVERY. È inoltre necessario applicare tutti i backup di log creati dopo l'esecuzione di tale backup, sempre tramite WITH NORECOVERY.Also, all log backups created after that backup was taken must also be applied, again WITH NORECOVERY.

Se possibile, è inoltre consigliabile che il percorso del database mirror, inclusa la lettera di unità, sia identico a quello del database principale.Also, we recommend that, if it is possible, the file path (including the drive letter) of the mirror database be identical to the path of the principal database. Se i percorsi dei file sono diversi, ad esempio il database principale è disponibile nell'unità F: e tale unità non è presente nel database mirror, è necessario includere l'opzione MOVE nell'istruzione RESTORE.If the file paths must differ, for example, if the principal database is on drive 'F:' but the mirror system lacks an F: drive, you must include the MOVE option in the RESTORE statement.

Importante

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.If you move the database files when you are creating the mirror database, you might be unable to add files to the database later without mirroring being suspended.

Se il mirroring di database è stato arrestato, prima di poter riavviare il mirroring è necessario che tutti i backup di log successivi eseguiti sul database vengano applicati al database.If database mirroring has been stopped, all subsequent log backups taken on the principal database must be applied to the mirror database before mirroring can be restarted.

Per altre informazioni, vedere Preparazione di un database mirror per il mirroring (SQL Server).For more information, see Prepare a Mirror Database for Mirroring (SQL Server).

Failed Create-File Operation Failed Create-File Operation

Per aggiungere un file senza conseguenze per la sessione di mirroring, è necessario che il percorso del file esista in entrambi i server.Adding a file without impacting a mirroring session requires that the path of the file exist on both servers. 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.Therefore, if you move the database files when creating the mirror database, a later add-file operation might fail on the mirror database and cause mirroring to be suspended.

Per risolvere il problema:To fix the problem:

  1. Il proprietario del database deve rimuovere la sessione di mirroring e deve ripristinare un backup completo del filegroup contenente il file aggiunto.The database owner must remove the mirroring session and restore a full backup of the filegroup that contains the added file.

  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.The owner must then back up the log containing the add-file operation on the principal server and manually restore the log backup on the mirror database using the WITH NORECOVERY and WITH MOVE options. 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.Doing this creates the specified file path on the mirror server and restores the new file to that location.

  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.To prepare the database for a new mirroring session, the owner must also restore WITH NO RECOVERY any other outstanding log backups from the principal server.

    Per altre informazioni, vedere Rimozione del mirroring del database (SQL Server), Preparare un database mirror per il mirroring (SQL Server), Stabilire una sessione di mirroring del database tramite autenticazione di Windows (Transact-SQL), Usare certificati per un endpoint del mirroring del database (Transact-SQL) oppure Stabilire una sessione di mirroring del database tramite autenticazione di Windows (SQL Server Management Studio).For more information, see Removing Database Mirroring (SQL Server), Prepare a Mirror Database for Mirroring (SQL Server), Establish a Database Mirroring Session Using Windows Authentication (Transact-SQL), Use Certificates for a Database Mirroring Endpoint (Transact-SQL), or Establish a Database Mirroring Session Using Windows Authentication (SQL Server Management Studio).

Avvio del mirroring mediante Transact-SQL Starting mirroring by Using Transact-SQL

L'ordine con cui vengono rilasciate le istruzioni ALTER DATABASE _database SET PARTNER ='server_partner' è molto importante.The order in which the ALTER DATABASE database_name SET PARTNER ='partner_server' statements are issued is very important.

  1. La prima istruzione deve essere eseguita sul server mirror.The first statement must be run on the mirror server. Quando viene eseguita questa istruzione, il server mirror non tenta di contattare altre istanze del serverWhen this statement is issued, the mirror server does not try to contact any other server instance. e indica invece al database di attendere che il server mirror venga contattato dal server principale.Instead, the mirror server instructs its database to wait until the mirror server has been contacted by the principal server.

  2. La seconda istruzione ALTER DATABASE deve essere eseguita sul server principaleThe second ALTER DATABASE statement must be run on the principal server. e fa in modo che il server principale tenti di connettersi al server mirror.This statement causes the principal server to try to connect to the mirror server. Dopo che è stata creata la connessione, il server mirror tenta di connettersi al server principale tramite un'altra connessione.After that connection is created, the mirror then tries to connect to the principal server on another connection.

    Per altre informazioni, vedere ALTER DATABASE (Transact-SQL).For more information, see ALTER DATABASE (Transact-SQL).

Nota

Per altre informazioni sull'uso di SQL Server Management StudioSQL Server Management Studio, vedere Stabilire una sessione di mirroring del database tramite autenticazione di Windows (SQL Server Management Studio).For information about using SQL Server Management StudioSQL Server Management Studio to start mirroring, see Establish a Database Mirroring Session Using Windows Authentication (SQL Server Management Studio).

Transazioni tra database Cross-Database Transactions

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.When a database is being mirrored in high-safety mode with automatic failover, an automatic failover could lead to automatic and possibly incorrect resolution of in-doubt transactions. 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.If an automatic failover occurs on either database while a cross-database transaction is being committed, logical inconsistencies can occur between the databases.

I tipi di transazioni tra database che possono essere interessati da un failover automatico includono:The types of cross-database transactions that can be affected by an automatic failover include the following:

Vedere ancheSee Also

Impostazione del mirroring del database (SQL Server) Setting Up Database Mirroring (SQL Server)
Sicurezza trasporto per il mirroring del database e i gruppi di disponibilità AlwaysOn (SQL Server)Transport Security for Database Mirroring and Always On Availability Groups (SQL Server)