Scollegamento e collegamento di database

Data aggiornamento: 12 dicembre 2006

È possibile scollegare i file di dati e di log delle transazioni di un database e quindi ricollegarli alla stessa istanza di SQL Server o a un'istanza diversa. Scollegare e collegare un database risulta utile se si desidera assegnare il database a un'istanza diversa di SQL Server nello stesso computer oppure spostarlo.

[!NOTA] Il formato di archiviazione su disco di SQL Server è lo stesso sia negli ambienti a 64 bit sia negli ambienti a 32 bit. È pertanto possibile eseguire il collegamento tra ambienti a 32 bit e ambienti a 64 bit. Un database scollegato da un'istanza del server in esecuzione in un ambiente può essere collegato a un'istanza del server in esecuzione in un altro ambiente.

[!NOTA] Per informazioni sulle autorizzazioni per i file impostate quando un database viene scollegato e collegato, vedere Protezione dei dati e dei file di log.

Scollegamento di un database

Lo scollegamento di un database determina la rimozione del database dall'istanza di SQL Server, mentre i file di dati e i file del log delle transazioni inclusi nel database non vengono modificati. È quindi possibile utilizzare questi file per collegare il database a qualsiasi istanza di SQL Server, incluso il server dal quale è stato scollegato il database.

Non è possibile scollegare un database quando si verifica una delle condizioni seguenti:

  • Il database è replicato e pubblicato. Se replicato, il database deve essere non pubblicato. Prima dello scollegamento, è necessario disattivare la pubblicazione eseguendo sp_replicationdboption.

    [!NOTA] Se non è possibile utilizzare sp_replicationdboption, rimuovere la replica eseguendo sp_removedbreplication.

  • Nel database esiste uno snapshot del database.
    Prima di scollegare il database è necessario rimuovere tutti i relativi snapshot. Per ulteriori informazioni, vedere Procedura: Eliminazione di uno snapshot del database (Transact-SQL).

    [!NOTA] Non è possibile scollegare o collegare uno snapshot del database.

  • È in corso il mirroring del database in una sessione di mirroring.
    Non è possibile scollegare il database fino al termine della sessione. Per ulteriori informazioni, vedere Rimozione del mirroring del database.

  • Il database è sospetto. In SQL Server 2005 non è possibile scollegare un database sospetto. Per poter eseguire lo scollegamento, è prima necessario attivare la modalità di emergenza. Per ulteriori informazioni sull'attivazione della modalità di emergenza per un database, vedere ALTER DATABASE (Transact-SQL).

  • Il database è un database di sistema.

Lo scollegamento di un database comporta la cancellazione della cache dei piani per l'istanza di SQL Server. La cancellazione della cache dei piani comporta la ricompilazione di tutti i piani di esecuzione successivi e può causare un improvviso temporaneo peggioramento delle prestazioni di esecuzione delle query. In SQL Server 2005 Service Pack 2 il log degli errori di SQL Server contiene il messaggio informativo seguente per ogni archivio cache cancellato nella cache dei piani: "SQL Server ha rilevato %d occorrenza/e di scaricamento dell'archivio cache '%s' (parte della cache dei piani) a causa di operazioni di manutenzione o riconfigurazione del database". Questo messaggio viene registrato ogni cinque minuti per tutta la durata dello scaricamento della cache.

Per scollegare un database

Backup e ripristino e scollegamento

Lo scollegamento di un database di sola lettura comporta la perdita di informazioni sulle basi differenziali dei backup differenziali. Per ulteriori informazioni, vedere Esecuzione di backup di database di sola lettura.

Risposta agli errori di scollegamento

Gli errori generati durante lo scollegamento di un database possono impedire la chiusura corretta del database e la ricostruzione del log delle transazioni. Se viene visualizzato un messaggio di errore, eseguire gli interventi di correzione seguenti:

  1. Ricollegare tutti file associati al database, non solo il file primario.
  2. Risolvere il problema che ha causato l'errore.
  3. Scollegare di nuovo il database.

Collegamento di un database

È possibile collegare un database di SQL Server copiato o scollegato. In SQL Server 2005, i file full-text che fanno parte di un database vengono collegati insieme al database. Per ulteriori informazioni, vedere Collegamento e scollegamento di cataloghi full-text.

ms190794.security(it-it,SQL.90).gifNota sulla protezione:
È consigliabile evitare di collegare o ripristinare database provenienti da origini sconosciute o non attendibili. Questi database potrebbero contenere malware che può eseguire codice Transact-SQL indesiderato o causare errori modificando lo schema o la struttura fisica di database. Prima di utilizzare un database proveniente da una fonte 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.

Al momento del collegamento, viene eseguito l'avvio del database. In genere, il collegamento di un database non altera lo stato in cui questo si trovava al momento dello scollegamento o della copia. In SQL Server 2005, tuttavia, le operazioni di collegamento e scollegamento comportano la disattivazione del concatenamento della proprietà tra database per il database. Per informazioni su come abilitare il concatenamento, vedere Opzione cross db ownership chaining. Inoltre, quando il database viene collegato, l'opzione TRUSTWORTHY è impostata su OFF. Per informazioni su come impostare l'opzione TRUSTWORTHY su ON, vedere ALTER DATABASE (Transact-SQL).

Durante il collegamento di un database è necessario che tutti i file di dati (file MDF e NDF) siano disponibili. 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.

[!NOTA] Se il file di dati primario in corso di collegamento è di sola lettura, il Motore di database considera il database di sola lettura.

Quando un database crittografato viene collegato per la prima volta a un'istanza di SQL Server, è necessario che il proprietario del database apra la chiave master del database eseguendo l'istruzione OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'. È consigliabile attivare la decrittografia automatica della chiave master eseguendo l'istruzione ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY. Per ulteriori informazioni, vedere CREATE MASTER KEY (Transact-SQL) e ALTER MASTER KEY (Transact-SQL).

I requisiti necessari per il collegamento dei file di log dipendono in parte dallo stato di lettura/scrittura o di sola lettura del database, come illustrato di seguito.

  • Per i database di lettura/scrittura è in genere possibile collegare un file di log in una nuova posizione. In alcuni casi, tuttavia, per ricollegare un database sono necessari i relativi file di log esistenti. È pertanto importante mantenere sempre tutti i file di log scollegati finché il database non è stato collegato correttamente senza di essi.
    Se un database di lettura/scrittura include un singolo file di log e non se ne specifica una nuova posizione, durante l'operazione di collegamento il file viene cercato nella vecchia posizione. Se viene trovato, viene utilizzato il vecchio file di log, indipendentemente dal fatto che il database sia stato o meno chiuso correttamente. Se il vecchio file di log non viene trovato, il database è stato chiuso correttamente e non è presente una catena di log attiva, l'operazione di collegamento tenta di creare un nuovo file di log per il database. Per ulteriori informazioni, vedere Informazioni sull'architettura del log delle transazioni.
  • Se il file di dati primario in corso di collegamento è di sola lettura, il Motore di database considera il database di sola lettura. Nel caso di database di sola lettura, è necessario che i file di log si trovino nella posizione specificata nel file primario del database. La creazione di un nuovo file di log non è possibile, perché SQL Server non può aggiornare la posizione del log memorizzata nel file primario.
    ms190794.note(it-it,SQL.90).gifImportante:
    Quando si esegue lo scollegamento e il successivo ricollegamento di un database di sola lettura, le informazioni relative alla base differenziale vanno perdute. Ciò provoca la perdita di sincronizzazione tra il database master e il database di sola lettura. I backup differenziali eseguiti dopo questa operazione possono generare risultati imprevisti. Se si utilizzano backup differenziali con un database di sola lettura, pertanto, dopo aver ricollegato il database è necessario stabilire una base differenziale corrente eseguendo un backup completo.

Backup e ripristino e collegamento

Come nel caso di qualsiasi database completamente o parzialmente non in linea, non è possibile collegare un database con file in fase di ripristino. Se si interrompe la sequenza di ripristino, è possibile collegare il database. Sarà quindi possibile riavviare la sequenza di ripristino.

Collegamento di un database a un'altra istanza del server

Quando si collega un database a un'altra istanza del server, per garantire un utilizzo coerente a utenti e applicazioni, potrebbe essere necessario ricreare alcuni o tutti i metadati per il database, ad esempio account di accesso e processi, sull'altra istanza del server. Per ulteriori informazioni, vedere Gestione dei metadati quando si rende disponibile un database in un'altra istanza del server.

[!NOTA] Un database creato mediante una versione più recente di SQL Server non può essere collegato alle versioni precedenti.

[!NOTA] Il collegamento funziona correttamente con il formato di archiviazione vardecimal. Ogni istanza di Motore di database deve tuttavia essere aggiornata almeno a SQL Server 2005 Service Pack 2 e tutti i database correlati devono essere abilitati per il formato di archiviazione vardecimal. Ad esempio, un database di Service Pack 2 con il formato di archiviazione vardecimal attivato non può essere collegato a una versione precedente di SQL Server. Per ulteriori informazioni sul formato di archiviazione vardecimal, vedere Archiviazione di dati decimal come lunghezza variabile.

Per collegare un database

Per aggiornare un database da una versione precedente di SQL Server

In SQL Server 2005 è possibile utilizzare le operazioni di scollegamento e collegamento per aggiornare un database utente da SQL Server 7.0 o SQL Server 2000. Tuttavia, si applicano le limitazioni seguenti:

  • Le copie del database master, model o msdb create con SQL Server 7.0 o SQL Server 2000 non possono essere collegate in SQL Server 2005.
  • I file di log di SQL Server 7.0 che contengono operazioni di creazione di indici non possono essere collegati in SQL Server 2000 o SQL Server 2005.
  • Se si collega un database replicato 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 dopo il completamento 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 dopo il completamento dell'operazione di collegamento. Per ulteriori informazioni, vedere sp_removedbreplication (Transact-SQL).

Per aggiornare un database utilizzando le operazioni di scollegamento e collegamento

Spostamento di un database o di un file di database

ms190794.note(it-it,SQL.90).gifImportante:
Si consiglia di spostare i database utilizzando la procedura di rilocazione pianificata ALTER DATABASE anziché le operazioni di scollegamento e collegamento. Per ulteriori informazioni, vedere Spostamento dei file del database.

In genere, per spostare un database è possibile utilizzare le operazioni di scollegamento e collegamento. Alcuni scenari tipici includono lo spostamento di un database in una delle posizioni seguenti:

  • In un disco fisico diverso nello stesso computer. Quando, ad esempio, nel disco che contiene un file di dati si esaurisce lo spazio disponibile e si desidera espandere il file esistente, anziché espandere il database aggiungendo un nuovo file in un altro disco.
  • Su un computer diverso senza dover ricreare il database e quindi ripristinare il backup del database.

Lo spostamento di un database tramite operazioni di scollegamento e collegamento prevede le fasi seguenti:

  1. Scollegamento del database.
  2. Spostamento dei file di database sull'altro server o disco.
  3. Collegamento del database specificando la nuova posizione dei file spostati.

Per spostare un database utilizzando le operazioni di scollegamento e collegamento

Vedere anche

Concetti

Scollegamento e collegamento di database
Protezione dei dati e dei file di log
Informazioni su file e filegroup

Altre risorse

CREATE DATABASE (Transact-SQL)
sp_detach_db (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

12 dicembre 2006

Nuovo contenuto:
  • Aggiunta di una nota in cui si specifica che il formato di archiviazione su disco di SQL Server è lo stesso sia negli ambienti a 64 bit sia negli ambienti a 32 bit.
  • Aggiunta di una nota alla sezione "Collegamento di un database a un'altra istanza del server".
  • Aggiunta di una nota relativa al formato di archiviazione vardecimal.

17 luglio 2006

Nuovo contenuto:
  • Aggiunta di informazioni sulla cancellazione della cache dei piani nella sezione "Scollegamento di un database".

17 luglio 2006

Nuovo contenuto:
  • Aggiunta della limitazione relativa allo scollegamento di database di sistema.
  • Aggiunta della sezione "Backup e ripristino e scollegamento".
  • Aggiunta della sezione "Backup e ripristino e collegamento".

5 dicembre 2005

Nuovo contenuto:
  • Aggiunta della nota sulla protezione.