Creare uno snapshot del database (Transact-SQL)Create a Database Snapshot (Transact-SQL)

L'unico modo per creare uno snapshot del database di SQL ServerSQL Server è utilizzando Transact-SQLTransact-SQL.The only way to create a SQL ServerSQL Server database snapshot is to use Transact-SQLTransact-SQL. SQL Server Management StudioSQL Server Management Studio non supporta la creazione di snapshot del database. does not support the creation of database snapshots.

Prima di iniziare Before You Begin

Prerequisiti Prerequisites

Il database di origine, in cui può essere utilizzato qualsiasi modello di recupero, deve soddisfare i prerequisiti seguenti:The source database, which can use any recovery model, must meet the following prerequisites:

  • L'istanza del server deve essere in esecuzione in un'edizione di SQL ServerSQL Server che supporta gli snapshot del database.The server instance must be running an edition of SQL ServerSQL Server that supports database snapshot. Per informazioni sul supporto degli snapshot del database in SQL Server 2017SQL Server 2017, vedere Funzionalità supportate dalle edizioni di SQL Server 2016.For information about support for database snapshots in SQL Server 2017SQL Server 2017, see Features Supported by the Editions of SQL Server 2016.

  • Il database di origine deve essere online, a meno che non si tratti di un database mirror nell'ambito di una sessione di mirroring del database.The source database must be online, unless the database is a mirror database within a database mirroring session.

  • Per creare uno snapshot del database in un database mirror, è necessario che il database si trovi nello stato di mirroringsincronizzato.To create a database snapshot on a mirror database, the database must be in the synchronized mirroring state.

  • Non è possibile configurare il database di origine come un database condiviso scalabile.The source database cannot be configured as a scalable shared database.

  • Il database di origine non deve contenere un filegroup MEMORY_OPTIMIZED_DATA.The source database must not contain a MEMORY_OPTIMIZED_DATA filegroup. Per altre informazioni sulla funzionalità, vedere Funzionalità di SQL Server non supportate per OLTP in memoria.For more information, see Unsupported SQL Server Features for In-Memory OLTP.

Importante

Per informazioni relative ad altre considerazioni rilevanti, vedere Snapshot del database (SQL Server).For information about other significant considerations, see Database Snapshots (SQL Server).

Indicazioni Recommendations

In questa sezione vengono illustrate le procedure consigliate seguenti:This section discusses the following best practices:

Procedura consigliata: Denominazione degli snapshot del database Best Practice: Naming Database Snapshots

Prima di creare gli snapshot è importante considerare il nome da utilizzare.Before creating snapshots, it is important to consider how to name them. Ogni snapshot del database richiede un nome di database univoco.Each database snapshot requires a unique database name. Per semplificare l'amministrazione, il nome di uno snapshot può contenere informazioni utili a identificare il database, ad esempio:For administrative ease, the name of a snapshot can incorporate information that identifies the database, such as:

  • Nome del database di origine.The name of the source database.

  • Indicazione che si tratta di uno snapshot.An indication that the new name is for a snapshot.

  • Data e ora di creazione dello snapshot, un numero di sequenza o altre informazioni utili a distinguere gli snapshot sequenziali su un determinato database.The creation date and time of the snapshot, a sequence number, or some other information, such as time of day, to distinguish sequential snapshots on a given database.

    Si consideri ad esempio una serie di snapshot del database AdventureWorks2012AdventureWorks2012 .For example, consider a series of snapshots for the AdventureWorks2012AdventureWorks2012 database. Ogni giorno fra le 6 e le 18 vengono creati tre snapshot, a intervalli di 6 ore,Three daily snapshots are created at 6-hour intervals between 6 A.M. su un ciclo di 24 ore.and 6 P.M., based on a 24-hour clock. Ogni snapshot viene mantenuto per 24 ore prima di essere eliminato e sostituito da un nuovo snapshot con lo stesso nome.Each daily snapshot is kept for 24 hours before being dropped and replaced by a new snapshot of the same name. Si noti che il nome di ogni snapshot indica l'ora, ma non il giorno:Note that each snapshot name indicates the hour, but not the day:

AdventureWorks_snapshot_0600  
AdventureWorks_snapshot_1200  
AdventureWorks_snapshot_1800  

In alternativa, se l'orario di creazione di questi snapshot giornalieri cambia da un giorno all'altro, può essere preferibile una convenzione di denominazione più generica, ad esempio:Alternatively, if the creation time of these daily snapshots varies from day to day, a less precise naming convention might be preferable, for example:

AdventureWorks_snapshot_morning  
AdventureWorks_snapshot_noon  
AdventureWorks_snapshot_evening  

Procedura consigliata: Limitazione del numero di snapshot del database Best Practice: Limiting the Number of Database Snapshots

Creando una serie di snapshot a intervalli di tempo si acquisiscono snapshot sequenziali del database di origine.Creating a series of snapshots over time captures sequential snapshots of the source database. Ogni snapshot viene mantenuto finché non viene esplicitamente eliminato.Each snapshot persists until it is explicitly dropped. Poiché ogni snapshot continua a crescere man mano che le pagine originali vengono aggiornate, per conservare spazio su disco è consigliabile eliminare un vecchio snapshot prima di crearne uno nuovo.Because each snapshot will continue to grow as original pages are updated, you may want to conserve disk space by deleting an older snapshot after creating a new snapshot.

NotaNote! Per ripristinare uno snapshot del database è necessario eliminare tutti gli altri snapshot dal database.To revert to a database snapshot, you need to delete any other snapshots from that database.

Procedura consigliata: Connessioni client a uno snapshot del database Best Practice: Client Connections to a Database Snapshot

Per utilizzare uno snapshot del database, i client devono sapere dove reperirlo.To use a database snapshot, clients need to know where to find it. Gli utenti possono leggere da uno snapshot del database durante la creazione o l'eliminazione di un altro snapshot.Users can read from one database snapshot while another is being created or deleted. Quando si sostituisce uno snapshot esistente con un nuovo snapshot, tuttavia, è necessario reindirizzare i client al nuovo snapshot.However, when you substitute a new snapshot for an existing one, you need to redirect clients to the new snapshot. Gli utenti possono connettersi manualmente a uno snapshot del database tramite SQL Server Management StudioSQL Server Management Studio.Users can manually connect to a database snapshot by means of SQL Server Management StudioSQL Server Management Studio. Per supportare un ambiente di produzione, è tuttavia consigliabile creare una soluzione a livello di programmazione che indirizzi in modo trasparente i client che scrivono report all'ultimo snapshot del database.However, to support a production environment, you should create a programmatic solution that transparently directs report-writing clients to the latest database snapshot of the database.

Autorizzazioni Permissions

Se un utente può creare un database, può creare anche uno snapshot del database; tuttavia, per creare uno snapshot di un database mirror, è necessario essere membro del ruolo del server predefinito sysadmin .Any user who can create a database can create a database snapshot; however, to create a snapshot of a mirror database, you must be a member of the sysadmin fixed server role.

Come creare uno snapshot del database utilizzando Transact-SQL How to Create a Database Snapshot (Using Transact-SQL)

Per creare uno snapshot del databaseTo create a database snapshot

Per un esempio di questa procedura, vedere Esempi (Transact-SQL)più avanti in questa sezione.For an example of this procedure, see Examples (Transact-SQL), later in this section.

  1. In base alla dimensione attuale del database di origine, assicurarsi che lo spazio su disco sia sufficiente per lo snapshot del database.Based on the current size of the source database, ensure that you have sufficient disk space to hold the database snapshot. La dimensione massima di uno snapshot del database corrisponde alla dimensione del database di origine al momento della creazione dello snapshot.The maximum size of a database snapshot is the size of the source database at snapshot creation. Per altre informazioni, vedere Visualizzare le dimensioni del file sparse di uno snapshot del database (Transact-SQL).For more information, see View the Size of the Sparse File of a Database Snapshot (Transact-SQL).

  2. Generare un'istruzione CREATE DATABASE sui file che utilizzano la clausola AS SNAPSHOT OF.Issue a CREATE DATABASE statement on the files using the AS SNAPSHOT OF clause. Per creare uno snapshot, è necessario specificare il nome logico di ogni file di database del database di origine.Creating a snapshot requires specifying the logical name of every database file of the source database. La sintassi è la seguente:The syntax is as follows:

    CREATE DATABASE database_snapshot_nameCREATE DATABASE database_snapshot_name

    ONON

    ((

    NAME =logical_file_name,NAME =logical_file_name,

    FILENAME ='os_file_name'FILENAME ='os_file_name'

    ) [ ,...n ]) [ ,...n ]

    AS SNAPSHOT OF source_database_nameAS SNAPSHOT OF source_database_name

    [;][;]

    Dove source_database_name è il database di origine, logical_file_nameè il nome logico usato in SQL Server quando si fa riferimento al file, os_file_name rappresenta il nome e il percorso usati dal sistema operativo quando si crea il file e database_snapshot_name è il nome dello snapshot in base a cui si vuole ripristinare il database.Where source_database_name is the source database, logical_file_name is the logical name used in SQL Server when referencing the file, os_file_name is the path and file name used by the operating system when you create the file, and database_snapshot_name is the name of the snapshot to which you want to revert the database. Per una descrizione completa di questa sintassi, vedere CREATE DATABASE (SQL Server Transact-SQL).For a full description of this syntax, see CREATE DATABASE (SQL Server Transact-SQL).

    Nota

    Quando si crea uno snapshot del database, i file di log, i file offline, i file in fase di ripristino e i file inattivi non sono consentiti nell'istruzione CREATE DATABASE.When you create a database snapshot, log files, offline files, restoring files, and defunct files are not allowed in the CREATE DATABASE statement.

Esempi (Transact-SQL) Examples (Transact-SQL)

Nota

L'estensione .ss utilizzata negli esempi è arbitraria.The .ss extension used in the examples is arbitrary.

In questa sezione sono disponibili gli esempi seguenti:This section contains the following examples:

A. A. Creazione di uno snapshot del database AdventureWorksCreating a snapshot on the AdventureWorks database

In questo esempio viene creato uno snapshot del database AdventureWorks .This example creates a database snapshot on the AdventureWorks database. Il nome dello snapshot, AdventureWorks_dbss_1800, e il nome del file sparse corrispondente, AdventureWorks_data_1800.ss, indicano l'ora di creazione, ovvero le 18.00 (1800).The snapshot name, AdventureWorks_dbss_1800, and the file name of its sparse file, AdventureWorks_data_1800.ss, indicate the creation time, 6 P.M (1800 hours).

CREATE DATABASE AdventureWorks_dbss1800 ON  
( NAME = AdventureWorks_Data, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss' )  
AS SNAPSHOT OF AdventureWorks;  
GO  

B. B. Creazione di uno snapshot del database SalesCreating a snapshot on the Sales database

In questo esempio viene creato uno snapshot, sales_snapshot1200, del database Sales .This example creates a database snapshot, sales_snapshot1200, on the Sales database. Questo database è stato creato nell'esempio "Creazione di un database con filegroup" in CREATE DATABASE (SQL Server Transact-SQL).This database was created in the example, "Creating a database that has filegroups," in CREATE DATABASE (SQL Server Transact-SQL).

--Creating sales_snapshot1200 as snapshot of the  
--Sales database:  
CREATE DATABASE sales_snapshot1200 ON  
( NAME = SPri1_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SPri1dat_1200.ss'),  
( NAME = SPri2_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SPri2dt_1200.ss'),  
( NAME = SGrp1Fi1_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\mssql\data\SG1Fi1dt_1200.ss'),  
( NAME = SGrp1Fi2_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SG1Fi2dt_1200.ss'),  
( NAME = SGrp2Fi1_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SG2Fi1dt_1200.ss'),  
( NAME = SGrp2Fi2_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SG2Fi2dt_1200.ss')  
AS SNAPSHOT OF Sales;  
GO  

Vedere ancheSee Also

CREATE DATABASE (SQL Server Transact-SQL) CREATE DATABASE (SQL Server Transact-SQL)
Snapshot del database (SQL Server)Database Snapshots (SQL Server)