Condividi tramite


sp_detach_db (Transact-SQL)

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

Nota importanteImportante

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 argomento Convenzioni 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 e versioni successive. 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.

    Nota importanteImportante

    Il parametro @keepfulltextindexfile verrà rimosso a partire da una delle versioni successive di SQL Server. Non utilizzare questo parametro in un nuovo progetto di sviluppo e modificare non appena possibile le applicazioni in cui viene attualmente utilizzato.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Set di risultati

Nessuno

Osservazioni

Quando un database è scollegato, tutti i suoi metadati vengono eliminati. Se il database è il database predefinito di un qualsiasi account di accesso, il database master viene impostato come database predefinito per tutti i metadati.

[!NOTA]

Per informazioni sulla visualizzazione del database predefinito di tutti gli account di accesso, vedere sp_helplogins (Transact-SQL). Se si dispone delle autorizzazioni necessarie, è possibile utilizzare ALTER LOGIN per assegnare un nuovo database predefinito a un account di accesso.

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 disabilitare 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 Eliminare 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 di mirroring del database (SQL Server).

  • Il database è sospetto.

    In SQL Server 2005 e versioni successive per scollegare un database sospetto è 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.

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 AdventureWorks2012 dopo la disconnessione di tutti gli utenti correnti dal database.

USE master;
ALTER DATABASE AdventureWorks2012
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.

Esempi

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

EXEC sp_detach_db 'AdventureWorks2012', 'true';

Nell'esempio seguente viene scollegato il database AdventureWorks2012 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='AdventureWorks2012'
    , @keepfulltextindexfile='true';

Vedere anche

Riferimento

ALTER DATABASE (Transact-SQL)

CREATE DATABASE (Transact-SQL)

Concetti

Collegamento e scollegamento di un database (SQL Server)

Scollegamento di un database