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

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Desanexa um banco de dados que não está em uso atualmente em uma instância de servidor e, opcionalmente, executa UPDATE STATISTICS em todas as tabelas antes de desanexar.Detaches a database that is currently not in use from a server instance and, optionally, runs UPDATE STATISTICS on all tables before detaching.

Importante

Para que um banco de dados replicado seja desanexado, é preciso que ele seja não publicado.For a replicated database to be detached, it must be unpublished. Para obter mais informações, consulte "Comentários", posteriormente neste tópico.For more information, see the "Remarks" section later in this topic.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

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

ArgumentosArguments

[ @dbname = ] 'database_name' é o nome do banco de dados a ser desanexado.[ @dbname = ] 'database_name' Is the name of the database to be detached. database_name é um valor de sysname , com um valor padrão de NULL.database_name is a sysname value, with a default value of NULL.

[ @skipchecks = ] 'skipchecks' especifica se a estatística de atualização deve ser ignorada ou executada.[ @skipchecks = ] 'skipchecks' Specifies whether to skip or run UPDATE STATISTIC. skipchecks é um valor nvarchar (10) , com um valor padrão de NULL.skipchecks is a nvarchar(10) value, with a default value of NULL. Para ignorar as estatísticas de atualização, especifique true.To skip UPDATE STATISTICS, specify true. Para executar explicitamente UPDATE STATISTICs, especifique false.To explicitly run UPDATE STATISTICS, specify false.

Por padrão, UPDATE STATISTICS é executado para atualizar as informações sobre os dados nas tabelas e os índices.By default, UPDATE STATISTICS is performed to update information about the data in the tables and indexes. A execução de UPDATE STATISTICS é útil para bancos de dados que serão movidos para mídias somente leitura.Performing UPDATE STATISTICS is useful for databases that are to be moved to read-only media.

[ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' especifica que o arquivo de índice de texto completo associado ao banco de dados que está sendo desanexado não será removido durante a operação de desanexação do banco de dados.[ @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 é um valor nvarchar (10) com um padrão de true.KeepFulltextIndexFile is a nvarchar(10) value with a default of true. Se keepfulltextindexfile for false, todos os arquivos de índice de texto completo associados ao banco de dados e os metadados do índice de texto completo serão descartados, a menos que o banco de dados seja somente leitura.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 for NULL ou true, os metadados relacionados a texto completo serão mantidos.If NULL or true, full-text related metadata are kept.

Importante

O parâmetro @keepfulltextindexfile será removido em uma versão futura do SQL ServerSQL Server.The @keepfulltextindexfile parameter will be removed in a future version of SQL ServerSQL Server. Não use esse parâmetro em desenvolvimentos novos e modifique, assim que possível, os aplicativos que atualmente o usam.Do not use this parameter in new development work, and modify applications that currently use this parameter as soon as possible.

Valores do código de retornoReturn Code Values

0 (êxito) ou 1 (falha)0 (success) or 1 (failure)

Conjuntos de resultadosResult Sets

Nenhum.None

RemarksRemarks

Quando um banco de dados é desanexado, todos os metadados são descartados.When a database is detached, all its metadata is dropped. Se o banco de dados for o banco de dados padrão de qualquer conta de logon, o mestre se tornará seu banco de dados padrão.If the database was the default database of any login accounts, master becomes their default database.

Observação

Para obter informações sobre como exibir o banco de dados padrão de todas as contas de logon, consulte (SP_HELPLOGINS)Transact-SQL.For information about how to view the default database of all the login accounts, see sp_helplogins (Transact-SQL). Se você tiver as permissões necessárias, poderá usar ALTER LOGIN para atribuir um novo banco de dados padrão a um logon.If you have the required permissions, you can use ALTER LOGIN to assign a new default database to a login.

RestriçõesRestrictions

Um banco de dados não pode ser desanexado se algum dos seguintes fatores for verdadeiro:A database cannot be detached if any of the following are true:

  • O banco de dados está atualmente em uso.The database is currently in use. Para obter mais informações, consulte "Obtendo acesso exclusivo”, posteriormente neste tópico.For more information, see "Obtaining Exclusive Access," later in this topic.

  • Se duplicado, o banco de dados será publicado.If replicated, the database is published.

    Antes de poder desanexar o banco de dados, você deve desabilitar a publicação executando sp_replicationdboption.Before you can detach the database, you must disable publishing by running sp_replicationdboption.

    Observação

    Se não for possível usar sp_replicationdboption, você poderá remover a replicação executando sp_removedbreplication.If you cannot use sp_replicationdboption, you can remove replication by running sp_removedbreplication.

  • Há um instantâneo do banco de dados no banco de dados.A database snapshot exists on the database.

    Antes de poder desanexar o banco de dados, você deve descartar todos os seus instantâneos.Before you can detach the database, you must drop all of its snapshots. Para obter mais informações, veja Remover um instantâneo de banco de dados (Transact-SQL).For more information, see Drop a Database Snapshot (Transact-SQL).

    Observação

    Um instantâneo do banco de dados não pode ser desanexado ou anexado.A database snapshot cannot be detached or attached.

  • O banco de dados está sendo espelhado.The database is being mirrored.

    O banco de dados não pode ser desanexado até que a sessão de espelhamento de banco de dados seja encerrada.The database cannot be detached until the database mirroring session is terminated. Para obter mais informações, veja Removendo o espelhamento de banco de dados (SQL Server).For more information, see Removing Database Mirroring (SQL Server).

  • O banco de dados é suspeito.The database is suspect.

    É preciso colocar um banco de dados suspeito em modo de emergência antes de poder desanexá-lo.You must put a suspect database into emergency mode before you can detach the database. Para obter mais informações sobre como colocar um banco de dados em modo de emergência, veja ALTER DATABASE (Transact-SQL).For more information about how to put a database into emergency mode, see ALTER DATABASE (Transact-SQL).

  • O banco de dados é um banco de dados de sistema.The database is a system database.

Obtendo acesso exclusivoObtaining Exclusive Access

A desanexação de um banco de dados exige acesso exclusivo ao banco de dados.Detaching a database requires exclusive access to the database. Se o banco de dados a ser dexanexado estiver em uso, antes que ele possa ser desanexado, defina o banco de dados como modo SINGLE_USER para obter acesso exclusivo.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.

Antes de definir o banco de dados como SINGLE_USER, verifique se a opção AUTO_UPDATE_STATISTICS_ASYNC está definida como OFF.Before you set the database to SINGLE_USER, verify that the AUTO_UPDATE_STATISTICS_ASYNC option is set to OFF. Quando esta opção está definida como ON, o thread em segundo plano usado para a atualização de estatísticas estabelece uma conexão com o banco de dados e não será possível acessar o banco de dados em modo de usuário único.When this option is set to ON, the background thread that is used to update statistics takes a connection against the database, and you will be unable to access the database in single-user mode. Para obter mais informações, consulte definir um banco de dados para o modo de usuário único.For more information, see set a database to single user mode.

Por exemplo, a instrução ALTER DATABASE a seguir obtém acesso exclusivo ao banco de dados AdventureWorks2012AdventureWorks2012 depois que todos os usuários atuais se desconectam do banco de dados.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  

Observação

Para forçar os usuários atuais do banco de dados imediatamente ou dentro de um determinado número de segundos, use também a opção de reversão: ALTER DATABASE database_name SET SINGLE_USER com reversão 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. Para obter mais informações, veja ALTER DATABASE (Transact-SQL).For more information, see ALTER DATABASE (Transact-SQL).

Reanexando um banco de dadosReattaching a Database

Os arquivos desanexados permanecem e podem ser anexados novamente com o uso de CREATE DATABASE (com a opção FOR ATTACH ou 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). Os arquivos podem ser movidos para outro servidor, onde podem ser anexados.The files can be moved to another server and attached there.

PermissõesPermissions

Requer associação na função de servidor fixa sysadmin ou associação na função de db_owner do banco de dados.Requires membership in the sysadmin fixed server role or membership in the db_owner role of the database.

ExemplosExamples

O exemplo a seguir desanexa o banco de dados AdventureWorks2012AdventureWorks2012 com skipchecks definido como true.The following example detaches the AdventureWorks2012AdventureWorks2012 database with skipchecks set to true.

EXEC sp_detach_db 'AdventureWorks2012', 'true';  

O exemplo a seguir desanexa o banco de dados AdventureWorks2012AdventureWorks2012 e mantém os arquivos de índice de texto completo e os metadados de índice de texto completo.The following example detaches the AdventureWorks2012AdventureWorks2012 database and keeps the full-text index files and the metadata of the full-text index. Esse comando executa UPDATE STATISTICS, que é o comportamento padrão.This command runs UPDATE STATISTICS, which is the default behavior.

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

Consulte tambémSee Also

ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
Anexar e desanexar bancos de dados (SQL Server) Database Detach and Attach (SQL Server)
CREATE DATABASE (SQL Server Transact-SQL) CREATE DATABASE (SQL Server Transact-SQL)
Desanexar um banco de dadosDetach a Database