ID do artigo: 224071 - Última revisão: terça-feira, 1 de maio de 2012 - Revisão: 15.0

Como mover os bancos de dados do SQL Server para um novo local usando as funções Desanexar e Anexar no SQL Server

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Se você faz parte de uma pequena empresa, encontre melhores recursos no site de Suporte para pequenas empresas (http://smallbusiness.support.microsoft.com/pt-br) .

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo descreve como alterar o local dos arquivos de dados e de log para qualquer banco de dados SQL Server 2005, SQL Server 2000 ou SQL Server 7.0 da Microsoft.

Mais Informações

As etapas a serem seguidas para alterar o local de alguns bancos de dados do sistema SQL Server diferem das etapas a serem seguidas para alterar o local dos bancos de dados de usuário. Estes casos especiais são descritos separadamente.

Observação Os bancos de dados do sistema SQL Server 7.0 não são compatíveis com o SQL Server 2000. Não anexe o mestre, o modelo, o msdb ou os bancos de dados de distribuição SQL Server 7.0 ao SQL Server 2000. Se você usar o SQL Server 2005, será possível anexar somente os bancos de dados do SQL Server 2005 a uma instância. Todos os exemplos neste artigo presumem que o SQL Server está instalado na pasta D:\Mssql7. Além disso, os exemplos presumem que todos os arquivos de dados e de log estão localizados na pasta D:\Mssql7\Data padrão. Os exemplos movem os arquivos de dados e de log de todos os bancos de dados para a pasta E:\Sqldata.

Pré-requisitos

  • Faça um backup atual de todos os bancos de dados, principalmente o banco de dados mestre, de seu local atual.
  • É necessário ter permissões de administrador(es).
  • É necessário saber o nome e local atual de todos os arquivos de dados e de log do banco de dados.

    Observação É possível determinar o nome e o local atual de todos os arquivos usados em um banco de dados com o procedimento armazenado sp_helpfile:
    use <database_name> go sp_helpfile go
  • É necessário que você tenha acesso exclusivo ao banco de dados que está sendo movido. Se você enfrentar problemas durante o processo e não puder acessar um banco de dados movido ou não for possível iniciar o SQL Server, examine o log de erro do SQL Server e os Manuais Online do SQL Server para obter mais informações sobre os erros encontrados.

Movendo bancos de dados de usuário

O exemplo a seguir move o banco de dados chamado mydb. Este banco de dados contém um arquivo de dados, Mydb.mdf, e um arquivo de log, Mydblog.ldf. Se o banco de dados que está sendo movido tiver mais arquivos de dados ou de log, especifique os arquivos na lista delimitada por vírgulas no procedimento armazenado sp_attach_db. O procedimento sp_detach_db não é alterado independentemente de quantos arquivos o banco de dados contém, porque o procedimento sp_detach_db não lista os arquivos.
  1. Desanexe o banco de dados, conforme abaixo:
    use master    go    sp_detach_db 'mydb'    go
  2. Depois, copie os arquivos de dados e de log do local atual (D:\Mssql7\Data) para um novo local (E:\Sqldata).
  3. Anexe novamente o banco de dados. Aponte para os arquivos no novo local, conforme a seguir:
    use master   go   sp_attach_db 'mydb','E:\Sqldata\mydbdata.mdf','E:\Sqldata\mydblog.ldf'   go
    Verifique a alteração no local dos arquivos usando o procedimento armazenado sp_helpfile:
    use mydb    go    sp_helpfile    go
    Os valores da coluna nome_do_arquivo devem refletir os novos locais.
Observação O artigo número 922804 do Banco de Dados de Conhecimento Microsoft descreve um problema dos bancos de dados SQL Server 2005 em armazenamento anexado a rede. Para obter mais informações, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês):
922804  (http://support.microsoft.com/kb/922804/ ) CORREÇÃO: Após desanexar um banco de dados Microsoft SQL Server 2005 no armazenamento anexado por rede, não será possível anexar novamente o banco de dados SQL Server.
Considere este problema. Além disso, considere as permissões aplicadas a um banco de dados desanexado no SQL Server 2005. Para obter mais informações, consulte a seção "Desanexando e anexando um banco de dados" do tópico "Arquivos de dados e de log seguros" nos Manuais Online do SQL Server. Para exibir o tópico, visite o seguinte site da MSDN (em inglês):
http://msdn2.microsoft.com/pt-br/library/ms189128.aspx (http://msdn2.microsoft.com/pt-br/library/ms189128.aspx)

Movendo os bancos de dados de exemplo

Para mover o banco de dados de exemplo de pubs e o banco de dados de exemplo Northwind no SQL Server 2000 ou no SQL Server 7.0, ou para mover o banco de dados de exemplo AdventureWorks e o banco de dados de exemplo AdventureWorksDW no SQL Server 2005, execute o mesmo procedimento usado para mover bancos de dados de usuário.

Movendo bancos de dados modelo

SQL Server 7.0

  1. Verifique se o SQL Server Agent não está em execução no momento.
  2. Execute o mesmo procedimento para mover bancos de dados de usuários.

SQL Server 2005 e SQL Server 2000

No SQL Server 2005 e no SQL Server 2000, não é possível desanexar os bancos de dados do sistema usando o procedimento armazenado sp_detach_db. Ao tentar executar a instrução sp_detach_db 'model', a seguinte mensagem de erro será exibida:
Servidor: Msg 7940, Nível 16, Estado 1, Linha 1
Não é possível desanexar os bancos de dados de sistema mestre, modelo, msdb e tempdb.
Para mover o banco de dados modelo, é necessário iniciar o SQL Server com a opção -c, a opção -m e sinalizador de rastreamento 3608. O sinalizador de rastreamento 3608 evita que o SQL Server recupere qualquer banco de dados, exceto o banco de dados mestre.

Observação Não será possível acessar qualquer banco de dados de usuário agora. Nenhuma outra operação deve ser realizada, a não ser as etapas descritas abaixo usando o sinalizador de rastreamento. Para adicionar o sinalizador de rastreamento 3608 como um parâmetro de inicialização do SQL Server, execute as seguintes etapas:
  1. No SQL Server Enterprise Manager, clique com o botão direito no nome do servidor e clique em Propriedades.
  2. Na guia Geral, clique em Parâmetros de inicialização.
  3. Adicione o seguinte novo parâmetro:
    -c -m -T3608
Se estiver usando um SQL Server 2005, será possível usar o SQL Server Configuration Manager para alterar os parâmetros de inicialização do serviço SQL Server. Para obter mais informações sobre como alterar os parâmetros de inicialização, visite o seguinte site da MSDN (em inglês):
http://msdn2.microsoft.com/pt-br/library/ms190737.aspx (http://msdn2.microsoft.com/pt-br/library/ms190737.aspx)
Após adicionar a opção -c, a opção -m, e o sinalizador de rastreamento 3608, execute as seguintes etapas:
  1. Interrompa e reinicie o SQL Server.
  2. Desanexe o banco de dados modelo usando os seguintes comandos:
    use master
       go
       sp_detach_db 'model'
       go
  3. Mova os arquivos Model.mdf e Modellog.ldf da pasta D:\Mssql7\Data para a pasta E:\Sqldata.
  4. Anexe novamente o banco de dados modelo usando os seguintes comandos:
    use master
       go
       sp_attach_db 'model','E:\Sqldata\model.mdf','E:\Sqldata\modellog.ldf'
       go
  5. Remova -c -m -T3608 dos parâmetros de inicialização no SQL Server Enterprise Manager ou no SQL Server Configuration Manager.
  6. Interrompa e reinicie o SQL Server. É possível verificar a alteração nos locais do arquivo usando o procedimento sp_helpfile armazenado. Por exemplo, use o seguinte comando:
    use model
       go
       sp_helpfile
       go

Movendo o banco de dados MSDB

SQL Server 7.0

Observação Se você estiver usando este procedimento ao mover os bancos de dados msdb e modelo, será necessário anexar novamente o banco de dados modelo primeiro e depois anexar novamente o banco de dados msdb. Execute as seguintes etapas:
  1. Verifique se o SQL Server Agent não está em execução no momento.
  2. Execute o mesmo procedimento para mover bancos de dados de usuários.
Observação Se o SQL Server Agent estiver em execução, o procedimento armazenado sp_detach_db não terá êxito e a seguinte mensagem será exibida:
Servidor: Msg 3702, Nível 16, Estado 1, Linha 0
Não é possível cancelar o banco de dados 'msdb' porque está sendo usado no momento.
A execução do DBCC foi concluída. Se o DBCC imprimiu mensagens de erro, entre em contato com o administrador do sistema.

SQL Server 2005 e SQL Server 2000

Para mover o banco de dados MSDB, é necessário iniciar o SQL Server com a opção -c, a opção -m e o sinalizador de rastreamento 3608. O sinalizador de rastreamento 3608 evita que o SQL Server recupere qualquer banco de dados, exceto o banco de dados mestre. Para adicionar a opção-c, a opção -m e o sinalizador de rastreamento 3608, execute as seguintes etapas na seção "Movendo o banco de dados modelo". Após adicionar a opção -c, a opção -m e o sinalizador de rastreamento 3608, execute as seguintes etapas:
  1. Interrompa e reinicie o SQL Server.
  2. Certifique-se de que o serviço SQL Server Agent não está sendo executado no momento.
  3. Desanexe o banco de dados msdb como segue:
    use master go sp_detach_db 'msdb' go
  4. Mova os arquivos Msdbdata.mdf e Msdblog.ldf do local atual (D:\Mssql8\Data) para o novo local (E:\Mssql8\Data).
  5. Remova -c -m -T3608 da caixa de parâmetros de inicialização no Enterprise Manager.
  6. Interrompa e reinicie o SQL Server.

    Observação Se tentar anexar novamente o banco de dados msdb iniciando o SQL Server junto com a opção-c, a opção -m e o sinalizador de rastreamento 3608, talvez você a seguinte mensagem de erro seja exibida:
    Servidor: Msg 615, Nível 21, Estado 1, Linha 1
    Não foi possível encontrar a tabela de banco de dados ID 3, nome 'modelo'.
  7. Anexe novamente o banco de dados msdb conforme a seguir:
    use master
    go 
    sp_attach_db 'msdb','E:\Mssql8\Data\msdbdata.mdf','E:\Mssql8\Data\msdblog.ldf' 
    go
Observação Se usar este procedimento e mover o banco de dados modelo, estará tentando desanexar o banco de dados msdb enquanto desanexa o banco de dados modelo. Ao fazer isto, será necessário anexar novamente o banco de dados modelo primeiro e anexar novamente o banco de dados msdb. Se anexar novamente o banco de dados msdb primeiro, a seguinte mensagem de erro será exibida ao tentar anexar novamente o banco de dados modelo:
Msg 0, Nível 11, Estado 0, Linha 0
Erro grave no comando atual. Os resultados, se houver, devem ser descartados.
Neste caso, é necessário desanexar o banco de dados msdb, anexar novamente o banco de dados modelo e anexar novamente o banco de dados msdb,

Após mover o banco de dados msdb, talvez a seguinte mensagem de erro seja exibida:
Erro 229: Permissão EXECUTE negada no objeto'ObjectName', banco de dados 'mestre', proprietário 'dbo'.
Esse problema ocorre porque a corrente de propriedade foi quebrada. Os proprietários do banco de dados msdb e do banco de dados mestre não são os mesmos. Neste caso, o proprietário do banco de dados msdb foi alterado. Como solução alternativa, execute as seguintes declarações Transact-SQL. É possível fazer isso usando a linha de comando Osql.exe (SQL Server 7.0 e SQL Server 2000) ou a linha de comando Sqlcmd.exe (SQL Server 2005):
USE MSDB 
Go 
EXEC sp_changedbowner 'sa' 
Go
Para obter mais informações, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês):
272424  (http://support.microsoft.com/kb/272424/ ) A corrente de propriedade do objeto pelos bancos de dados dependem do login mapeado para os proprietários do objeto

Como mover o banco de dados mestre

  1. Altere o caminho para os arquivos de dados mestre e de log mestre no SQL Server Enterprise Manager.

    Observação Aqui também é possível alterar o local do log de erro.
  2. Clique com o botão direito do mouse em SQL Server in Enterprise Manager e clique em Propriedades.
  3. Clique em Parâmetros de inicialização para visualizar as seguintes entradas:
    -dD:\MSSQL7\data\master.mdf -eD:\MSSQL7\log\ErrorLog -lD:\MSSQL7\data\mastlog.ldf
    -d é o caminho totalmente qualificado para o arquivo de dados do banco de dados mestre.

    -e é o caminho totalmente qualificado para o arquivo de log de erro.

    -l é o caminho totalmente qualificado para o arquivo de log do banco de dados mestre.
  4. Altere esses valores, conforme segue:
    1. Remova as entradas atuais para os arquivos Master.mdf e Mastlog.ldf.
    2. Adicione novas entradas especificando o novo local:
      -dE:\SQLDATA\master.mdf
            -lE:\SQLDATA\mastlog.ldf
  5. Interrompa o SQL Server.
  6. Copie os arquivos Master.mdf e Mastlog.ldf para o novo local (E:\Sqldata).
  7. Reinicie o SQL Server.
Observação Se estiver usando o SQL Server 2005, use o SQL Server Configuration Manager para alterar o caminho para os arquivos de dados e de log mestre.

Movendo o banco de dados tempdb

É possível mover os arquivos tempdb usando a declaração ALTER DATABASE.
  1. Determine os nomes do arquivo lógicos para o banco de dados tempdb, usando o sp_helpfile, como segue:
    use tempdb go sp_helpfile go
    O nome lógico para cada arquivo está na coluna nome. Esse exemplo usa nomes de arquivos padrão do tempdev e templog.
  2. Use a declaração ALTER DATABASE, especificando o nome de arquivo lógico, conforme a seguir:
    use master
    go
    Alter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf')
    go
    Alter database tempdb modify file (name = templog, filename = 'E:\Sqldata\templog.ldf')
    go
    As seguintes mensagens confirmando a mudança devem ser exibidas:
    Mensagem 1
    Arquivo 'tempdev' modificado em sysaltfiles. Exclua o arquivo antigo após reiniciar o SQL Server.
    Mensagem 2
    Arquivo 'templog' modificado em sysaltfiles. Exclua o arquivo antigo após reiniciar o SQL Server.
  3. O uso do sp_helpfile em tempdb não confirmará essas alterações até que você reinicie o SQL Server.
  4. Interrompa e reinicie o SQL Server.

Referências

Para obter mais informações, clique nos números abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft (alguns artigos podem estar em inglês):
912397  (http://support.microsoft.com/kb/912397/ ) Não é possível iniciar o serviço do SQL Server ao alterar um parâmetro de protocolo para uma instância agrupada do SQL Server 2000 ou do SQL Server 2005 para um valor inválido.
274188  (http://support.microsoft.com/kb/274188/ ) O tópico "Solucionando problemas de usuários órfãos" nos Manuais Online está incompleto
246133  (http://support.microsoft.com/kb/246133/ ) Como transferir logins e senhas entre instâncias do SQL Server
168001  (http://support.microsoft.com/kb/168001/ ) Logons e permissões de usuário em um banco de dados podem estar incorretos após a restauração do banco de dados

Para obter mais informações, consulte os seguintes manuais:
Microsoft Corporation
Microsoft SQL Server 7.0 System Administration Training Kit
Microsoft Press, 2001
Microsoft Corporation (em inglês)
MCSE Training Kit: Microsoft SQL Server 2000 System Administration (http://www.microsoft.com/mspress/books/4885.aspx)
Microsoft Press, 2001
Microsoft Corporation (em inglês)
Microsoft SQL Server 2000 Resource Kit (http://www.microsoft.com/mspress/books/4939.aspx)
Microsoft Press, 2001

A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Palavras-chave: 
kbsqlmanagementtools kbinfo KB224071