sp_detach_db (Transact-SQL)

Data aggiornamento: 12 dicembre 2006

Scollega un database attualmente non in uso da un'istanza del server e, facoltativamente, esegue UPDATE STATISTICS su tutte le tabelle prima dello scollegamento.

ms188031.note(it-it,SQL.90).gifImportante:
Per poter scollegare un database replicato, è necessario che non sia pubblicato. Per ulteriori informazioni, vedere la sezione "Osservazioni" di seguito in questo argomento.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sp_detach_db [ @dbname= ] 'database_name' 
    [ , [ @skipchecks= ] 'skipchecks' ] 
    [ , [ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' ] 

Argomenti

  • [ @dbname=] 'database_name'
    Nome del database da scollegare. database_name è di tipo sysname e il valore predefinito è NULL.
  • [ @skipchecks = ] 'skipchecks'
    Specifica se ignorare o eseguire UPDATE STATISTIC. skipchecks è di tipo nvarchar(10) e il valore predefinito è NULL. Per ignorare UPDATE STATISTICS, specificare true. Per eseguire UPDATE STATISTICS in modo esplicito, specificare false.

    Per impostazione predefinita, l'istruzione UPDATE STATISTICS viene eseguita per aggiornare le informazioni sui dati nelle tabelle e negli indici in Motore di database di SQL Server 2005. L'esecuzione di UPDATE STATISTICS risulta utile per i database che devono essere spostati su supporti di sola lettura.

  • [ @keepfulltextindexfile= ] 'KeepFulltextIndexFile'
    Specifica che il file di indice full-text associato al database che si desidera scollegare non verrà eliminato durante l'operazione di scollegamento del database. KeepFulltextIndexFile è di tipo nvarchar(10) e il valore predefinito è true. Se KeepFulltextIndexFile è false, verranno eliminati tutti i file di indice full-text associati al database e i metadati dell'indice full-text, a meno che il database non sia di sola lettura. Se è NULL o true, i metadati correlati all'indice full-text vengono mantenuti.

Set di risultati

Nessuno

Osservazioni

Restrizioni

Non è possibile scollegare un database se una delle seguenti condizioni è vera:

  • Il database è attualmente in uso. Per ulteriori informazioni, vedere la sezione "Come ottenere l'accesso esclusivo" di seguito in questo argomento.

  • Se è replicato, il database viene pubblicato.
    Prima che sia possibile scollegare il database, è necessario disattivare la pubblicazione eseguendo sp_replicationdboption.

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

  • Uno snapshot del database esiste nel database.
    Prima di scollegare il database, è necessari eliminare 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.
    Non è possibile scollegare il database finché non viene terminata la sessione di mirroring del database. Per ulteriori informazioni, vedere Rimozione del mirroring del database.

  • Il database è sospetto.
    In SQL Server 2005 è necessario attivare la modalità di emergenza per un database sospetto prima che sia possibile scollegarlo. 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.

Come ottenere l'accesso esclusivo

Per scollegare un database, è necessario l'accesso esclusivo al database. Se il database che si desidera scollegare è in uso, per scollegarlo è necessario impostare la modalità SINGLE_USER, in modo da ottenere l'accesso esclusivo.

L'istruzione ALTER DATABASE seguente, ad esempio, consente di ottenere l'accesso esclusivo al database AdventureWorks dopo la disconnessione di tutti gli utenti correnti dal database.

USE master;
ALTER DATABASE AdventureWorks
SET SINGLE_USER;
GO

[!NOTA] Per forzare la disconnessione di tutti gli utenti correnti dal database immediatamente o entro un numero specificato di secondi, utilizzare anche l'opzione ROLLBACK: ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK rollback_option. Per ulteriori informazioni, vedere ALTER DATABASE (Transact-SQL).

Ricollegamento di un database

I file scollegati non vengono eliminati e possono essere ricollegati tramite CREATE DATABASE (con l'opzione FOR ATTACH o FOR ATTACH_REBUILD_LOG). È possibile spostare e quindi collegare tali file in un altro server.

Autorizzazioni

È richiesta l'appartenenza al ruolo predefinito del server sysadmin.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Esempi

Nell'esempio seguente viene scollegato il database AdventureWorks con skipchecks impostato su true.

EXEC sp_detach_db 'AdventureWorks', 'true';

Nell'esempio seguente viene scollegato il database AdventureWorks e vengono mantenuti i file di indice full-text e i metadati dell'indice full-text. Per impostazione predefinita, questo comando esegue UPDATE STATISTICS.

exec sp_detach_db @dbname='AdventureWorks'
    , @keepfulltextindexfile='true';

Vedere anche

Riferimento

ALTER DATABASE (Transact-SQL)
CREATE DATABASE (Transact-SQL)

Altre risorse

Scollegamento e collegamento di database
Protezione dei dati e dei file di log
Procedura: Scollegamento di un database (SQL Server Management Studio)

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

12 dicembre 2006

Nuovo contenuto:
  • Aggiunta alla sezione Osservazioni di un paragrafo sulla cancellazione della cache dei piani.
Contenuto modificato
  • Chiarimento delle impostazioni del parametro @keepfulltextindexfile.

17 luglio 2006

Nuovo contenuto:
  • Aggiunta della restrizione relativa allo scollegamento dei database di sistema.

14 aprile 2006

Nuovo contenuto:
  • Aggiunta dell'esempio in cui viene utilizzato @keepfulltextindexfile.
Contenuto modificato
  • Sostituzione di @KeepFulltextIndexFile con @keepfulltextindexfile.

5 dicembre 2005

Nuovo contenuto:
  • Aggiunta della restrizione in base alla quale il database non può essere in uso e della sezione su come ottenere l'accesso esclusivo prima di eseguire sp_detach_db.