Anexar um banco de dados

Aplica-se a:SQL Server

Saiba como anexar um banco de dados no SQL Server usando o SQL Server Management Studio ou o Transact-SQL. Você pode usar este recurso para copiar, mover ou atualizar um banco de dados do SQL Server.

Limitações e restrições

Para obter uma lista de limitações e restrições, consulte Anexar e desanexar bancos de dados (SQL Server).

Pré-requisitos

Examine todos os seguintes pré-requisitos antes de continuar:

  • Se você estiver movendo um banco de dados de uma instância para outra, o banco de dados deverá primeiro ser desanexado de qualquer instância SQL existente. Se você tentar anexar um banco de dados que não foi desanexado, um erro será retornado. Para obter mais informações, veja Desanexar um banco de dados.

  • Quando você anexa um banco de dados, todos os arquivos de dados dele precisam estar disponíveis. Normalmente, esses arquivos têm extensões .mdf ou .ndf (para arquivos de dados) e .ldf (para arquivos de log de transações). Além disso, todos os grupos de arquivos de dados FILESTREAM precisam estar presentes e disponíveis. Para obter mais informações para anexar um banco de dados habilitado para FILESTREAM, confira Mover um banco de dados habilitado para FILESTREAM.

  • Se algum arquivo de dados tiver um caminho diferente de quando o banco de dados foi inicialmente criado ou anexado pela última vez, você deverá especificar o caminho atual do arquivo.

  • A conta de serviço do Mecanismo de Banco de Dados deve ter permissões para ler os arquivos na nova localização.

  • Se os arquivos MDF e LDF estiverem em diretórios diferentes e um dos caminhos incluir \\?\GlobalRoot, a operação falhará quando você anexar um banco de dados.

Anexar é a melhor opção?

Recomendamos que você mova os bancos de dados em um instância com o procedimento de realocação planejada ALTER DATABASE, em vez de usar desanexação e anexação, ao mover arquivos de banco de dados na mesma instância. Para obter mais informações, veja Mover bancos de dados de usuário.

Não é recomendável usar desanexação e anexação para backup e recuperação. Não há backups de log de transações ou recuperações pontuais disponíveis ao desanexar arquivos cujo backup será feito fora do SQL Server.

Segurança

As permissões de acesso ao arquivo são definidas durante muitas operações de banco de dados, incluindo quando um banco de dados é desanexado e anexado. Quando um banco de dados é desanexado ou anexado, o Mecanismo de Banco de Dados tenta representar a conta do Windows da conexão que está executando a operação para garantir que a conta tenha permissão para acessar os arquivos de log e o banco de dados. Para contas de segurança mistas que usam logons do SQL Server, a representação pode falhar.

A tabela a seguir mostra as permissões definidas no banco de dados e nos arquivos de log depois que uma operação de anexação e desanexação é concluída, bem como se a conta de conexão pode ser representada pelo Mecanismo de Banco de Dados.

Operação A conta de conexão pode ser personificada Permissões de arquivos são concedidas a
Detach Sim Somente a conta que está realizando a operação. Contas adicionais poderão ser adicionadas por um administrador do sistema operacional se forem necessárias depois que o banco de dados for desanexado.
Detach Não A conta de serviço do SQL Server (MSSQLSERVER) e os membros do grupo de Administradores locais do Windows.
Anexar Sim A conta de serviço do SQL Server (MSSQLSERVER) e os membros do grupo de Administradores locais do Windows.
Anexar Não A conta de serviço do SQL Server (MSSQLSERVER).

Para obter mais informações sobre as permissões do sistema de arquivos concedidas aos SIDs por serviço para o serviço SQL Server, confira configurar permissões do sistema de arquivos para acesso ao Mecanismo de Banco de Dados.

Cuidado

Não é recomendável anexar ou restaurar bancos de dados de origem desconhecida ou não confiável. Esses bancos de dados podem conter um código mal-intencionado que pode executar um código Transact-SQL inesperado ou provocar erros modificando o esquema ou a estrutura física do banco de dados. Antes de usar um banco de dados de origem desconhecida ou não confiável, execute DBCC CHECKDB no banco de dados, em um servidor que não seja de produção. Além disso, examine o código, como procedimentos armazenados ou outro código definido pelo usuário, no banco de dados. Para saber mais sobre como anexar bancos de dados e informações sobre alterações que são feitas em metadados ao anexar um banco de dados, veja Anexar e desanexar bancos de dados(SQL Server).

Permissões

Requer permissão CREATE DATABASE, CREATE ANY DATABASE ou ALTER ANY DATABASE.

Usar SSMS (SQL Server Management Studio)

Antes de mover um banco de dados

Se você estiver movendo um banco de dados, antes de desanexá-lo de sua instância existente do SQL Server, use a página Propriedades do banco de dados para examinar os arquivos associados ao banco de dados e às localizações atuais.

  1. No Pesquisador de Objetos do SQL Server Management Studio, conecte-se a uma instância do Mecanismo de Banco de Dados do SQL Server e expanda a instância.

  2. Expanda Bancos de Dadose selecione o nome do banco de dados de usuário que você quer desanexar.

  3. Clique com o botão direito do mouse no nome do banco de dados e selecione Propriedades. Selecione a página Arquivos e examine as entradas na tabela Arquivos de banco de dados:.

Não se esqueça de considerar todos os arquivos associados ao banco de dados antes de desanexar, mover e anexar. Em seguida, continue com as etapas para desanexar, copiar arquivo e anexar um banco de dados na próxima seção. Para obter mais informações, veja Desanexar um banco de dados.

Anexar um banco de dados

  1. No Pesquisador de Objetos do SQL Server Management Studio, conecte-se a uma instância do Mecanismo de Banco de Dados do SQL Server e expanda a exibição dessa instância no SSMS.

  2. Clique com o botão direito do mouse em Bancos de dados e selecione Anexar.

  3. Na caixa de diálogo Anexar Bancos de Dados, para especificar o banco de dados a ser anexado, selecione Adicionar. Na caixa de diálogo Localizar Arquivos de Banco de Dados, selecione a localização em que o banco de dados reside e expanda a árvore de diretórios para encontrar e selecionar o arquivo .mdf do banco de dados; por exemplo:

    C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_Data.mdf

    Importante

    Tentar selecionar um banco de dados já anexado gera erro.

    Bancos de dados a serem anexados
    Exibe informações sobre os bancos de dados selecionados.

    <sem cabeçalho de coluna>
    Exibe um ícone que indica o status da operação de anexação. Os possíveis ícones são descritos na descrição de Status.

    Local do Arquivo MDF
    Exibe o caminho e o nome de arquivo do arquivo MDF selecionado.

    Database Name
    Exibe o nome do banco de dados.

    Anexar como
    Opcionalmente, especifique um nome diferente para o banco de dados anexar como.

    Proprietário
    Fornece uma lista suspensa de possíveis proprietários de banco de dados dos quais você pode selecionar um proprietário diferente opcionalmente.

    Status
    Exibe o status do banco de dados de acordo com a seguinte tabela:

    Ícone Texto de status Descrição
    (No icon) (Nenhum texto) A operação de anexação não foi iniciada ou pode estar pendente para esse objeto. Esse é o padrão quando a caixa de diálogo é aberta.
    Triângulo verde apontando para a direita Em andamento A operação de anexação foi iniciada mas não está completa.
    Sinal de verificação verde Êxito O objeto foi anexado com êxito.
    Círculo vermelho contendo uma cruz branca Erro A operação de anexação encontrou um erro e não foi concluída com êxito.
    Círculo que contém dois quadrantes pretos (à esquerda e à direita) e dois quadrantes brancos (em cima e em baixo) Interrompido A operação de anexação não foi concluída com êxito porque você interrompeu a operação.
    Círculo que contém uma seta curvada que aponta para o sentido anti-horário Revertida A operação de anexação teve êxito, mas foi revertida devido a um erro ao se anexar outro objeto.

    Mensagem
    Exibe uma mensagem em branco ou um hiperlink “Arquivo não encontrado”.

    Adicionar
    Encontrar os arquivos de banco de dados principais necessários. Quando você seleciona um arquivo .mdf, os respectivos campos são automaticamente preenchidos com informações aplicáveis da grade Bancos de dados a serem anexados.

    Remover
    Remove o arquivo selecionado da grade Bancos de dados a serem anexados .

    "detalhes do banco de dados <nome_do_banco_de_dados>"
    Exibe os nomes dos arquivos a serem anexados. Para verificar ou alterar o nome do caminho de um arquivo, selecione o botão Procurar ().

    Observação

    Se um arquivo não existir, a coluna Mensagem exibirá "Não encontrado". Se um arquivo de log não for encontrado, ele existe em outro diretório ou foi excluído. Você precisa atualizar o caminho do arquivo na grade detalhes do banco de dados para indicar o local correto ou remover o arquivo de log da grade. Se um arquivo de dados .ndf não for encontrado, você precisará atualizar seu caminho na grade a fim de indicar o local correto.

    Nome do arquivo original
    Exibe o nome do arquivo anexado que pertence ao banco de dados.

    Tipo de arquivo
    Indica o tipo de arquivo, Dados ou Log.

    Caminho do arquivo atual
    Exibe o caminho para o arquivo de banco de dados selecionado. O caminho pode ser editado manualmente.

    Mensagem
    Exibe uma mensagem em branco ou um hiperlink “Arquivo não encontrado”.

Usar o Transact-SQL

Antes de mover um banco de dados

Se você estiver movendo um banco de dados, antes de ele ser desanexado da instância existente do SQL Server, use a exibição de catálogo do sistema sys.database_files para examinar os arquivos associados ao banco de dados e às localizações atuais. Para obter mais informações, confira sys.database_files (Transact-SQL).

  1. No SQL Server Management Studio, selecione Nova Consulta para abrir o Editor de Consultas.

  2. Copie o script Transact-SQL a seguir no Editor de Consultas e selecione Executar. Este script exibe a localização dos arquivos de banco de dados físicos. Não se esqueça de considerar todos os arquivos quando mover o banco de dados por desanexação/anexação.

    USE [database_name] 
    GO  
    SELECT type_desc, name, physical_name from sys.database_files;
    

Não se esqueça de considerar todos os arquivos associados ao banco de dados antes de desanexar, mover e anexar. Em seguida, continue com as etapas para desanexar, copiar arquivo e anexar um banco de dados na próxima seção. Para obter mais informações, veja Desanexar um banco de dados.

Para anexar um banco de dados

  1. Conecte-se ao Mecanismo de Banco de Dados.

  2. Na barra Padrão, selecione Nova Consulta.

  3. Use a instrução CREATE DATABASE com a cláusula FOR ATTACH.

    Copie e cole o exemplo a seguir na janela de consulta e selecione Executar. Este exemplo anexa todos os arquivos do banco de dados AdventureWorks2022 e renomeia o banco de dados para MyAdventureWorks.

    CREATE DATABASE MyAdventureWorks   
        ON (FILENAME = 'C:\MySQLServer\AdventureWorks_Data.mdf'),   
        (FILENAME = 'C:\MySQLServer\AdventureWorks_Log.ldf')   
        FOR ATTACH;  
    

    Seu banco de dados pode ter arquivos de dados adicionais (normalmente, .mdf ou .ndf) e exigir arquivos adicionais para incluir na instrução CREATE DATABASE ... FOR ATTACH. Além disso, todos os grupos de dados FILESTREAM também precisam ser incluídos na instrução. Para obter mais informações sobre como anexar um banco de dados habilitado para FILESTREAM, confira Mover um banco de dados habilitado para FILESTREAM.

    Observação

    Se desejar, você poderá usar o procedimento armazenado sp_attach_db ou sp_attach_single_file_db . No entanto, esses procedimentos armazenados estendidos são removidos de uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Em vez dessa função, recomendamos usar CREATE DATABASE ... FOR ATTACH .

Depois de atualizar um banco de dados do SQL Server

Nível de compatibilidade do banco de dados

Depois de atualizar um banco de dados usando o método de anexação, o banco de dados fica disponível. O banco de dados será atualizado automaticamente para o nível de versão interna da nova instância. Se o banco de dados tiver índices de texto completo, o processo de atualização importará, redefinirá ou recriará esses índices dependendo da configuração da propriedade de servidor Opção de Atualização de Texto Completo . Se a opção de atualização for definida como Importar ou Recompilar, os índices de texto completo não ficarão disponíveis durante a atualização. Dependendo da quantidade de dados a ser indexada, a importação poderá levar várias horas e a recompilação poderá ser até dez vezes mais demorada. Lembre-se também de que, quando a opção de atualização estiver definida como Importar, se não houver um catálogo de texto completo disponível, os índices de texto completo associados serão recompilados.

Após a atualização, o nível de compatibilidade do banco de dados permanece no nível de compatibilidade antes da atualização, a menos que ele não seja compatível com a nova versão. Nesse caso, o nível de compatibilidade do banco de dados atualizado é definido para o nível de compatibilidade mais baixo com suporte. Por exemplo, se você anexar um banco de dados com nível de compatibilidade 90 antes de anexá-lo a uma instância do SQL Server 2019 (15.x), após o upgrade, o nível de compatibilidade será definido como 100, que é o nível de compatibilidade mais baixo com suporte no SQL Server 2019 (15.x). Para obter mais informações, veja Nível de compatibilidade de ALTER DATABASE (Transact-SQL).

Change Data Capture (CDC)

Se você estiver anexando um banco de dados de uma instância do SQL Server 2014 (12.x) ou anterior, que tinha CDA (captura de dados de alterações) habilitada, você também precisará executar o comando abaixo para atualizar os metadados da CDA (captura de dados de alterações):

USE <database name>
EXEC sys.sp_cdc_vupgrade  

Para obter mais informações, confira Erro ao anexar um banco de dados habilitado para CDA a uma instância do SQL Server 2016 ou do SQL Server 2017 no Windows.

Confira também

Próximas etapas