arquivo mdf não pode ser substituído ao restaurar um banco de dados no SQL Server

16

Eu tenho um banco de dados A. Ele tem alguns dados nele. Eu criei um backup para um arquivo como A.bak . Então eu crio um novo banco de dados vazio B. E então eu tento restaurar B de A.bak . Mas o SQL Serve me diz o seguinte erro:

The file 'C:\SQL Directory\DATA\A.mdf' cannot be overwritten. It is being used by database 'A'.

Mas se eu excluir A do SQL Server, o retore está ok.

Não entendo por que o SQL precisa gravar no arquivo de banco de dados original ao restaurar de um separado arquivo de backup?

Obrigado ~

    
por smwikipedia 08.03.2011 / 08:34

5 respostas

17

Se você restaurar um banco de dados, o SQL Server, por padrão, tentará restaurar todos os dados e arquivos de log em seus locais originais. Como esses locais originais ainda estão em uso pelo banco de dados original ("A"), a restauração falha. Você precisa usar a cláusula WITH MOVE para especificar novos locais para todos os arquivos no banco de dados.

RESTORE DATABASE B FROM DISK = 'A.bak'
WITH MOVE 'DataFileLogicalName' TO 'C:\SQL Directory\DATA\B.mdf',
MOVE 'LogFileLogicalName' TO 'C:\SQL Directory\DATA\B.ldf',
REPLACE --Needed if database B already exists

Algo assim mesmo. Use RESTORE FILELISTONLY FROM DISK ... para ver os nomes de arquivos lógicos no backup, se necessário.

    
por 08.03.2011 / 15:25
3

WITH MOVE / MOVE é a solução certa em T-SQL .

A propósito, se você quiser usar a GUI, você pode ir para Arquivos e renomear:

  • a.MDF
  • a.NDF
  • a.LDF

para

  • b.MDF
  • b.NDF
  • b.LDF

    
por 11.06.2018 / 05:04
0

Ao restaurar o backup, você pode especificar os arquivos de dados a serem restaurados.

Procure aqui e aqui . Você pode usar a opção "Restaurar os arquivos do banco de dados como" e "Substituir o banco de dados existente".

    
por 08.03.2011 / 08:37
0

Você está usando a opção REPLACE, no comando TSQL, ou como uma caixa de seleção selecionada? Como alternativa, você pode renomear os arquivos e chamar o banco de dados de outra forma.

Você também achará um pouco difícil restaurar em um banco de dados que está sendo usado ..... você precisará matar os processos usando o banco de dados; OU derrubar / deletar o banco de dados primeiro, fechando as conexões (isto é provavelmente o mais fácil); OU configure o banco de dados que você deseja sobrescrever em algo como o modo de usuário restrito, com a reversão imediata, de forma que, esperamos, apenas os DBAs possam usar; OU até mesmo parar o SQL Server, e reiniciá-lo - esperamos que a restauração seja revertida antes que alguém / qualquer coisa use esse banco de dados.

PS faça um backup do banco de dados que você está prestes a sobrescrever, apenas no caso.

    
por 08.03.2011 / 08:41
0

Se alguém pesquisar uma solução na GUI do Management Studio depois de já usar a página Options e ativar a opção Overwrite the existing database (WITH REPLACE) :

Basta clicar na coluna Restore As e alterar os nomes dos arquivos *.mdf e *.ldf .

    
por 26.01.2016 / 09:58