Collegare un databaseAttach a Database

SI APPLICA A: sìSQL Server noDatabase SQL di Azure noAzure SQL Data Warehouse noParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

In questo argomento si illustra come collegare un database in SQL Server 2017SQL Server 2017 utilizzando SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.This topic describes how to attach a database in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. È possibile usare questa funzionalità per copiare, spostare o aggiornare un database di SQL ServerSQL Server.You can use this feature to copy, move, or upgrade a SQL ServerSQL Server database.

PrerequisitiPrerequisites

  • Il database deve essere innanzitutto scollegato.The database must first be detached. Se si tenta di collegare un database che non è stato scollegato, verrà restituito un errore.Attempting to attach a database that has not been detached will return an error. Per altre informazioni, vedere Scollegare un database.For more information, see Detach a Database.

  • Durante il collegamento di un database è necessario che siano disponibili tutti i file di dati (file MDF e LDF).When you attach a database, all data files (MDF and LDF 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.

  • Quando si collega un database, se i file MDF e LDF si trovano in directory diverse e uno dei percorsi include \\?\GlobalRoot, l'operazione avrà esito negativo.When you attach a database, if MDF and LDF files are located in different directories and one of the paths includes \\?\GlobalRoot, the operation will fail.

Il collegamento è la scelta migliore?Is Attach the best choice?

Quando si spostano file di database all'interno della stessa istanza, è consigliabile spostare i database usando la procedura di rilocazione pianificata ALTER DATABASE invece delle operazioni di scollegamento e collegamento.We recommend that you move databases by using the ALTER DATABASE planned relocation procedure instead of using detach and attach, when moving database files within the same instance. Per altre informazioni, vedere Spostare database utente.For more information, see Move User Databases.

Non è consigliabile usare le operazioni di collegamento e scollegamento da Backup e ripristino.We don't recommend using detach and attach for Backup and Recovery. Non esistono backup del log delle transazioni ed è possibile che i file vengano eliminati accidentalmente.There are no transaction log backups, and it's possible to accidently delete files.

SicurezzaSecurity

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. Per informazioni sulle autorizzazioni per i file impostate quando un database viene collegato o scollegato, vedere Protezione dei dati e dei file di log dalla SQL Server 2008 R2SQL Server 2008 R2 documentazione online (lettura ancora valida).For information about file permissions that are set whenever a database is detached and attached, see Securing Data and Log Files from SQL Server 2008 R2SQL Server 2008 R2 Books Online (Still a valid read!)

È 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 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. Per altre informazioni sul collegamento di database e sulle modifiche apportate ai metadati in caso di collegamento di un database, vedere Collegamento e scollegamento di un database (SQL Server).For more information about attaching databases and information about changes that are made to metadata when you attach a database, see Database Detach and Attach (SQL Server).

AutorizzazioniPermissions

È necessaria l'autorizzazione CREATE DATABASE, CREATE ANY DATABASE o ALTER ANY DATABASE.Requires CREATE DATABASE, CREATE ANY DATABASE, or ALTER ANY DATABASE permission.

Utilizzo di SQL Server Management StudioUsing SQL Server Management Studio

Per collegare un databaseTo Attach a Database

  1. In Esplora oggetti SQL Server Management StudioSQL Server Management Studio connettersi a un'istanza del Motore di database di SQL ServerSQL Server Database Engineed espandere la vista di questa istanza in SSMS.In SQL Server Management StudioSQL Server Management Studio Object Explorer, connect to an instance of the Motore di database di SQL ServerSQL Server Database Engine, and then click to expand that instance view in SSMS.

  2. Fare clic con il pulsante destro del mouse su Database , quindi scegliere Collega.Right-click Databases and click Attach.

  3. Nella finestra di dialogo Collega database fare clic su Aggiungiper specificare il database da collegare, quindi nella finestra di dialogo Individua file di database selezionare l'unità disco in cui si trova il database ed espandere l'albero di directory per individuare e selezionare il file con estensione mdf del database, ad esempio:In the Attach Databases dialog box, to specify the database to be attached, click Add; and in the Locate Database Files dialog box, select the disk drive where the database resides and expand the directory tree to find and select the .mdf file of the database; for example:

Commenti e suggerimenti: se si trovano informazioni obsolete o non corrette in questo articolo, ad esempio in un passaggio di una procedura o in un esempio di codice, è possibile comunicarlo a Microsoft.We are listening: If you find something outdated or incorrect in this article, such as a step or a code example, please tell us. È possibile fare clic sul pulsante Questa pagina nella sezione Commenti nella parte inferiore della pagina.You can click the This page button in the Feedback section at the bottom of this page. Ogni commento o suggerimento su SQL viene letto, in genere il giorno successivo.We read every item of feedback about SQL, typically the next day. Grazie.Thanks.

 `C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\AdventureWorks2012_Data.mdf`  

> [!IMPORTANT]  
> Trying to select a database that is already attached generates an error.  

 **Databases to attach**  
 Displays information about the selected databases.  

 \<no column header>  
 Displays an icon indicating the status of the attach operation. The possible icons are described in the **Status** description, below).  

 **MDF File Location**  
 Displays the path and file name of the selected MDF file.  

 **Database Name**  
 Displays the name of the database.  

 **Attach As**  
 Optionally, specifies a different name for the database to attach as.  

 **Owner**  
 Provides a drop-down list of possible database owners from which you can optionally select a different owner.  

 **Status**  
 Displays the status of the database according to the following table.  

|<span data-ttu-id="67892-131">Icona</span><span class="sxs-lookup"><span data-stu-id="67892-131">Icon</span></span>|<span data-ttu-id="67892-132">Testo Stato</span><span class="sxs-lookup"><span data-stu-id="67892-132">Status text</span></span>|<span data-ttu-id="67892-133">Descrizione</span><span class="sxs-lookup"><span data-stu-id="67892-133">Description</span></span>|  
|----------|-----------------|-----------------|  
|<span data-ttu-id="67892-134">(Nessuna icona)</span><span class="sxs-lookup"><span data-stu-id="67892-134">(No icon)</span></span>|<span data-ttu-id="67892-135">(Nessun testo)</span><span class="sxs-lookup"><span data-stu-id="67892-135">(No text)</span></span>|<span data-ttu-id="67892-136">L'operazione di collegamento non è stata avviata o può essere sospesa per questo oggetto.</span><span class="sxs-lookup"><span data-stu-id="67892-136">Attach operation has not been started or may be pending for this object.</span></span> <span data-ttu-id="67892-137">È il valore predefinito all'apertura della finestra di dialogo.</span><span class="sxs-lookup"><span data-stu-id="67892-137">This is the default when the dialog is opened.</span></span>|  
|<span data-ttu-id="67892-138">Triangolo verde che punta a destra</span><span class="sxs-lookup"><span data-stu-id="67892-138">Green, right-pointing triangle</span></span>|<span data-ttu-id="67892-139">In corso</span><span class="sxs-lookup"><span data-stu-id="67892-139">In progress</span></span>|<span data-ttu-id="67892-140">L'operazione di collegamento è stata avviata ma non ancora completata.</span><span class="sxs-lookup"><span data-stu-id="67892-140">Attach operation has been started but it is not complete.</span></span>|  
|<span data-ttu-id="67892-141">Segno di spunta verde</span><span class="sxs-lookup"><span data-stu-id="67892-141">Green check mark</span></span>|<span data-ttu-id="67892-142">Esito positivo</span><span class="sxs-lookup"><span data-stu-id="67892-142">Success</span></span>|<span data-ttu-id="67892-143">L'oggetto è stato collegato.</span><span class="sxs-lookup"><span data-stu-id="67892-143">The object has been attached successfully.</span></span>|  
|<span data-ttu-id="67892-144">Cerchio rosso con croce bianca</span><span class="sxs-lookup"><span data-stu-id="67892-144">Red circle containing a white cross</span></span>|<span data-ttu-id="67892-145">Errore</span><span class="sxs-lookup"><span data-stu-id="67892-145">Error</span></span>|<span data-ttu-id="67892-146">Si è verificato un errore durante l'operazione. Il collegamento non è stato completato.</span><span class="sxs-lookup"><span data-stu-id="67892-146">Attach operation encountered an error and did not complete successfully.</span></span>|  
|<span data-ttu-id="67892-147">Cerchio con due quadranti neri a destra e a sinistra e due quadranti bianchi in alto e in basso</span><span class="sxs-lookup"><span data-stu-id="67892-147">Circle containing two black quadrants (on left and right) and two white quadrants (on top and bottom)</span></span>|<span data-ttu-id="67892-148">Stopped</span><span class="sxs-lookup"><span data-stu-id="67892-148">Stopped</span></span>|<span data-ttu-id="67892-149">L'operazione di collegamento non è stata completata perché l'utente ne ha arrestato l'esecuzione.</span><span class="sxs-lookup"><span data-stu-id="67892-149">Attach operation was not completed successfully because the user stopped the operation.</span></span>|  
|<span data-ttu-id="67892-150">Cerchio con freccia curva che punta in senso antiorario.</span><span class="sxs-lookup"><span data-stu-id="67892-150">Circle containing a curved arrow pointing counter-clockwise</span></span>|<span data-ttu-id="67892-151">È stato eseguito il rollback</span><span class="sxs-lookup"><span data-stu-id="67892-151">Rolled Back</span></span>|<span data-ttu-id="67892-152">L'operazione di collegamento è stata completata ma ne è stato eseguito il rollback a causa di un errore durante il collegamento di un altro oggetto.</span><span class="sxs-lookup"><span data-stu-id="67892-152">Attach operation was successful but it has been rolled back due to an error during attachment of another object.</span></span>|  

 **Message**  
 Displays either a blank message or a "File not found" hyperlink.  

 **Add**  
 Find the necessary main database files. When the user selects an .mdf file, applicable information is automatically filled in the respective fields of the **Databases to attach** grid.  

 **Remove**  
 Removes the selected file from the **Databases to attach** grid.  

 **"** *<database_name>* **" database details**  
 Displays the names of the files to be attached. To verify or change the pathname of a file, click the **Browse** button (**...**).  

> [!NOTE]  
> If a file does not exist, the **Message** column displays "Not found." If a log file is not found, it exists in another directory or has been deleted. You need to either update the file path in the **database details** grid to point to the correct location or remove the log file from the grid. If an .ndf data file is not found, you need to update its path in the grid to point to the correct location.  

 **Original File Name**  
 Displays the name of the attached file belonging to the database.  

 **File Type**  
 Indicates the type of file, **Data** or **Log**.  

 **Current File Path**  
 Displays the path to the selected database file. The path can be edited manually.  

 **Message**  
 Displays either a blank message or a "**File not found**" hyperlink.  

Uso di Transact-SQLUsing Transact-SQL

Per collegare un databaseTo attach a database

  1. Connettersi al Motore di databaseDatabase Engine.Connect to the Motore di databaseDatabase Engine.

  2. Dalla barra Standard fare clic su Nuova query.From the Standard bar, click New Query.

  3. Usare l'istruzione CREATE DATABASE con la clausola FOR ATTACH.Use the CREATE DATABASE statement with the FOR ATTACH clause.

    Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.Copy and paste the following example into the query window and click Execute. In questo esempio si collegano i file del database AdventureWorks2012AdventureWorks2012 e si rinomina il database in MyAdventureWorks.This example attaches the files of the AdventureWorks2012AdventureWorks2012 database and renames the database to MyAdventureWorks.

    CREATE DATABASE MyAdventureWorks   
        ON (FILENAME = 'C:\MySQLServer\AdventureWorks_Data.mdf'),   
        (FILENAME = 'C:\MySQLServer\AdventureWorks_Log.ldf')   
        FOR ATTACH;  
    

    Nota

    In alternativa, è possibile usare la stored procedure sp_attach_db o sp_attach_single_file_db .Alternatively, you can use the sp_attach_db or sp_attach_single_file_db stored procedure. Tuttavia, queste stored procedure verranno eliminate nelle versioni future di Microsoft SQL ServerSQL Server.However, these procedures will be removed in a future version of Microsoft SQL ServerSQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.Avoid using this feature in new development work, and plan to modify applications that currently use this feature. È consigliabile utilizzare CREATE DATABASE ... FOR ATTACH in alternativa.We recommend that you use CREATE DATABASE ... FOR ATTACH instead.

Completamento: Dopo l'aggiornamento di un database di SQL ServerFollow Up: After Upgrading a SQL Server Database

Una volta aggiornato utilizzando il metodo di collegamento, il database viene reso immediatamente disponibile e viene aggiornato automaticamente.After you upgrade a database by using the attach method, the database becomes available immediately and is automatically upgraded. Se il database include indici full-text, questi vengono importati, reimpostati o ricompilati dal processo di aggiornamento, a seconda dell'impostazione della proprietà del server Opzione di aggiornamento full-text .If the database has full-text indexes, the upgrade process either imports, resets, or rebuilds them, depending on the setting of the Full-Text Upgrade Option server property. Se l'opzione di aggiornamento è impostata su Importa o Ricompila, gli indici full-text non saranno disponibili durante l'aggiornamento.If the upgrade option is set to Import or Rebuild, the full-text indexes will be unavailable during the upgrade. A seconda della quantità di dati indicizzati, l'importazione può richiedere diverse ore, mentre la ricompilazione può risultare dieci volte più lunga.Depending the amount of data being indexed, importing can take several hours, and rebuilding can take up to ten times longer. Si noti anche che, quando l'opzione di aggiornamento è impostata su Importae un catalogo full-text non è disponibile, gli indici full-text associati vengono ricompilati.Note also that when the upgrade option is set to Import, if a full-text catalog is not available, the associated full-text indexes are rebuilt.

Se il livello di compatibilità di un database utente è 100 o superiore prima dell'aggiornamento, rimane invariato dopo l'aggiornamento.If the compatibility level of a user database is 100 or higher before upgrade, it remains the same after upgrade. Se il livello di compatibilità è 90 prima dell'aggiornamento, nel database aggiornato viene impostato su 100, ovvero sul livello di compatibilità supportato più basso in SQL Server 2017SQL Server 2017.If the compatibility level is 90 before upgrade, in the upgraded database, the compatibility level is set to 100, which is the lowest supported compatibility level in SQL Server 2017SQL Server 2017. Per altre informazioni, vedere Livello di compatibilità ALTER DATABASE (Transact-SQL).For more information, see ALTER DATABASE Compatibility Level (Transact-SQL).

Nota

Se si collega un database da un'istanza che esegue SQL Server 2014 (12.x)SQL Server 2014 (12.x) o versioni precedenti con Change Data Capture (CDC) abilitato, è necessario eseguire anche il comando seguente per aggiornare i metadati di Change Data Capture (CDC).If you are attaching a database from an instance running SQL Server 2014 (12.x)SQL Server 2014 (12.x) or below which had Change Data Capture (CDC) enabled, you will also need to execute the command below to upgrade the Change Data Capture (CDC) metadata.

USE <database name>
EXEC sys.sp_cdc_vupgrade  

Vedere ancheSee Also

CREATE DATABASE (SQL Server Transact-SQL) CREATE DATABASE (SQL Server Transact-SQL)
Gestire i metadati quando si rende disponibile un database in un altro serverManage metadata when making a database available on another server
Scollegamento di un databaseDetach a Database