Collegare un databaseAttach a Database

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2008)noDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure 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. Con questa funzionalità è possibile copiare, spostare o aggiornare un database di SQL Server.You can use this feature to copy, move, or upgrade a SQL Server database.

Prerequisiti Prerequisites

  • 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?

Si consiglia di spostare i database usando la procedura di rilocazione pianificata ALTER DATABASE invece delle operazioni di scollegamento e collegamento per lo spostamento dei file di database all'interno della stessa istanza.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 possible to accidently delete files.

Sicurezza 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. 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 usare un database da un'origine sconosciuta o non attendibile, eseguire DBCC CHECKDB sul database in un server non di produzione ed esaminare anche 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).

Permissions Permissions

È richiesta 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 Studio Using 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:

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

    Importante

    Se si tenta di selezionare un database già collegato, verrà generato un errore.Trying to select a database that is already attached generates an error.

    Database da collegareDatabases to attach
    Consente di visualizzare informazioni sui database selezionati.Displays information about the selected databases.

    <nessuna intestazione di colonna><no column header>
    Consente di visualizzare un'icona che indica lo stato dell'operazione di collegamento.Displays an icon indicating the status of the attach operation. Le icone possibili sono illustrate di seguito nella descrizione di Stato .The possible icons are described in the Status description, below).

    Percorso file MDFMDF File Location
    Consente di visualizzare il percorso e il nome del file MDF selezionato.Displays the path and file name of the selected MDF file.

    Database NameDatabase Name
    Consente di visualizzare il nome del database.Displays the name of the database.

    Collega comeAttach As
    Facoltativamente, è possibile specificare un nome diverso per il database da collegare.Optionally, specifies a different name for the database to attach as.

    ProprietarioOwner
    Consente di visualizzare un elenco a discesa di possibili proprietari del database in cui è possibile selezionare un proprietario diverso.Provides a drop-down list of possible database owners from which you can optionally select a different owner.

    StatoStatus
    Consente di visualizzare lo stato del base in base alla tabella seguente.Displays the status of the database according to the following table.

    IconaIcon Testo StatoStatus text DescrizioneDescription
    (Nessuna icona)(No icon) (Nessun testo)(No text) L'operazione di collegamento non è stata avviata o può essere sospesa per questo oggetto.Attach operation has not been started or may be pending for this object. È il valore predefinito all'apertura della finestra di dialogo.This is the default when the dialog is opened.
    Triangolo verde che punta a destraGreen, right-pointing triangle In corsoIn progress L'operazione di collegamento è stata avviata ma non ancora completata.Attach operation has been started but it is not complete.
    Segno di spunta verdeGreen check mark Operazione completataSuccess L'oggetto è stato collegato.The object has been attached successfully.
    Cerchio rosso con croce biancaRed circle containing a white cross ErroreError Si è verificato un errore durante l'operazione. Il collegamento non è stato completato.Attach operation encountered an error and did not complete successfully.
    Cerchio con due quadranti neri a destra e a sinistra e due quadranti bianchi in alto e in bassoCircle containing two black quadrants (on left and right) and two white quadrants (on top and bottom) StoppedStopped L'operazione di collegamento non è stata completata perché l'utente ne ha arrestato l'esecuzione.Attach operation was not completed successfully because the user stopped the operation.
    Cerchio con freccia curva che punta in senso antiorario.Circle containing a curved arrow pointing counter-clockwise È stato eseguito il rollbackRolled Back L'operazione di collegamento è stata completata ma ne è stato eseguito il rollback a causa di un errore durante il collegamento di un altro oggetto.Attach operation was successful but it has been rolled back due to an error during attachment of another object.

    MessageMessage
    Non viene visualizzato alcun messaggio oppure viene visualizzato il collegamento ipertestuale "Impossibile trovare il file".Displays either a blank message or a "File not found" hyperlink.

    AggiungiAdd
    Consente di individuare i file principali del database necessari.Find the necessary main database files. Se l'utente seleziona un file con estensione mdf, le informazioni appropriate vengono inserite automaticamente nei rispettivi campi della griglia Database da collegare .When the user selects an .mdf file, applicable information is automatically filled in the respective fields of the Databases to attach grid.

    RimuoviRemove
    Consente di rimuovere il file selezionato dalla griglia Database da collegare .Removes the selected file from the Databases to attach grid.

    " <database_name> " dettagli database" <database_name> " database details
    Consente di visualizzare i nomi dei file da collegare.Displays the names of the files to be attached. Per verificare o modificare il percorso di un file, fare clic sul pulsante Sfoglia ().To verify or change the pathname of a file, click the Browse button ().

    Nota

    Se il file non esiste, nella colonna Messaggio verrà visualizzato il testo "File non trovato".If a file does not exist, the Message column displays "Not found." Se non rilevato, un file di log può trovarsi in un'altra directory o essere stato eliminato.If a log file is not found, it exists in another directory or has been deleted. È necessario aggiornare il percorso del file nella griglia Dettagli database in modo che indichi la posizione corretta oppure rimuovere il file di log dalla griglia.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. Se non viene rilevato un file di dati con estensione ndf, è necessario aggiornare il percorso nella griglia in modo che indichi la posizione corretta.If an .ndf data file is not found, you need to update its path in the grid to point to the correct location.

    Nome file originaleOriginal File Name
    Consente di visualizzare il nome del file collegato appartenente al database.Displays the name of the attached file belonging to the database.

    Tipo di fileFile Type
    Indica il tipo di file, ovvero Dati o Log.Indicates the type of file, Data or Log.

    Percorso file correnteCurrent File Path
    Consente di visualizzare il percorso del file di database selezionato.Displays the path to the selected database file. Il percorso può essere modificato manualmente.The path can be edited manually.

    MessageMessage
    Non viene visualizzato alcun messaggio oppure viene visualizzato il collegamento ipertestualeImpossibile trovare il file.Displays either a blank message or a "File not found" hyperlink.

Utilizzo di Transact-SQL Using 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. Utilizzare l'istruzione CREATE DATABASE con la clausola FOR ATTACH.Use the CREATE DATABASE statement with the FOR ATTACH close.

    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. È invece consigliabile utilizzare CREATE DATABASE …We recommend that you use CREATE DATABASE … FOR ATTACH.FOR ATTACH instead.

Completamento: Dopo l'aggiornamento di un database di SQL Server Follow 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 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 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)
Scollegare un database Detach a Database