sp_detach_db (Transact-SQL)
Desanexa um banco de dados que não está em uso atualmente em uma instância de servidor e, como opção, executa UPDATE STATISTICS em todas as tabelas antes de desanexar.
Importante |
---|
Para que um banco de dados replicado seja desanexado, é preciso que ele seja não publicado. Para obter mais informações, consulte "Comentários", mais adiante neste tópico. |
Sintaxe
sp_detach_db [ @dbname= ] 'database_name'
[ , [ @skipchecks= ] 'skipchecks' ]
[ , [ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' ]
Argumentos
[ @dbname = ] 'database_name'
É o nome do banco de dados a ser desanexado. database_name é um valor sysname com um valor padrão de NULL.[ @skipchecks = ] 'skipchecks'
Especifica se é necessário ignorar ou executar UPDATE STATISTIC. skipchecks é um valor nvarchar(10) com um valor padrão de NULL. Para ignorar UPDATE STATISTICS, especifique true. Para executar explicitamente UPDATE STATISTICS, especifique false.Por padrão, UPDATE STATISTICS é executado para atualizar as informações sobre os dados nas tabelas e os índices no Mecanismo de Banco de Dados do SQL Server 2005 e nas versões posteriores. A execução de UPDATE STATISTICS é útil para bancos de dados que serão movidos para mídias somente leitura.
[ @keepfulltextindexfile= ] 'KeepFulltextIndexFile'
Especifica se o arquivo de índice de texto completo associado ao banco de dados que está sendo desanexado não será descartado durante a operação de desanexação do banco de dados. KeepFulltextIndexFile é um valor nvarchar(10) com um padrão de true. Se KeepFulltextIndexFile for false, todos os arquivos de índices de texto completo associados ao banco de dados e aos metadados de índice de texto completo serão descartados, a menos que o banco de dados seja somente leitura. Se NULL ou true, os metadados relativos a texto completo serão mantidos.Importante O parâmetro @keepfulltextindexfile será removido em uma futura versão do SQL Server. Não utilize esse parâmetro em desenvolvimentos novos e modifique, assim que possível, os aplicativos que atualmente o utilizam.
Valores de código de retorno
0 (êxito) ou 1 (falha)
Conjuntos de resultados
Nenhum
Comentários
Quando um banco de dados é desanexado, todos os metadados são descartados. Se o banco de dados era o banco de dados padrão de quaisquer contas de logon, o mestre se torna o banco de dados padrão delas.
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). Se você tiver as permissões exigidas, poderá usar ALTER LOGIN para atribuir um novo banco de dados padrão para um logon. |
Restrições
Um banco de dados não pode ser desanexado se algum dos seguintes fatores for verdadeiro:
O banco de dados está atualmente em uso. Para obter mais informações, consulte "Obtendo acesso exclusivo”, posteriormente neste tópico.
Se duplicado, o banco de dados será publicado.
Antes de poder desanexar o banco de dados, é preciso desabilitar a publicação executando sp_replicationdboption.
Observação Se não for possível usar sp_replicationdboption, você poderá remover a replicação executando sp_removedbreplication.
Há um instantâneo do banco de dados no banco de dados.
Antes de poder desanexar o banco de dados, você deve descartar todos os seus instantâneos. Para obter mais informações, consulte Como descartar um instantâneo do banco de dados (Transact-SQL).
Observação Um instantâneo do banco de dados não pode ser desanexado ou anexado.
O banco de dados está sendo espelhado.
O banco de dados não pode ser desanexado até que a sessão de espelhamento de banco de dados seja encerrada. Para obter mais informações, consulte Removendo o espelhamento de banco de dados.
O banco de dados é suspeito.
No SQL Server 2005 e versões posteriores, é preciso colocar um banco de dados suspeito em modo de emergência antes de poder desanexá-lo. Para obter mais informações sobre como colocar um banco de dados em modo de emergência, consulte ALTER DATABASE (Transact-SQL).
O banco de dados é um banco de dados de sistema.
Obtendo acesso exclusivo
A desanexação de um banco de dados exige acesso exclusivo ao banco de dados. 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.
Por exemplo, a instrução ALTER DATABASE a seguir obtém acesso exclusivo para o banco de dados AdventureWorks após todos os usuários atuais se desconectarem do banco de dados.
USE master;
ALTER DATABASE AdventureWorks
SET SINGLE_USER;
GO
Observação |
---|
Para forçar os usuários atuais a saírem imediatamente do banco de dados ou após um número específico de segundos, você também pode usar a opção ROLLBACK: ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK rollback_option. Para obter mais informações, consulte ALTER DATABASE (Transact-SQL). |
Reanexando um banco de dados
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). Os arquivos podem ser movidos para outro servidor, onde podem ser anexados.
Permissões
Requer associação à função de banco de dados fixa db_owner.
Exemplos
O exemplo a seguir desanexa o banco de dados AdventureWorks com skipchecks definido como verdadeiro.
EXEC sp_detach_db 'AdventureWorks', 'true';
O exemplo a seguir desanexa o banco de dados AdventureWorks e mantém os arquivos de índice de texto completo e os metadados de índice de texto completo. Esse comando executa UPDATE STATISTICS, que é o comportamento padrão.
exec sp_detach_db @dbname='AdventureWorks'
, @keepfulltextindexfile='true';
Consulte também