Query últimos Backups – SQL Server Pt. 1

Neste post irei mostrar uma query que mostra o último Backup realizado em todos os databases, exceto o tempdb, pubs, northwind e o model.

* Em um próximo post irei mostrar o tamanho dos backups realizados e onde os backups foram salvos.

A query retorna os seguintes campos:

Servidor – Instancia: retorna o servidor (hostname) e a instância dos databases.
Database_Name: nome do database
Full_Dias: diferença de dias do último backup FULL realizado.
Full_Termino: data e hora do término do backup FULL.
Full_Tamanho_MB: tamanho do backup FULL em MB.
Diff_Dias: diferença de dias do último backup DIFFERENTIAL realizado.
Diff_Termino: data e hora do término do backup DIFFERENTIAL.
Diff_Full_Diff: diferença dos dias entre o backup FULL e o DIFFERENTIAL.
Diff_Tamanho_MB: tamanho do backup DIFFERENTIAL em MB.
Tran_Minutos: diferença em minutos do último backup LOG realizado.
Tran_Termino: data e hora do término do backup LOG.
Tran_Tamanho_MB: tamanho do backup LOG em MB.

A query é essa:

USE master 
GO
SET NOCOUNT ON
GO

DECLARE @Server varchar(40)

Set @Server = Convert(varchar(35), ServerProperty('machinename')) + '\' + @@ServiceName

BEGIN TRY
	SELECT 
		 @Server As 'Servidor - Instancia'
		,FR.Database_Name
		,DateDiff(Day, FR.Backup_Finish_Date, GetDate()) As 'Full_Dias'
		,FR.Backup_Finish_Date  As 'Full_Termino'
		,Convert(Char,Convert(Numeric(12,2),(FR.Backup_Size / 1024 / 1024))) As Full_Tamanho_MB
		,DateDiff(Day, DR.Backup_Finish_Date, GetDate()) As 'Diff_Dias'
		,DR.Backup_Finish_Date  As 'Diff_Termino'
		,Case 
			When DR.Backup_Finish_Date Is Null Then Null
			Else DateDiff(Day, FR.Backup_Finish_Date, DR.Backup_Finish_Date)
		End As 'Dias_Full_Diff'
		,Convert(Char,Convert(Numeric(12,2),(DR.Backup_Size / 1024 / 1024))) As Diff_Tamanho_MB
		,DateDiff(Minute, TR.Backup_Finish_Date, GetDate()) As 'Tran_Minutos'
		,TR.Backup_Finish_Date As 'Tran_Termino'
		,Convert(Char,Convert(Numeric(12,2),(TR.Backup_Size / 1024 / 1024))) As Tran_Tamanho_MB
	FROM 
		msdb.dbo.backupset As FR
	LEFT OUTER JOIN
		msdb.dbo.backupset As TR
	ON
		TR.Database_Name = FR.Database_Name
	AND TR.Type = 'L'
	AND TR.Backup_Finish_Date =
		(
			(SELECT	Max(Backup_Finish_Date) 
			FROM	msdb.dbo.backupset B2 
			WHERE	B2.Database_Name = FR.Database_Name 
			And B2.Type = 'L')
		)
	LEFT OUTER JOIN
		msdb.dbo.backupset As DR
	ON
		DR.Database_Name = FR.Database_Name
	AND DR.Type = 'I'
	AND DR.Backup_Finish_Date =
		(
			(SELECT Max(Backup_Finish_Date) 
			FROM	msdb.dbo.backupset B2 
			WHERE B2.Database_Name = FR.Database_Name 
			  And B2.Type = 'I')
		)
	WHERE
		FR.Type = 'D' -- full backups only
	AND FR.Backup_Finish_Date = 
		(
			SELECT Max(Backup_Finish_Date) 
			FROM msdb.dbo.backupset B2 
			WHERE B2.Database_Name = FR.Database_Name 
			And   B2.Type = 'D'
		)
	And	FR.Database_Name In (SELECT name FROM master.dbo.sysdatabases) 
	And	FR.Database_Name Not In ('tempdb','pubs','northwind','model')

UNION ALL

	SELECT
		 @Server
		,Name
		,NULL
		,NULL
		,NULL 
		,NULL
		,NULL 
		,NULL
		,NULL
		,NULL
		,NULL
		,NULL
	FROM 
		master.dbo.sysdatabases As Record
	WHERE
		Name Not In(SELECT DISTINCT Database_Name FROM msdb.dbo.backupset)
	And Name Not In('tempdb','pubs','northwind','model')
	ORDER BY
		1, 2
END TRY
BEGIN CATCH
	SELECT message_id, text FROM sys.messages WHERE message_id = @@ERROR AND language_id = 1033
END CATCH

2 thoughts on “Query últimos Backups – SQL Server Pt. 1

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s