Aggiornamento di un database utilizzando le operazioni di scollegamento e collegamento (Transact-SQL)

In questo argomento si illustra come utilizzare le operazioni di collegamento e scollegamento per aggiornare un database di SQL Server 2005, SQL Server 2008 o SQL Server 2008 R2 in SQL Server 2012. Dopo essere stato collegato a SQL Server 2012, il database è immediatamente disponibile e viene aggiornato automaticamente.

Contenuto dell'argomento

  • Prima di iniziare:

    Limitazioni e restrizioni

    Consigli

  • Per aggiornare un database di SQL Server:

    Utilizzo delle operazioni di collegamento e scollegamento

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

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 sull'abilitazione del 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 ulteriori 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 ulteriori informazioni, vedere sp_removedbreplication (Transact-SQL).

Consigli

È consigliabile non 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 di database. Prima di utilizzare un database proveniente da un'origine sconosciuta o non attendibile, eseguire DBCC CHECKDB nel database in un server non di produzione e quindi esaminare il codice del 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 ulteriori informazioni, vedere Scollegamento di 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 SQL Server 2012. Per ulteriori informazioni, vedere Collegare un database.

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]

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.

    Nota importanteImportante

    Nel caso di un database di produzione, posizionare su dischi separati il database e il 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 nel database sono inclusi indici full-text, questi vengono importati, reimpostati o ricompilati dal processo di aggiornamento, a seconda dell'impostazione della proprietà del server upgrade_option. Se l'opzione di aggiornamento è impostata sull'importazione (upgrade_option = 2) o sulla 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, utilizzare sp_fulltext_service.

Livello di compatibilità del database dopo l'aggiornamento

Se il livello di compatibilità di un database utente è 90 o 100 prima dell'aggiornamento, rimane invariato dopo l'aggiornamento. Se il livello di compatibilità era 80 o un valore inferiore prima dell'aggiornamento, nel database aggiornato questo valore viene impostato su 90, cioè sul livello di compatibilità inferiore supportato in SQL Server 2012. Per ulteriori 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 ulteriori informazioni, vedere Gestione dei 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

In SQL Server 2012 si utilizza l'algoritmo 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 ripristinato, nel server non è ancora archiviata una copia della chiave master del database, crittografata dalla chiave master del servizio. È necessario utilizzare l'istruzione OPEN MASTER KEY per decrittografare la chiave master del database (DMK). Dopo aver decrittografato la DMK, è possibile utilizzare 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 utilizzare l'algoritmo AES più recente. Per ulteriori informazioni sulla rigenerazione della 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.

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]