Backup Differential não pode ser restaurado porque não há arquivos prontos para reversão – SQL Server

Esta mensagem ocorre quando você tenta restaurar um backup diferencial utilizando o SQL Server 2005 – 2012.

“System.Data.SqlClient.SqlError: The log or differential backup cannot be restored because no files are ready to rollforward. (Microsoft.SqlServer.Smo)”.

Este erro está dizendo que não há nenhuma base de dados no modo no-operational (não-operacional), e, portanto, não foi feita de tal forma que as transações não comitadas (confirmadas) não fossem revertidas. Quando você restaura um backup no modo RESTORE WITH RECOVERY (padrão), indica que o roll forward deve ser realizado somente enquanto o backup FULL for restaurado, ou seja, quando o restore for finalizado nenhum arquivo de LOG ou Differential poderá ser restaurado, pois o arquivo de LOG estará truncado. Ao realizar o restore no modo RESTORE WITH NORECOVERY, após o final do restore do backup FULL o roll forward não será finalizado, assim deixando os arquivos de LOG “abertos” para que mais arquivos de LOG sejam restaurados.

A maneira mais fácil de reproduzir este erro é realizando um backup FULL da sua base de dados, e em seguida restaura-lá com a opção RESTORE WITH RECOVERY. Logo em seguida faça um backup Differential da mesma base de dados e tente restaurar o backup no modo RESTORE WITH RECOVERY. Ao realizar o backup ele irá retornar esta mensagem de erro:

msg_error

Para realizar o restore do Backup Differential da maneira correta, antes você precisa restaurar o backup FULL com a opção WITH NORECOVERY (este é o passo mais importante!):

step02

Após o restore verifique se o database está com o status “RESTORING”:

Use Master
GO
SELECT
	Name, State_Desc
FROM
	sys.databases
WHERE
	Name = N'DBTeste1'

step04

Se ele estiver com o status RESTORING, faça o restore do backup Differential com a opção WITH RECOVERY:

step01

E assim o Backup Differential será restaurado.

É importante e primordial lembrar-se que antes de restaurar um backup Differential ou de Log é preciso restaurar o backup Full da maneira correta para evitar esta mensagem de erro e refazer todo o processo do restore.

É isso aí!

Anúncios

Leitura de Arquivo LOG – SQL Server

Aí vai uma dica para quem precisa de executar um query ou uma procedure para ler os arquivos de Log do Sql Server.

Existem duas procedures responsáveis por ler os arquivos de log:

sp_enumerrorlogs 
sp_readerrorlog 1 

E a query:

DECLARE @TSQL  NVARCHAR(2000)
DECLARE @lC    INT

CREATE TABLE #TempLog (
	LogDate     DATETIME,
	ProcessInfo NVARCHAR(50),
	[Text] NVARCHAR(MAX)
)

CREATE TABLE #logF (
	ArchiveNumber     INT,
	LogDate           DATETIME,
	LogSize           INT
)

INSERT INTO #logF
	EXEC sp_enumerrorlogs
		SELECT @lC = MIN(ArchiveNumber) FROM #logF

	WHILE @lC IS NOT NULL
	BEGIN
		INSERT INTO #TempLog
		EXEC sp_readerrorlog @lC
		SELECT @lC = MIN(ArchiveNumber)
		FROM #logF      WHERE ArchiveNumber > @lC
	END

Logo após a execução desta query, você pode dar um Select nesta tabela temporária [TempLog].

* Para apagar esta tabela temporária, é só dar um DROP TABLE #TempLog

Alan Machado