Mirroring e snapshot del database (SQL Server)Database Mirroring and Database Snapshots (SQL Server)

Per ripartire il carico di lavoro dei report, è possibile avvalersi di un database mirror gestito per scopi di disponibilità.You can take advantage of a mirror database that you are maintaining for availability purposes to offload reporting. Per utilizzare un database mirror per la gestione dei report, creare nel database mirror uno snapshot del database e indirizzare le richieste di connessione client allo snapshot più recente.To use a mirror database for reporting, you can create a database snapshot on the mirror database and direct client connection requests to the most recent snapshot. Uno snapshot del database è uno snapshot statico, in sola lettura e consistente a livello di transazioni del relativo database di origine nello stato in cui quest'ultimo si trovava al momento della creazione dello snapshot.A database snapshot is a static, read-only, transaction-consistent snapshot of its source database as it existed at the moment of the snapshot's creation. Per creare uno snapshot del database in un database mirror, è necessario che il database si trovi nello stato di mirroring sincronizzato.To create a database snapshot on a mirror database, the database must be in the synchronized mirroring state.

A differenza del database mirror stesso, uno snapshot del database è accessibile ai client.Unlike the mirror database itself, a database snapshot is accessible to clients. Fino a quando il server mirror comunica con il server principale, è possibile indirizzare i client di report a uno snapshot.As long as the mirror server is communicating with the principal server, you can direct reporting clients to connect to a snapshot. Si noti che poiché uno snapshot del database è statico, i nuovi dati non sono disponibili.Note that because a database snapshot is static, new data is not available. Per rendere disponibili agli utenti dati relativamente recenti, è necessario creare periodicamente un nuovo snapshot del database e fare in modo che le applicazioni indirizzino le connessioni client in arrivo allo snapshot più recente.To make relatively recent data available to your users, you must create a new database snapshot periodically and have applications direct incoming client connections to the newest snapshot.

Un nuovo snapshot del database è quasi vuoto, ma aumenta nel tempo man mano che un numero crescente di pagine del database vengono aggiornate per la prima volta.A new database snapshot is almost empty, but it grows over time as more and more database pages are updated for the first time. Poiché ogni snapshot in un database aumenta in modo incrementale in questo modo, ogni snapshot del database utilizza tante risorse quanto un database normale.Because every snapshot on a database grows incrementally in this way, each database snapshot consumes as much resources as a normal database. A seconda delle configurazioni del server mirror e del server principale, la presenza di un numero eccessivo di snapshot del database in un database mirror può compromettere le prestazioni nel database principale.Depending on the configurations of the mirror server and principal server, having an excessive number of database snapshots on a mirror database might decrease performance on the principal database. È pertanto consigliabile conservare solo gli snapshot relativamente più recenti nei database mirror.Therefore, we recommend that you keep only a few relatively recent snapshots on your mirror databases. In genere, dopo aver creato uno snapshot di sostituzione, è consigliabile reindirizzare le query in arrivo al nuovo snapshot ed eliminare quello meno recente dopo il completamento delle query correnti.Typically, after you create a replacement snapshot, you should redirect incoming queries to the new snapshot and drop the earlier snapshot after any current queries complete.

Nota

Per altre informazioni sugli snapshot del database, vedere Snapshot del database (SQL Server).For more information about database snapshots, see Database Snapshots (SQL Server).

In presenza di un cambio di ruolo, il database e i relativi snapshot vengono riavviati, con conseguente disconnessione temporanea degli utenti.If role switching occurs, the database and its snapshots are restarted, temporarily disconnecting users. Gli snapshot del database rimangono quindi nell'istanza del server dove sono stati creati, ovvero il nuovo database principale.Afterwards, the database snapshots remain on the server instance where they were created, which has become the new principal database. Gli utenti possono continuare a utilizzare gli snapshot dopo il failover,Users can continue to use the snapshots after the failover. anche se ciò comporta un carico aggiuntivo per il nuovo server principale.However, this places an additional load on the new principal server. Se è necessario evitare un peggioramento delle prestazioni, è consigliabile creare uno snapshot nel nuovo database mirror quando diventa disponibile, reindirizzare i client al nuovo snapshot ed eliminare tutti gli snapshot del database dal database mirror precedente.If performance is a concern in your environment, we recommend that you create a snapshot on the new mirror database when it becomes available, redirect clients to the new snapshot, and drop all of the database snapshots from the former mirror database.

Nota

Per una soluzione dedicata per la creazione di report che consente una scalabilità orizzontale appropriata, prendere in considerazione la replica.For a dedicated reporting solution that scales out well, consider replication. Per altre informazioni, vedere Replica di SQL Server.For more information, see SQL Server Replication.

EsempioExample

In questo esempio vengono creati snapshot in un database con mirroring.This example creates snapshots on a mirrored database.

Si supponga che il database di una sessione di mirroring del database sia AdventureWorks2012AdventureWorks2012.Assume that the database of a database mirroring session is AdventureWorks2012AdventureWorks2012. In questo esempio vengono creati tre snapshot del database nella copia mirror del database AdventureWorks che risiede nell'unità F .This example creates three database snapshots on the mirror copy of the AdventureWorks database, which resides on the F drive. Gli snapshot sono denominati AdventureWorks_0600, AdventureWorks_1200e AdventureWorks_1800 per identificare l'ora approssimativa in cui sono stati creati.The snapshots are named AdventureWorks_0600, AdventureWorks_1200, and AdventureWorks_1800 to identify their approximate creation times.

  1. Creare il primo snapshot del database sul mirror di AdventureWorks2012AdventureWorks2012:Create the first database snapshot on the mirror of AdventureWorks2012AdventureWorks2012.

    CREATE DATABASE AdventureWorks_0600  
    ON (NAME = 'datafile', FILENAME = 'F:\AdventureWorks_0600.SNP')  
       AS SNAPSHOT OF AdventureWorks2012  
    
  2. Creare il secondo snapshot del database sul mirror di AdventureWorks2012AdventureWorks2012.Create the second database snapshot on the mirror of AdventureWorks2012AdventureWorks2012. Gli utenti che utilizzano ancora AdventureWorks_0600 possono continuare a utilizzarlo.Users who are still using AdventureWorks_0600 can continue to use it.

    CREATE DATABASE AdventureWorks_1200  
    ON (NAME = 'datafile', FILENAME = 'F:\AdventureWorks_1200.SNP')  
       AS SNAPSHOT OF AdventureWorks2012  
    

    A questo punto è possibile indirizzare a livello di programmazione le nuove connessioni client allo snapshot più recente.At this point, new client connections can be programmatically directed to the latest snapshot.

  3. Creare il terzo snapshot sul mirror AdventureWorks2012AdventureWorks2012.Create the third snapshot on the mirror AdventureWorks2012AdventureWorks2012. Gli utenti che utilizzano ancora AdventureWorks_0600 o AdventureWorks_1200 possono continuare a utilizzarli.Users who are still using AdventureWorks_0600 or AdventureWorks_1200 can continue to use them.

    CREATE DATABASE AdventureWorks_1800  
    ON (NAME = 'datafile', FILENAME = 'F:\AdventureWorks_1800.SNP')  
        AS SNAPSHOT OF AdventureWorks2012  
    

    A questo punto è possibile indirizzare a livello di programmazione le nuove connessioni client allo snapshot più recente.At this point, new client connections can be programmatically directed to the latest snapshot.

Vedere ancheSee Also

Snapshot del database (SQL Server) Database Snapshots (SQL Server)
Connettere client a una sessione di mirroring del database (SQL Server)Connect Clients to a Database Mirroring Session (SQL Server)