sp_detach_db (Transact-SQL)sp_detach_db (Transact-SQL)

SI APPLICA A: sìSQL Server noDatabase SQL di Azure noAzure SQL Data Warehouse noParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Scollega un database attualmente non in uso da un'istanza del server e, facoltativamente, esegue UPDATE STATISTICS su tutte le tabelle prima dello scollegamento.Detaches a database that is currently not in use from a server instance and, optionally, runs UPDATE STATISTICS on all tables before detaching.

Importante

Per poter scollegare un database replicato, è necessario che non sia pubblicato.For a replicated database to be detached, it must be unpublished. Per ulteriori informazioni, vedere la sezione "Osservazioni" di seguito in questo argomento.For more information, see the "Remarks" section later in this topic.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

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

ArgomentiArguments

[ @dbname = ] 'database_name' È il nome del database da scollegare.[ @dbname = ] 'database_name' Is the name of the database to be detached. database_name è un sysname valore, con un valore predefinito NULL.database_name is a sysname value, with a default value of NULL.

[ @skipchecks = ] 'skipchecks' Specifica se ignorare o eseguire UPDATE STATISTIC.[ @skipchecks = ] 'skipchecks' Specifies whether to skip or run UPDATE STATISTIC. skipchecks è un nvarchar(10) valore, con un valore predefinito NULL.skipchecks is a nvarchar(10) value, with a default value of NULL. Per ignorare UPDATE STATISTICS, specificare true.To skip UPDATE STATISTICS, specify true. Per eseguire in modo esplicito UPDATE STATISTICS, specificare false.To explicitly run UPDATE STATISTICS, specify false.

Per impostazione predefinita, l'istruzione UPDATE STATISTICS viene eseguita per aggiornare le informazioni sui dati nelle tabelle e negli indici.By default, UPDATE STATISTICS is performed to update information about the data in the tables and indexes. L'esecuzione di UPDATE STATISTICS risulta utile per i database che devono essere spostati su supporti di sola lettura.Performing UPDATE STATISTICS is useful for databases that are to be moved to read-only media.

[ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' Specifica che il file di indice full-text associato al database che si desidera scollegare non verrà eliminato il database durante l'operazione di scollegamento.[ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' Specifies that the full-text index file associated with the database that is being detached will not be dropped during the database detach operation. KeepFulltextIndexFile è un nvarchar(10) valore e il valore predefinito true.KeepFulltextIndexFile is a nvarchar(10) value with a default of true. Se KeepFulltextIndexFile viene false, tutti i file di indice full-text associati al database e vengono eliminati i metadati dell'indice full-text, a meno che il database è di sola lettura.If KeepFulltextIndexFile is false, all the full-text index files associated with the database and the metadata of the full-text index are dropped, unless the database is read-only. Se è NULL oppure true, full-text relativi metadati vengono mantenuti.If NULL or true, full-text related metadata are kept.

Importante

Il @keepfulltextindexfile** parametro verrà rimosso in una versione futura di SQL ServerSQL Server.The@keepfulltextindexfile** parameter will be removed in a future version of SQL ServerSQL Server. Non utilizzare questo parametro in un nuovo progetto di sviluppo e modificare non appena possibile le applicazioni in cui viene attualmente utilizzato.Do not use this parameter in new development work, and modify applications that currently use this parameter as soon as possible.

Valori restituitiReturn Code Values

0 (esito positivo) o 1 (esito negativo)0 (success) or 1 (failure)

Set di risultatiResult Sets

NessunaNone

NoteRemarks

Quando un database è scollegato, tutti i suoi metadati vengono eliminati.When a database is detached, all its metadata is dropped. Se il database predefinito di qualsiasi account di accesso, si aggirava master diventa il database predefinito.If the database was the default database of any login accounts, master becomes their default database.

Nota

Per informazioni su come visualizzare il database predefinito di tutti gli account di accesso, vedere sp_helplogins (Transact-SQL).For information about how to view the default database of all the login accounts, see sp_helplogins (Transact-SQL). Se si dispone delle autorizzazioni necessarie, è possibile usare ALTER LOGIN per assegnare un nuovo database predefinito a un account di accesso.If you have the required permissions, you can use ALTER LOGIN to assign a new default database to a login.

RestrizioniRestrictions

Non è possibile scollegare un database se una delle seguenti condizioni è vera:A database cannot be detached if any of the following are true:

  • Il database è attualmente in uso.The database is currently in use. Per ulteriori informazioni, vedere la sezione "Come ottenere l'accesso esclusivo" di seguito in questo argomento.For more information, see "Obtaining Exclusive Access," later in this topic.

  • Se è replicato, il database viene pubblicato.If replicated, the database is published.

    Prima di poter scollegare il database, è necessario disabilitare la pubblicazione eseguendo sp_replicationdboption.Before you can detach the database, you must disable publishing by running sp_replicationdboption.

    Nota

    Se non è possibile usare sp_replicationdboption, rimuovere la replica eseguendo sp_removedbreplication.If you cannot use sp_replicationdboption, you can remove replication by running sp_removedbreplication.

  • Uno snapshot del database esiste nel database.A database snapshot exists on the database.

    Prima di scollegare il database, è necessari eliminare tutti i relativi snapshot.Before you can detach the database, you must drop all of its snapshots. Per altre informazioni, vedere Eliminare uno snapshot del database (Transact-SQL)o a un'istanza diversa.For more information, see Drop a Database Snapshot (Transact-SQL).

    Nota

    Non è possibile scollegare o collegare uno snapshot del database.A database snapshot cannot be detached or attached.

  • È in corso il mirroring del database.The database is being mirrored.

    Non è possibile scollegare il database finché non viene terminata la sessione di mirroring del database.The database cannot be detached until the database mirroring session is terminated. Per altre informazioni, vedere Rimozione del mirroring del database (SQL Server).For more information, see Removing Database Mirroring (SQL Server).

  • Il database è sospetto.The database is suspect.

    Per scollegare un database sospetto è prima necessario attivare la modalità di emergenza.You must put a suspect database into emergency mode before you can detach the database. Per ulteriori informazioni sull'attivazione della modalità di emergenza per un database, vedere ALTER DATABASE (Transact-SQL).For more information about how to put a database into emergency mode, see ALTER DATABASE (Transact-SQL).

  • Il database è un database di sistema.The database is a system database.

Come ottenere l'accesso esclusivoObtaining Exclusive Access

Per scollegare un database, è necessario l'accesso esclusivo al database.Detaching a database requires exclusive access to the 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.If the database that you want to detach is in use, before you can detach it, set the database to SINGLE_USER mode to obtain exclusive access.

Seguente, ad esempio, ALTER DATABASE istruzione Ottiene l'accesso esclusivo al AdventureWorks2012AdventureWorks2012 database dopo la disconnessione di tutti gli utenti correnti dal database.For example, the following ALTER DATABASE statement obtains exclusive access to the AdventureWorks2012AdventureWorks2012 database after all current users disconnect from the database.

USE master;  
ALTER DATABASE AdventureWorks2012  
SET SINGLE_USER;  
GO  

Nota

Per forzare 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.To force current users out of the database immediately or within a specified number of seconds, also use the ROLLBACK option: ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK rollback_option. Per altre informazioni, vedere ALTER DATABASE (Transact-SQL).For more information, see ALTER DATABASE (Transact-SQL).

Ricollegamento di un databaseReattaching a Database

I file scollegati non vengono eliminati e possono essere ricollegati tramite CREATE DATABASE (con l'opzione FOR ATTACH o FOR ATTACH_REBUILD_LOG).The detached files remain and can be reattached by using CREATE DATABASE (with the FOR ATTACH or FOR ATTACH_REBUILD_LOG option). È possibile spostare e quindi collegare tali file in un altro server.The files can be moved to another server and attached there.

PermissionsPermissions

Richiede l'appartenenza al sysadmin fisso di server o appartenenza al ruolo il db_owner ruolo del database.Requires membership in the sysadmin fixed server role or membership in the db_owner role of the database.

EsempiExamples

Nell'esempio seguente viene scollegato il AdventureWorks2012AdventureWorks2012 del database con skipchecks impostato su true.The following example detaches the AdventureWorks2012AdventureWorks2012 database with skipchecks set to true.

EXEC sp_detach_db 'AdventureWorks2012', 'true';  

Nell'esempio seguente viene scollegato il database AdventureWorks2012AdventureWorks2012 e vengono mantenuti i file di indice full-text e i metadati dell'indice full-text.The following example detaches the AdventureWorks2012AdventureWorks2012 database and keeps the full-text index files and the metadata of the full-text index. Per impostazione predefinita, questo comando esegue UPDATE STATISTICS.This command runs UPDATE STATISTICS, which is the default behavior.

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

Vedere ancheSee Also

ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
Collegamento e scollegamento di un database (SQL Server) Database Detach and Attach (SQL Server)
CREATE DATABASE (SQL Server Transact-SQL) CREATE DATABASE (SQL Server Transact-SQL)
Scollegare un databaseDetach a Database