Collegamento e scollegamento di un database (SQL Server)Database Detach and Attach (SQL Server)

È possibile scollegare i file di dati e di log delle transazioni di un database e, successivamente, ricollegarli alla stessa istanza di SQL ServerSQL Servero a un'istanza diversa.The data and transaction log files of a database can be detached and then reattached to the same or another instance of SQL ServerSQL Server. Scollegare e collegare un database risulta utile se si desidera assegnare il database a un'istanza diversa di SQL ServerSQL Server nello stesso computer oppure spostarlo.Detaching and attaching a database is useful if you want to change the database to a different instance of SQL ServerSQL Server on the same computer or to move the database.

Security Security

Le autorizzazioni di accesso ai file vengono impostate durante l'esecuzione di alcune operazioni del database, inclusi il collegamento e lo scollegamento.File access permissions are set during a number of database operations, including detaching or attaching a database.

Importante

È consigliabile evitare di collegare o ripristinare database provenienti da origini sconosciute o non attendibili.We recommend that you do not attach or restore databases from unknown or untrusted sources. Tali database possono contenere codice dannoso che potrebbe eseguire codice Transact-SQLTransact-SQL indesiderato o causare errori modificando lo schema o la struttura fisica di database.Such databases could contain malicious code that might execute unintended Transact-SQLTransact-SQL code or cause errors by modifying the schema or the physical database structure. Prima di utilizzare un database da un'origine sconosciuta o non attendibile, eseguire DBCC CHECKDB sul database in un server non di produzione ed esaminare inoltre il codice contenuto nel database, ad esempio le stored procedure o altro codice definito dall'utente.Before you use a database from an unknown or untrusted source, run DBCC CHECKDB on the database on a nonproduction server and also examine the code, such as stored procedures or other user-defined code, in the database.

Scollegamento di un database Detaching a Database

Lo scollegamento di un database determina la rimozione del database dall'istanza di SQL ServerSQL Server , mentre i file di dati e i file del log delle transazioni inclusi nel database non vengono modificati.Detaching a database removes it from the instance of SQL ServerSQL Server but leaves the database intact within its data files and transaction log files. È quindi possibile utilizzare questi file per collegare il database a qualsiasi istanza di SQL ServerSQL Server, incluso il server dal quale è stato scollegato il database.These files can then be used to attach the database to any instance of SQL ServerSQL Server, including the server from which the database was detached.

Non è possibile scollegare un database quando si verifica una delle condizioni seguenti:You cannot detach a database if any of the following are true:

  • Il database è replicato e pubblicato.The database is replicated and published. Se replicato, il database deve essere non pubblicato.If replicated, the database must be unpublished. Prima dello scollegamento, è necessario disabilitare la pubblicazione eseguendo sp_replicationdboption.Before you can detach it, you must disable publishing by running sp_replicationdboption.

    Nota

    Se non è possibile usare sp_replicationdboption, rimuovere la replica eseguendo sp_removedbreplication.If you cannot use sp_replicationdboption, you can remove replication by running sp_removedbreplication.

  • Uno snapshot del database esiste nel database.A database snapshot exists on the database.

    Prima di scollegare il database, è necessari eliminare tutti i relativi snapshot.Before you can detach the database, you must drop all of its snapshots. Per altre informazioni, vedere Eliminare uno snapshot del database (Transact-SQL)o a un'istanza diversa.For more information, see Drop a Database Snapshot (Transact-SQL).

    Nota

    Non è possibile scollegare o collegare uno snapshot del database.A database snapshot cannot be detached or attached.

  • È in corso il mirroring del database in una sessione di mirroring.The database is being mirrored in a database mirroring session.

    Non è possibile scollegare il database fino al termine della sessione.The database cannot be detached unless the session is terminated. Per altre informazioni, vedere Rimozione di mirroring del database (SQL Server).For more information, see Removing Database Mirroring (SQL Server).

  • Il database è sospetto.The database is suspect. Non è possibile scollegare un database sospetto. Per poter eseguire lo scollegamento, è prima necessario attivare la modalità di emergenza.A suspect database cannot be detached; before you can detach it, you must put it into emergency mode. Per ulteriori informazioni sull'attivazione della modalità di emergenza per un database, vedere ALTER DATABASE (Transact-SQL).For more information about how to put a database into emergency mode, see ALTER DATABASE (Transact-SQL).

  • Il database è un database di sistema.The database is a system database.

Backup e ripristino e scollegamentoBackup and Restore and Detach

Lo scollegamento di un database di sola lettura comporta la perdita di informazioni sulle basi differenziali dei backup differenziali.Detaching a read-only database loses information about the differential bases of differential backups. Per altre informazioni, vedere Backup differenziali (SQL Server).For more information, see Differential Backups (SQL Server).

Risposta agli errori di scollegamentoResponding to Detach Errors

Gli errori generati durante lo scollegamento di un database possono impedire la chiusura corretta del database e la ricompilazione del log delle transazioni.Errors produced while detaching a database can prevent the database from closing cleanly and the transaction log from being rebuilt. Se viene visualizzato un messaggio di errore, eseguire gli interventi di correzione seguenti:If you receive an error message, perform the following corrective actions:

  1. Ricollegare tutti file associati al database, non solo il file primario.Reattach all files associated with the database, not just the primary file.

  2. Risolvere il problema che ha causato l'errore.Resolve the problem that caused the error message.

  3. Scollegare di nuovo il database.Detach the database again.

Collegamento di un database Attaching a Database

È possibile collegare un database di SQL ServerSQL Server copiato o scollegato.You can attach a copied or detached SQL ServerSQL Server database. Quando si collega un database di SQL Server 2005SQL Server 2005 contenente file di cataloghi full-text in un'istanza del server di SQL Server 2017SQL Server 2017 , i file di catalogo vengono collegati dal percorso precedente insieme agli altri file del database, come in SQL Server 2005SQL Server 2005.When you attach a SQL Server 2005SQL Server 2005 database that contains full-text catalog files onto a SQL Server 2017SQL Server 2017 server instance, the catalog files are attached from their previous location along with the other database files, the same as in SQL Server 2005SQL Server 2005. Per altre informazioni, vedere Aggiornamento della ricerca full-text.For more information, see Upgrade Full-Text Search.

Durante il collegamento di un database è necessario che siano disponibili tutti i file di dati (file MDF e NDF).When you attach a database, all data files (MDF and NDF files) must be available. Se un file di dati si trova in un percorso diverso rispetto al momento della creazione o dell'ultimo collegamento del database, è necessario specificare il percorso corrente.If any data file has a different path from when the database was first created or last attached, you must specify the current path of the file.

Nota

Se il file di dati primario in corso di collegamento è di sola lettura, nel Motore di databaseDatabase Engine si considera il database di sola lettura.If the primary data file being attached is read-only, the Motore di databaseDatabase Engine assumes that the database is read-only.

Quando un database crittografato viene collegato per la prima volta a un'istanza di SQL ServerSQL Server, è necessario che il proprietario del database apra la chiave master del database eseguendo l'istruzione OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'.When an encrypted database is first attached to an instance of SQL ServerSQL Server, the database owner must open the master key of the database by executing the following statement: OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'. È consigliabile abilitare la decrittografia automatica della chiave master eseguendo l'istruzione ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY.We recommend that you enable automatic decryption of the master key by executing the following statement: ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY. Per altre informazioni, vedere CREATE MASTER KEY (Transact-SQL) e ALTER MASTER KEY (Transact-SQL).For more information, see CREATE MASTER KEY (Transact-SQL) and ALTER MASTER KEY (Transact-SQL).

I requisiti necessari per il collegamento dei file di log dipendono in parte dallo stato di lettura/scrittura o di sola lettura del database, come illustrato di seguito:The requirement for attaching log files depends partly on whether the database is read-write or read-only, as follows:

  • Per i database di lettura/scrittura è in genere possibile collegare un file di log in una nuova posizione.For a read-write database, you can usually attach a log file in a new location. In alcuni casi, tuttavia, per ricollegare un database sono necessari i relativi file di log esistenti.However, in some cases, reattaching a database requires its existing log files. È pertanto importante mantenere sempre tutti i file di log scollegati finché il database non è stato collegato correttamente senza di essi.Therefore, it is important to always keep all the detached log files until the database has been successfully attached without them.

    Se un database di lettura/scrittura include un singolo file di log e non se ne specifica una nuova posizione, durante l'operazione di collegamento il file viene cercato nella vecchia posizione.If a read-write database has a single log file and you do not specify a new location for the log file, the attach operation looks in the old location for the file. Se viene trovato, viene utilizzato il vecchio file di log, indipendentemente dal fatto che il database sia stato o meno chiuso correttamente.If it is found, the old log file is used, regardless of whether the database was shut down cleanly. Se il vecchio file di log non viene trovato, il database è stato chiuso correttamente e non è presente una catena di log attiva, con l'operazione di collegamento si tenta di compilare un nuovo file di log per il database.However, if the old log file is not found and if the database was shut down cleanly and has no active log chain, the attach operation attempts to build a new log file for the database.

  • Se il file di dati primario in corso di collegamento è di sola lettura, nel Motore di databaseDatabase Engine si considera il database di sola lettura.If the primary data file being attached is read-only, the Motore di databaseDatabase Engine assumes that the database is read-only. Nel caso di database di sola lettura, è necessario che i file di log si trovino nella posizione specificata nel file primario del database.For a read-only database, the log file or files must be available at the location specified in the primary file of the database. La compilazione di un nuovo file di log non è possibile, perché SQL ServerSQL Server non può aggiornare la posizione del log memorizzata nel file primario.A new log file cannot be built because SQL ServerSQL Server cannot update the log location stored in the primary file.

Modifiche ai metadati durante il collegamento di un database Metadata Changes on Attaching a Database

Quando si esegue lo scollegamento e il successivo ricollegamento di un database di sola lettura, le informazioni sul backup relative alla base differenziale corrente vanno perdute.When a read-only database is detached and then reattached, the backup information about the current differential base is lost. La base differenziale è il backup completo più recente di tutti i dati nel database o in un subset dei file o dei filegroup del database.The differential base is the most recent full backup of all the data in the database or in a subset of the files or filegroups of the database. Senza le informazioni sul backup di base, il database master non risulta più sincronizzato con il database di sola lettura, per cui i backup differenziali eseguiti successivamente possono restituire risultati imprevisti.Without the base-backup information, the master database becomes unsynchronized with the read-only database, so differential backups taken thereafter may provide unexpected results. Di conseguenza, se si utilizzano backup differenziali con un database di sola lettura, è consigliabile definire una nuova base differenziale eseguendo un backup completo dopo aver ricollegato il database.Therefore, if you are using differential backups with a read-only database, you should establish a new differential base by taking a full backup after you reattach the database. Per informazioni sui backup differenziali, vedere Backup differenziali (SQL Server).For information about differential backups, see Differential Backups (SQL Server).

Al momento del collegamento, viene eseguito l'avvio del database.On attach, database startup occurs. In genere, il collegamento di un database non altera lo stato in cui questo si trovava al momento dello scollegamento o della copia.Generally, attaching a database places it in the same state that it was in when it was detached or copied. Tuttavia, le operazioni di collegamento e scollegamento comportano la disabilitazione del concatenamento della proprietà tra database relativo al database in oggetto.However, attach-and-detach operations both disable cross-database ownership chaining for the database. Per informazioni su come abilitare il concatenamento, vedere Opzione di configurazione del server cross db ownership chaining.For information about how to enable chaining, see cross db ownership chaining Server Configuration Option. Inoltre, quando il database viene collegato, l'opzione TRUSTWORTHY è impostata su OFF.Also, TRUSTWORTHY is set to OFF whenever the database is attached. Per informazioni su come impostare TRUSTWORTHY su ON, vedere ALTER DATABASE (Transact-SQL).For information about how to set TRUSTWORTHY to ON, see ALTER DATABASE (Transact-SQL).

Backup e ripristino e collegamentoBackup and Restore and Attach

Analogamente a qualsiasi database completamente o parzialmente offline, non è possibile collegare un database con file in fase di ripristino.Like any database that is fully or partially offline, a database with restoring files cannot be attached. Se si arresta la sequenza di ripristino, è possibile collegare il database.If you stop the restore sequence, you can attach the database. Sarà quindi possibile riavviare la sequenza di ripristino.Then, you can restart the restore sequence.

Collegamento di un database a un'altra istanza del server Attaching a Database to Another Server Instance

Importante

Un database creato con una versione più recente di SQL ServerSQL Server non può essere collegato con versioni precedenti.A database created by a more recent version of SQL ServerSQL Server cannot be attached in earlier versions.

Quando si collega un database a un'altra istanza del server, per garantire un utilizzo coerente a utenti e applicazioni, potrebbe essere necessario ricreare alcuni o tutti i metadati per il database, ad esempio account di accesso e processi, nell'altra istanza del server.When you attach a database onto another server instance, to provide a consistent experience to users and applications, you might have to re-create some or all of the metadata for the database, such as logins and jobs, on the other server instance. Per altre informazioni, vedere Gestione dei 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).

Per scollegare un databaseTo detach a database

Vedere ancheSee Also

Filegroup e file di databaseDatabase Files and Filegroups