AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 150241
Accepted
Fza
Fza
Asked: 2016-09-21 23:18:25 +0800 CST2016-09-21 23:18:25 +0800 CST 2016-09-21 23:18:25 +0800 CST

Consulta T-SQL para data do último backup completo, tamanho e local

  • 772

Estou usando a consulta T-SQL abaixo para determinar a data do último backup completo do banco de dados e também retornar o tamanho e o local do arquivo de backup. Meu problema é que ele não retornará nenhum dado para bancos de dados que não tiveram backups ou para os quais não há histórico de backup. Idealmente, eu gostaria de modificar a consulta para que todos os bancos de dados fossem retornados, independentemente de haver ou não histórico de backup para eles. Alguém pode aconselhar como a consulta abaixo pode ser modificada para acomodar isso?

WITH LastBackUp AS
(
SELECT  bs.database_name,
        bs.backup_size,
        bs.backup_start_date,
        bmf.physical_device_name,
        Position = ROW_NUMBER() OVER( PARTITION BY bs.database_name ORDER BY bs.backup_start_date DESC )
FROM  msdb.dbo.backupmediafamily bmf
JOIN msdb.dbo.backupmediaset bms ON bmf.media_set_id = bms.media_set_id
JOIN msdb.dbo.backupset bs ON bms.media_set_id = bs.media_set_id
WHERE   bs.[type] = 'D'
AND bs.is_copy_only = 0
)
SELECT 
        database_name AS [Database],
        CAST(backup_size / 1048576 AS DECIMAL(10, 2) ) AS [BackupSizeMB],
        backup_start_date AS [Last Full DB Backup Date],
        physical_device_name AS [Backup File Location]
FROM LastBackUp
WHERE Position = 1
ORDER BY [Database];
sql-server t-sql
  • 2 2 respostas
  • 34992 Views

2 respostas

  • Voted
  1. Best Answer
    spaghettidba
    2016-09-21T23:34:44+08:002016-09-21T23:34:44+08:00

    Você precisa consultar a lista de bancos de dados primeiro (está em sys.databases) e depois juntá-la à sua consulta:

    WITH LastBackUp AS
    (
    SELECT  bs.database_name,
            bs.backup_size,
            bs.backup_start_date,
            bmf.physical_device_name,
            Position = ROW_NUMBER() OVER( PARTITION BY bs.database_name ORDER BY bs.backup_start_date DESC )
    FROM  msdb.dbo.backupmediafamily bmf
    JOIN msdb.dbo.backupmediaset bms ON bmf.media_set_id = bms.media_set_id
    JOIN msdb.dbo.backupset bs ON bms.media_set_id = bs.media_set_id
    WHERE   bs.[type] = 'D'
    AND bs.is_copy_only = 0
    )
    SELECT 
            sd.name AS [Database],
            CAST(backup_size / 1048576 AS DECIMAL(10, 2) ) AS [BackupSizeMB],
            backup_start_date AS [Last Full DB Backup Date],
            physical_device_name AS [Backup File Location]
    FROM sys.databases AS sd
    LEFT JOIN LastBackUp AS lb
        ON sd.name = lb.database_name
        AND Position = 1
    ORDER BY [Database];
    
    • 9
  2. Marcello Miorelli
    2016-09-23T06:29:12+08:002016-09-23T06:29:12+08:00

    Apenas para adicionar à bela resposta de Spaghettidba :

    e se você fizer backup em mais de um arquivo? este script irá mostrar-lhe tudo.

            declare @backup_type CHAR(1) = 'D' --'D' full, 'L' log
            ;with Radhe as (
                SELECT  @@Servername as [Server_Name],
                B.name as Database_Name, 
                ISNULL(STR(ABS(DATEDIFF(day, GetDate(), MAX(Backup_finish_date)))), 'NEVER') as DaysSinceLastBackup,
                ISNULL(Convert(char(11), MAX(backup_finish_date), 113)+ ' ' + CONVERT(VARCHAR(8),MAX(backup_finish_date),108), 'NEVER') as LastBackupDate
                ,BackupSize_GB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00/1024.00 AS NUMERIC(18,2))
                ,BackupSize_MB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00 AS NUMERIC(18,2))
                ,media_set_id = MAX(A.media_set_id)
                ,[AVG Backup Duration]= AVG(CAST(DATEDIFF(s, A.backup_start_date, A.backup_finish_date) AS int))
                ,[Longest Backup Duration]= MAX(CAST(DATEDIFF(s, A.backup_start_date, A.backup_finish_date) AS int))
                ,A.type
                FROM sys.databases B 
    
                LEFT OUTER JOIN msdb.dbo.backupset A 
                             ON A.database_name = B.name 
                            AND A.is_copy_only = 0
                            AND (@backup_type IS NULL OR A.type = @backup_type  )
    
                GROUP BY B.Name, A.type
    
            )
    
             SELECT r.[Server_Name]
                   ,r.Database_Name
                   ,[Backup Type] = r.type 
                   ,r.DaysSinceLastBackup
                   ,r.LastBackupDate
                   ,r.BackupSize_GB
                   ,r.BackupSize_MB
                   ,F.physical_device_name
                   ,r.[AVG Backup Duration]
                   ,r.[Longest Backup Duration]
    
               FROM Radhe r
    
                LEFT OUTER JOIN msdb.dbo.backupmediafamily F
                             ON R.media_set_id = F.media_set_id
    
                ORDER BY r.Server_Name, r.Database_Name
    
    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve