Restaurar banco de dados com sobrescrever o sql server

2

Este é um script que tenta fazer um backup diário do dia anterior e restaurá-lo em um banco de dados de relatórios. Meu problema é como configurá-lo para substituir os arquivos, por isso não preciso especificar os nomes dos arquivos? Quando eu corro isso, encontro uma série de erros, como abaixo.

----Restore Database
ALTER DATABASE ReportingDB SET SINGLE_USER
GO
DECLARE @filename VARCHAR(1000)
select @filename = 'F:\DailyBackup\LiveDB_backup_' + cast(datepart(yyyy, getdate()) as varchar(4)) + '' + substring(cast( 100 + datepart(mm, getdate()) as char(3)), 2, 2) + substring(cast( 100 + datepart(day, getdate()) as char(3)), 2, 2) + '0000.bak'
select @filename
RESTORE DATABASE ReportingDB FROM DISK = @filename WITH REPLACE
GO
ALTER DATABASE ReportingDB SET MULTI_USER
GO


(1 row(s) affected)
Msg 5133, Level 16, State 1, Line 4
Directory lookup for the file "D:\DB\LiveDB.mdf" failed with the operating system error 21(error not found).
Msg 3156, Level 16, State 3, Line 4
File 'LiveDB' cannot be restored to 'D:\DB\LiveDB.mdf'. Use WITH MOVE to identify a valid location for the file.
Msg 5133, Level 16, State 1, Line 4
Directory lookup for the file "D:\DB\LiveDB_log.LDF" failed with the operating system error 21(error not found).
Msg 3156, Level 16, State 3, Line 4
File 'LiveDB_log' cannot be restored to 'D:\DB\LiveDB_log.LDF'. Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line 4
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 4
RESTORE DATABASE is terminating abnormally.

Quando tento o WITH MOVE:

MOVE 'LiveDB' para 'F: \ ReportingDB \ ReportingDB.mdf',

MOVER 'LiveDB_log' para 'F: \ ReportingDB \ ReportingDB_log.ldf'

(1 row(s) affected)
Msg 1834, Level 16, State 1, Line 4
The file 'F:\ReportingDB\ReportingDB.mdf' cannot be overwritten.  It is being used by database 'ReportingDB'.
Msg 3156, Level 16, State 4, Line 4
File 'LiveDB' cannot be restored to 'F:\ReportingDB\ReportingDB.mdf'. Use WITH MOVE to identify a valid location for the file.
Msg 1834, Level 16, State 1, Line 4
The file 'F:\ReportingDB\ReportingDB_log.ldf' cannot be overwritten.  It is being used by database 'ReportingDB'.
Msg 3156, Level 16, State 4, Line 4
File 'LiveDB_log' cannot be restored to 'F:\ReportingDB\Reporting_log.ldf'.     Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line 4
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 4
RESTORE DATABASE is terminating abnormally.
    
por user38553 09.09.2010 / 11:48

3 respostas

3

Parece que seu backup original foi obtido de um banco de dados localizado em 'D:\DB\LiveDB.mdf' e agora você está tentando restaurar em um banco de dados localizado em 'F:\ReportingDB\ReportingDB.mdf' , então você precisará da combinação das opções MOVE e REPLACE.

RESTORE DATABASE ReportingDB 
    FROM DISK = @filename WITH REPLACE, 
    MOVE 'LiveDB' TO 'F:\ReportingDB\ReportingDB.mdf',
    MOVE 'LiveDB_log' TO 'F:\ReportingDB\ReportingDB_log.ldf'
    
por 09.09.2010 / 15:26
0

Você precisa da opção REPLACE

RESTORE DATABASE ReportingDB FROM DISK = @filename, REPLACE

Consulte a documentação para obter mais detalhes

    
por 09.09.2010 / 12:01
0

Msg 1834, nível 16, estado 1, linha 4 O arquivo 'F: \ ReportingDB \ ReportingDB.mdf' não pode ser substituído. Está sendo usado pelo banco de dados 'ReportingDB'.

O erro acima é provavelmente devido ao fato de que o banco de dados está em uso enquanto você tenta restaurar. Isso impedirá que o banco de dados seja restaurado, por isso use o seguinte comando

ALTER DATABASE DATABASENAME DEFINIR SINGLE_USER COM ROLLBACK IMEDIATO

RESTORE DATABASE

Observe que isso deve ser feito em uma etapa, se você estiver executando um trabalho agendado.

Isso forçará todos os outros usuários a se desconectarem (para que seus relatórios falhem se estiverem sendo executados)

você também pode precisar incluir o seguinte

ALTER DATABASE DATABASENAME DEFINIR MULTI_USER

para permitir várias conexões depois, embora a restauração deva configurá-lo para o mesmo que o banco de dados do qual foi feito backup.

    
por 13.09.2010 / 10:59

Tags