Partilhar via


sp_detach_db (Transact-SQL)

Aplica-se a:SQL Server

Desanexa uma base de dados que atualmente não está em uso de uma instância de servidor e, opcionalmente, executa-se UPDATE STATISTICS em todas as tabelas antes de ser destacada.

Para que uma base de dados replicada seja destacada, tem de ser inédita. Para mais informações, consulte a secção de Observações mais adiante neste artigo.

Transact-SQL convenções de sintaxe

Sintaxe

sp_detach_db
    [ [ @dbname = ] N'dbname' ]
    [ , [ @skipchecks = ] N'skipchecks' ]
    [ , [ @keepfulltextindexfile = ] N'keepfulltextindexfile' ]
[ ; ]

Arguments

[ @dbname = ] N'dbname'

O nome da base de dados a ser destacada. @dbname é sysname, com um padrão de NULL.

[ @skipchecks = ] N'skipchecks'

Especifica se deve saltar ou executar UPDATE STATISTICS. @skipchecks é nvarchar(10), com um padrão de NULL. Para saltar UPDATE STATISTICS, especifique true. Para executar UPDATE STATISTICSexplicitamente , especifique false.

Por defeito, UPDATE STATISTICS é realizado para atualizar informações sobre os dados nas tabelas e índices. O desempenho UPDATE STATISTICS é útil para bases de dados que vão ser movidas para suportes apenas de leitura.

[ @keepfulltextindexfile = ] N'keep fulltextindexfile'

Especifica que o ficheiro índice em texto completo associado à base de dados que está a ser destacada não é eliminado durante a operação de desligamento da base de dados. @keepfulltextindexfile é nvarchar(10), com um padrão de true.

  • Se @keepfulltextindexfile for false, todos os ficheiros índice em texto completo associados à base de dados e os metadados do índice em texto completo são eliminados, a menos que a base de dados seja apenas de leitura.
  • Se NULL ou true, os metadados relacionados com o texto integral forem mantidos.

Importante

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso.

Valores de código de retorno

0 (sucesso) ou 1 (fracasso).

Conjunto de resultados

Nenhum.

Observações

Quando uma base de dados é destacada, todos os seus metadados são eliminados. Se a base de dados era a base de dados padrão de quaisquer contas de login, master torna-se a base de dados predefinida.

Observação

Para informações sobre como visualizar a base de dados padrão de todas as contas de login, consulte sp_helplogins. Se tiveres as permissões necessárias, podes usar o ALTER LOGIN para atribuir uma nova base de dados por defeito a um login.

Limitações

Uma base de dados não pode ser destacada se algum dos seguintes pontos for verdadeiro:

  • A base de dados está atualmente em uso. Para mais informações, consulte Obter acesso exclusivo.

  • Se replicada, a base de dados é publicada.

    Antes de poderes desligar a base de dados, tens de desativar a publicação executando sp_replicationdboption.

    Se não conseguires usar sp_replicationdboption, podes remover a replicação executando sp_removedbreplication.

  • Existe um snapshot da base de dados na base de dados.

    Antes de poderes separar a base de dados, tens de eliminar todos os seus snapshots. Para mais informações, consulte Drop a Database Snapshot.

    Um snapshot de base de dados não pode ser destacado ou anexado.

  • A base de dados está a ser espelhada.

    A base de dados não pode ser destacada até que a sessão de espelhamento da base de dados seja terminada. Para mais informações, consulte Remoção do Espelhamento de Base de Dados (SQL Server).

  • A base de dados é suspeita.

    Deve colocar uma base de dados suspeita em modo de emergência antes de poder desligar a base de dados. Para mais informações sobre como colocar uma base de dados em modo de emergência, consulte ALTER DATABASE.

  • A base de dados é uma base de dados do sistema.

Obtenha acesso exclusivo

A separação de uma base de dados requer acesso exclusivo à base de dados. Se a base de dados que queres desligar estiver em uso, antes de a poderes destacar, define a base de dados em SINGLE_USER modo para obter acesso exclusivo.

Antes de definir a base de dados para SINGLE_USER, verifique se a AUTO_UPDATE_STATISTICS_ASYNC opção está definida para OFF. Quando esta opção está definida para ON, o thread em segundo plano usado para atualizar estatísticas liga-se à base de dados, e não consegue aceder à base de dados em modo de utilizador único. Para obter mais informações, consulte Definir um banco de dados para o modo de usuário único.

Por exemplo, a seguinte ALTER DATABASE declaração obtém acesso exclusivo à base de dados AdventureWorks2025 depois de todos os utilizadores atuais se desconectarem da base de dados.

USE master;

ALTER DATABASE AdventureWorks2022
SET SINGLE_USER;
GO

Para forçar os utilizadores atuais a saírem da base de dados imediatamente ou dentro de um número de segundos especificado, também pode usar a ROLLBACK opção.

ALTER DATABASE <database_name>
SET SINGLE_USER
WITH ROLLBACK <rollback_option>;

Para obter mais informações, consulte ALTER DATABASE.

Reanexar uma base de dados

Os ficheiros destacados permanecem e podem ser reanexados usando CREATE DATABASE (com a FOR ATTACH opção ou).FOR ATTACH_REBUILD_LOG Os ficheiros podem ser movidos para outro servidor e anexados lá.

Permissions

Requer a pertença ao papel fixo de administrador do sistema ou ao papel db_owner da base de dados.

Examples

Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que pode ser descarregado da página inicial de Exemplos e Projetos da Comunidade do Microsoft SQL Server.

O exemplo seguinte destaca a AdventureWorks2025 base de dados com @skipchecks definido em true.

EXECUTE sp_detach_db 'AdventureWorks2022', 'true';

O exemplo seguinte destaca a AdventureWorks2025 base de dados e mantém os ficheiros de índice em texto completo e os metadados do índice em texto completo. Este comando executa UPDATE STATISTICS, que é o comportamento padrão.

EXECUTE sp_detach_db
    @dbname = 'AdventureWorks2022',
    @keepfulltextindexfile = 'true';