Aggiornare un database usando le operazioni di scollegamento e collegamento (Transact-SQL)

Si applica a:SQL Server

In questo argomento si illustra come utilizzare le operazioni di collegamento e scollegamento per aggiornare un database di SQL Server. Dopo essere stato collegato a SQL Server, il database è immediatamente disponibile e viene aggiornato automaticamente. Questo impedisce l'uso del database con una versione precedente del motore di database. Tuttavia l'aggiornamento dei metadati non interessa l'impostazione Livello di compatibilità database per un database. Per altre informazioni, vedere Livello di compatibilità del database dopo l'aggiornamento più avanti in questo argomento.

Contenuto dell'argomento

Prima di iniziare

Limitazioni e restrizioni

  • I database di sistema non possono essere collegati.

  • Collegare e scollegare la disabilitazione del concatenamento della proprietà tra database per il database impostando l'opzione cross db ownership chaining su 0. Per informazioni su come abilitare il concatenamento, vedere Opzione di configurazione del server cross db ownership chaining.

  • Quando si collega un database replicato che è stato copiato anziché scollegato:

    • 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. Per altre informazioni, vedere 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. Per altre informazioni, vedere sp_removedbreplication (Transact-SQL).

Consigli

È consigliabile evitare di collegare o ripristinare database provenienti da origini sconosciute o non attendibili. Tali database possono contenere codice dannoso che potrebbe eseguire codice Transact-SQL indesiderato o causare errori modificando lo schema o la struttura fisica del database. 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.

Per aggiornare un database utilizzando le operazioni di collegamento e scollegamento

  1. Scollegare il database. Per altre informazioni, vedere Scollegare un database.

  2. Spostare facoltativamente il file o i file del database scollegato e il file o i file di log.

    È consigliabile spostare i file di log insieme ai file di dati anche se si prevede di creare nuovi file di log. In alcuni casi, per il ricollegamento di un database sono necessari i file di log esistenti. Mantenere pertanto sempre tutti i file di log scollegati fino a quando il database non è stato collegato senza di essi.

    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. Se in questa posizione esiste ancora la copia originale del log, verrà collegata tale copia. 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.

  3. Collegare i file copiati all'istanza di destinazione di SQL Server. Per altre informazioni, vedere Attach a Database.

Esempio

Nell'esempio seguente di aggiorna una copia di un database da una versione precedente di SQL Server. Le istruzioni Transact-SQL vengono eseguite in una finestra dell'editor di query connessa all'istanza del server a cui è collegata.

  1. Scollegare il database eseguendo le istruzioni Transact-SQL riportate di seguito:

    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.

    Importante

    Nel caso di un database di produzione, è preferibile posizionare il database e il log delle transazioni su dischi separati. Le due entità hanno requisiti di I/O e crescita dei file diversi, pertanto la procedura consigliata è la separazione del database e del log delle transazioni.

    Per copiare i file in rete su un disco di un computer remoto, utilizzare il nome UNC (Universal Naming Convention) della posizione remota. Il formato di un nome UNC è \\Servername\Sharename\Path\Filename. Come per la scrittura di file nel disco rigido locale, è necessario che l'account utente utilizzato dall'istanza di SQL Server disponga delle autorizzazioni appropriate per la lettura o la scrittura di un file nel disco remoto.

  3. Collegare il database spostato e, facoltativamente, il relativo log tramite l'esecuzione dell'istruzione Transact-SQL seguente:

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

    In SQL Server Management Studio, un database appena collegato non è immediatamente visibile in Esplora oggetti. Per visualizzarlo, in Esplora oggetti scegliere Aggiorna dal menu Visualizza. Quando si espande il nodo Database in Esplora oggetti, il database appena collegato viene visualizzato nell'elenco dei database.

Completamento: Dopo l'aggiornamento di un database di SQL Server

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 . 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. A seconda della quantità di dati indicizzati, l'importazione può richiedere diverse ore, mentre la ricompilazione può risultare dieci volte più lunga. 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. Per modificare l'impostazione della proprietà del server upgrade_option , usare sp_fulltext_service.

Livello di compatibilità del database dopo l'aggiornamento

Dopo l'aggiornamento, il livello di compatibilità del database rimane a livello di compatibilità precedente all'aggiornamento, a meno che tale livello di compatibilità non sia supportato nella nuova versione. In questo caso, il livello di compatibilità del database è impostato sul livello di compatibilità supportato più basso.

Per esempio, se viene collegato un database con livello di compatibilità 90 prima del collegamento all'istanza di SQL Server 2019 (15.x), dopo l'aggiornamento, il livello di compatibilità è impostato a 100, che è il livello di compatibilità supportato più basso su SQL Server 2019 (15.x). Per altre informazioni, vedere Livello di compatibilità ALTER DATABASE (Transact-SQL).

Gestione dei metadati nell'istanza del server aggiornata

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. Per altre informazioni, vedere Gestire i metadati quando si rende disponibile un database in un'altra istanza del server (SQL Server).

Modifica della crittografia della chiave master di servizio e della chiave master di database da 3DES a AES

SQL Server 2012 (11.x) e versioni successive usano l'algoritmo di crittografia AES per proteggere la chiave master del servizio (SMK) e la chiave master del database (DMK). AES è un algoritmo di crittografia più recente rispetto a 3DES utilizzato nelle versioni precedenti. Quando un database viene collegato per la prima volta a una nuova istanza di SQL Server o viene ripristinato, nel server non viene ancora archiviata una copia della chiave master del database (crittografata dalla chiave master del servizio). È necessario usare l'istruzione OPEN MASTER KEY per decrittografare la chiave master del database (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). Quando un database è stato aggiornato da una versione precedente, la DMK deve essere rigenerata per usare l'algoritmo AES più recente. Per altre informazioni sulla rigenerazione della chiave DMK, vedere 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. È 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.