Aggiornamento di un database utilizzando le operazioni di scollegamento e collegamento (Transact-SQL)Upgrade a Database Using Detach and Attach (Transact-SQL)

In questo argomento si illustra come utilizzare le operazioni di collegamento e scollegamento per aggiornare un database di SQL Server 2017SQL Server 2017.This topic describes how to use detach and attach operations to upgrade a database in SQL Server 2017SQL Server 2017. Dopo essere stato collegato a SQL Server 2017SQL Server 2017, il database è immediatamente disponibile e viene aggiornato automaticamente.After being attached to SQL Server 2017SQL Server 2017, the database is available immediately and is automatically upgraded.

Contenuto dell'argomentoIn This Topic

Prima di iniziare Before You Begin

Limitazioni e restrizioni Limitations and Restrictions

  • I database di sistema non possono essere collegati.The system databases cannot be attached.

  • Collegare e scollegare la disabilitazione del concatenamento della proprietà tra database per il database impostando l'opzione cross db ownership chaining su 0.Attach and detach disable cross-database ownership chaining for the database by setting its cross db ownership chaining option to 0. Per informazioni su come abilitare il concatenamento, vedere Opzione di configurazione del server cross db ownership chaining.For information about enabling chaining, see cross db ownership chaining Server Configuration Option.

  • Quando si collega un database replicato che è stato copiato anziché scollegato:When attaching a replicated database that was copied instead of detached:

    • Se si collega il database a una versione aggiornata della stessa istanza del server, è necessario eseguire sp_vupgrade_replication per aggiornare la replica al termine dell'operazione di collegamento.If you attach the database to an upgraded version of the same server instance, you must execute sp_vupgrade_replication to upgrade replication after the attach operation finishes. Per altre informazioni, vedere sp_vupgrade_replication (Transact-SQL).For more information, see sp_vupgrade_replication (Transact-SQL).

    • Se si collega il database a un'istanza del server diversa (indipendentemente dalla versione), è necessario eseguire sp_removedbreplication per rimuovere la replica al termine dell'operazione di collegamento.If you attach the database to a different server instance (regardless of version), you must execute sp_removedbreplication to remove replication after the attach operation finishes. Per altre informazioni, vedere sp_removedbreplication (Transact-SQL).For more information, see sp_removedbreplication (Transact-SQL).

Indicazioni Recommendations

È 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 aggiornare un database utilizzando le operazioni di collegamento e scollegamento To Upgrade a Database by Using Detach and Attach

  1. Scollegare il database.Detach the database. Per altre informazioni, vedere Scollegare un database.For more information, see Detach a Database.

  2. Spostare facoltativamente il file o i file del database scollegato e il file o i file di log.Optionally, move the detached database file or files and the log file or files.

    È consigliabile spostare i file di log insieme ai file di dati anche se si prevede di creare nuovi file di log.You should move the log files along with the data files, even if you intend to create new log files. In alcuni casi, per il ricollegamento di un database sono necessari i file di log esistenti.In some cases, reattaching a database requires its existing log files. Mantenere pertanto sempre tutti i file di log scollegati fino a quando il database non è stato collegato senza di essi.Therefore, always keep all the detached log files until the database has been successfully attached without them.

    Nota

    Se si tenta di collegare il database senza specificare il file di log, verrà eseguita una ricerca di tale file nella relativa posizione originale.If you try to attach the database without specifying the log file, the attach operation will look for the log file in its original location. Se in questa posizione esiste ancora la copia originale del log, verrà collegata tale copia.If the original copy of the log still exists in that location, that copy is attached. Per evitare di utilizzare il file di log originale, specificare il percorso del nuovo file di log oppure rimuovere la copia originale del file di log dopo averlo copiato nella nuova posizione.To avoid using the original log file, either specify the path of the new log file or remove the original copy of the log file (after copying it to the new location).

  3. Collegare i file copiati all'istanza di SQL Server 2017SQL Server 2017.Attach the copied files to the instance of SQL Server 2017SQL Server 2017. Per altre informazioni, vedere Attach a Database.For more information, see Attach a Database.

EsempioExample

Nell'esempio seguente di aggiorna una copia di un database da una versione precedente di SQL Server.The following example upgrades a copy of a database from an earlier version of SQL Server. Le istruzioni Transact-SQLTransact-SQL vengono eseguite in una finestra dell'editor di query connessa all'istanza del server a cui è collegata.The Transact-SQLTransact-SQL statements are executed in a Query Editor window that is connected to the server instance to which is attached.

  1. Scollegare il database eseguendo le istruzioni Transact-SQLTransact-SQL riportate di seguito:Detach the database by executing the following Transact-SQLTransact-SQL statements:

    USE master;  
    GO  
    EXEC sp_detach_db @dbname = N'MyDatabase';  
    GO  
    
  2. Copiare i dati e i file di log nel nuovo percorso utilizzando il metodo scelto.Using the method of your choice, copy the data and log files to the new location.

    Importante

    Nel caso di un database di produzione, posizionare su dischi separati il database e il log delle transazioni.For a production database, place the database and transaction log on separate disks.

    Per copiare i file in rete su un disco di un computer remoto, utilizzare il nome UNC (Universal Naming Convention) della posizione remota.To copy files over the network to a disk on a remote computer, use the universal naming convention (UNC) name of the remote location. Il formato di un nome UNC è \\Servername\Sharename\Path\Filename.A UNC name takes the form \\Servername\Sharename\Path\Filename. Come per la scrittura di file nel disco rigido locale, è necessario che l'account utente utilizzato dall'istanza di SQL ServerSQL Serverdisponga delle autorizzazioni appropriate per la lettura o la scrittura di un file nel disco remoto.As with writing files to the local hard disk, the appropriate permissions that are required to read or write to a file on the remote disk must be granted to the user account used by the instance of SQL ServerSQL Server.

  3. Collegare il database spostato e, facoltativamente, il relativo log tramite l'esecuzione dell'istruzione Transact-SQLTransact-SQL seguente:Attach the moved database and, optionally, its log by executing the following Transact-SQLTransact-SQL statement:

    USE master;  
    GO  
    CREATE DATABASE MyDatabase   
        ON (FILENAME = 'C:\MySQLServer\MyDatabase.mdf'),  
        (FILENAME = 'C:\MySQLServer\Database.ldf')  
        FOR ATTACH;  
    GO  
    

    In SQL Server Management StudioSQL Server Management Studioun database appena collegato non è immediatamente visibile in Esplora oggetti.In SQL Server Management StudioSQL Server Management Studio, a newly attached database is not immediately visible in Object Explorer. Per visualizzarlo, in Esplora oggetti scegliere Aggiorna dal menu Visualizza.To view the database, in Object Explorer, click View, and then Refresh. Quando si espande il nodo Database in Esplora oggetti, il database appena collegato viene visualizzato nell'elenco dei database.When the Databases node is expanded in Object Explorer, the newly attached database now appears in the list of databases.

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

Se il database include indici full-text, il processo di aggiornamento li importa, li reimposta o li ricompila, a seconda dell'impostazione della proprietà del server upgrade_option .If the database has full-text indexes, the upgrade process either imports, resets, or rebuilds them, depending on the setting of the upgrade_option server property. Se l'opzione di aggiornamento è impostata per l'importazione (upgrade_option = 2) o la ricompilazione (upgrade_option = 0), gli indici full-text non saranno disponibili durante l'aggiornamento.If the upgrade option is set to import (upgrade_option = 2) or rebuild (upgrade_option = 0), 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 inoltre che quando l'opzione di aggiornamento è impostata sull'importazione, gli indici full-text associati vengono ricompilati se non è disponibile un catalogo full-text.Note also that when the upgrade option is set to import, the associated full-text indexes are rebuilt if a full-text catalog is not available. Per modificare l'impostazione della proprietà del server upgrade_option , usare sp_fulltext_service.To change the setting of the upgrade_option server property, use sp_fulltext_service.

Livello di compatibilità del database dopo l'aggiornamentoDatabase Compatibility Level After Upgrade

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 questo valore viene impostato su 100, cioè sul livello di compatibilità inferiore supportato 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).

Gestione dei metadati nell'istanza del server aggiornataManaging Metadata on the Upgraded Server Instance

Quando si collega un database a un'altra istanza del server, per garantire un sistema consistente a utenti e applicazioni, potrebbe essere necessario ricreare tutti i metadati del database o parte di essi, tra cui account di accesso, processi e autorizzazioni, 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, jobs, and permissions, on the other server instance. Per altre informazioni, vedere Gestire i 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).

Modifica della crittografia della chiave master di servizio e della chiave master di database da 3DES a AESService Master Key and Database Master Key Encryption changes from 3DES to AES

SQL Server 2012SQL Server 2012 e versioni successive usano l'algoritmo di crittografia AES per proteggere la chiave master del servizio (SMK) e la chiave master del database (DMK). and higher versions uses the AES encryption algorithm to protect the service master key (SMK) and the database master key (DMK). AES è un algoritmo di crittografia più recente rispetto a 3DES utilizzato nelle versioni precedenti.AES is a newer encryption algorithm than 3DES used in earlier versions. Quando un database viene collegato per la prima volta a una nuova istanza di SQL ServerSQL Servero ripristinato, nel server non è ancora archiviata una copia della chiave master del database, crittografata dalla chiave master del servizio.When a database is first attached or restored to a new instance of SQL ServerSQL Server, a copy of the database master key (encrypted by the service master key) is not yet stored in the server. È necessario usare l'istruzione OPEN MASTER KEY per decrittografare la chiave master del database.You must use the OPEN MASTER KEY statement to decrypt the database master key (DMK). Dopo aver decrittografato la DMK, è possibile usare l'istruzione ALTER MASTER KEY REGENERATE per abilitare la decrittografia automatica per le operazioni successive, in modo da fornire al server una copia della DMK crittografata con la chiave master del servizio (SMK).Once the DMK has been decrypted, you have the option of enabling automatic decryption in the future by using the ALTER MASTER KEY REGENERATE statement to provision the server with a copy of the DMK, encrypted with the service master key (SMK). Quando un database è stato aggiornato da una versione precedente, la DMK deve essere rigenerata per usare l'algoritmo AES più recente.When a database has been upgraded from an earlier version, the DMK should be regenerated to use the newer AES algorithm. Per altre informazioni sulla rigenerazione della DMK, vedere ALTER MASTER KEY (Transact-SQL).For more information about regenerating the DMK, see ALTER MASTER KEY (Transact-SQL). Il tempo richiesto per rigenerare la chiave DMK e aggiornarla ad AES dipende dal numero di oggetti protetti dalla DMK.The time required to regenerate the DMK key to upgrade to AES depends upon the number of objects protected by the DMK. È necessario rigenerare la chiave DMK per l'aggiornamento ad AES una sola volta e l'operazione non influenza le rigenerazioni future che fanno parte di una strategia di rotazione della chiave.Regenerating the DMK key to upgrade to AES is only necessary once, and has no impact on future regenerations as part of a key rotation strategy.