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

Nota sulla protezioneNota sulla protezione

È consigliabile non collegare o ripristinare database da origini sconosciute o non attendibili. Questi database potrebbero contenere malware che può eseguire codice Transact-SQL imprevisto o causare errori tramite la modifica dello schema o della 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 nel database, ad esempio le stored procedure o altro codice definito dall'utente.

In SQL Server 2008 è possibile utilizzare le operazioni di scollegamento e collegamento per aggiornare un database utente da SQL Server 2000 o SQL Server 2005. Dopo avere collegato un database di SQL Server 2005 o SQL Server 2000 a SQL Server 2008, il database viene reso immediatamente disponibile e viene quindi aggiornato automaticamente.

Esistono tuttavia le limitazioni seguenti:

  • Le copie del database master, model o msdb create con SQL Server 2000 o SQL Server 2005 non possono essere collegate.

  • 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).

  • Quando si utilizza la parola chiave APPLY, PIVOT, TABLESAMPLE o UNPIVOT sui database aggiornati da SQL Server 2000 a SQL Server 2008, è necessario che il livello di compatibilità del database sia impostato su 100. Per impostare il livello di compatibilità del database, vedere sp_dbcmptlevel (Transact-SQL).

    Nota importanteImportante

    In SQL Server 2000 Service Pack 3 (SP3) e nelle versioni successive di SQL Server, le operazioni di collegamento e scollegamento disabilitano il concatenamento della proprietà tra database impostando l'opzione cross db ownership chaining su 0. Per informazioni sull'abilitazione del concatenamento, vedere Opzione cross db ownership chaining.

Opzione di aggiornamento dell'indice full-text

[!NOTA]

Dopo aver collegato un database di SQL Server 2005 o SQL Server 2000 a SQL Server 2008, il database viene reso immediatamente disponibile e viene quindi aggiornato automaticamente. Se il database include indici full-text, questi vengono importati, reimpostati o ricostruiti 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 ricostruzione (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 ricostruzione può risultare dieci volte più lunga. Si noti inoltre che quando l'opzione di aggiornamento è impostata sull'importazione, gli indici full-text associati vengono ricostruiti se non è disponibile un catalogo full-text. Per modificare l'impostazione della proprietà del server upgrade_option, utilizzare sp_fulltext_service.

Procedure

Per aggiornare un database utilizzando le operazioni di scollegamento e collegamento

  1. Scollegare il database dall'istanza di SQL Server 7.0 o SQL Server 2000 utilizzando la stored procedure sp_detach_db.

    Per ulteriori informazioni, vedere la documentazione in linea di SQL Server relativa a tale versione di SQL Server.

    [!NOTA]

    In SQL Server 2005 la stored procedure dispone di nuove opzioni. Per ulteriori informazioni, vedere sp_detach_db (Transact-SQL).

  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 2005 utilizzando l'istruzione CREATE DATABASE con l'opzione FOR ATTACH o FOR ATTACH_REBUILD_LOG.

    [!NOTA]

    Per informazioni sul collegamento di un database di SQL Server 2005 mediante Esplora oggetti, vedere Procedura: Collegamento di un database (SQL Server Management Studio).

  4. È consigliabile eseguire DBCC UPDATEUSAGE sul database aggiornato.

    Nelle versioni precedenti di SQL Server i valori relativi al conteggio delle righe delle tabelle e degli indici e al conteggio delle pagine potrebbero non essere più corretti. È quindi possibile che nei database creati con versioni precedenti a SQL Server 2005 i conteggi non siano corretti. Dopo aver aggiornato un database a SQL Server 2005, è consigliabile eseguire DBCC UPDATEUSAGE per correggere eventuali conteggi non validi. Questa istruzione DBCC corregge i conteggi relativi a righe, pagine utilizzate, pagine riservate, pagine foglia e pagine di dati per ogni partizione in una tabella o indice. Per ulteriori informazioni, vedere DBCC UPDATEUSAGE (Transact-SQL).

  5. Se si crea una copia del database anziché spostarlo, è possibile ricollegare il database originale nell'istanza di SQL Server 7.0 o SQL Server 2000 utilizzando la stored procedure sp_attach_db o sp_attach_single_file_db.

    Per ulteriori informazioni, vedere la documentazione in linea di SQL Server relativa a tale versione di SQL Server.

Livello di compatibilità del database dopo l'aggiornamento

I livelli di compatibilità dei database tempdb, model, msdb e Resource sono impostati su 100 dopo l'aggiornamento. Il database di sistema master mantiene il livello di compatibilità che aveva prima dell'aggiornamento, a condizione che tale livello non sia minore di 80. Se il livello di compatibilità di master è minore di 80 prima dell'aggiornamento, viene impostato su 80 dopo l'aggiornamento.

Se il livello di compatibilità di un database utente è 80 o 90 prima dell'aggiornamento, rimane invariato dopo l'aggiornamento. Se il livello di compatibilità è 70 o meno prima dell'aggiornamento, nel database aggiornato viene impostato su 80, ovvero sul livello di compatibilità supportato più basso in SQL Server 2008.

[!NOTA]

I nuovi database utente erediteranno il livello di compatibilità del database modello.

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.

Esempi

Nell'esempio seguente viene aggiornato il database pubs di SQL Server 2000 a un database di SQL Server 2005 tramite l'utilizzo delle istruzioni Transact-SQL per lo scollegamento e il collegamento del database.

  1. Connettere SQL Server 2000 Query Analyzer a un'istanza del server a cui è collegato il database pubs e quindi scollegare il database utilizzando la stored procedure sp_detach_db.

    USE master;
    GO
    EXEC sp_detach_db @dbname = N'pubs';
    GO
    
  2. Ai fini di questo esempio, è necessario copiare, utilizzando la procedura desiderata, i file di pubs (pubs.mdf e pubs_log.ldf) da C:\Programmi\Microsoft SQL Server\MSSQL\Data\ (il percorso predefinito di pubs in SQL Server 2000) in C:\Programm\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\ (la directory dei dati di SQL Server 2005).

    Nota importanteImportante

    Nel caso di un database di produzione, memorizzare su dischi separati il database e il log delle transazioni.

    [!NOTA]

    Copiare i file in un disco su un computer remoto in rete utilizzando 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 da SQL Server disponga delle autorizzazioni necessarie per la lettura o la scrittura in un file nel disco remoto.

  3. Collegare il database pubs copiato e, facoltativamente, i file di log a un'istanza di SQL Server 2005 (in questo esempio viene utilizzato lo stesso nome di database). In SQL Server Management Studio, aprire l'editor di query e connettersi all'istanza del server a cui si desidera collegare il database utilizzando una nuova query.

    Eseguire l'istruzione CREATE DATABASE seguente:

    USE master;
    GO
    CREATE DATABASE pubs ON PRIMARY 
       (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs.mdf')
       LOG ON (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs_log.ldf')
       FOR ATTACH;
    GO
    

    [!NOTA]

    In SQL Server Management Studio un database appena collegato non è immediatamente visibile in Esplora oggetti. Per visualizzarlo, fare clic nella finestra di Esplora oggetti e quindi scegliere Visualizza > Aggiorna. Quando si espande il nodo Database, il database appena collegato viene visualizzato nell'elenco dei database.

  4. Ricollegare facoltativamente il database pubs originale all'istanza di SQL Server 2000 utilizzando la stored procedure sp_attach_db. A tale scopo, immettere il codice seguente in Query Analyzer:

    USE master;
    Go
    EXEC sp_attach_db @dbname = N'pubs', 
       @filename1 = 
          N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', 
       @filename2 = 
          N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf';
    GO