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 / 240378
Accepted
jack
jack
Asked: 2019-06-13 05:08:45 +0800 CST2019-06-13 05:08:45 +0800 CST 2019-06-13 05:08:45 +0800 CST

Mostrar backups no nível do servidor

  • 772

Eu tenho um relatório do SSRS que mostra a 'hora do último backup' ao lado de cada servidor na lista. Estou obtendo essas informações usando:

SELECT TOP 1 @@SERVERNAME as serverName,
sdb.Name AS DatabaseName,
MAX(backup_finish_date) AS LastBackUpTime
FROM sys.sysdatabases sdb
LEFT OUTER JOIN msdb.dbo.backupset bus ON bus.database_name = sdb.name
WHERE bus.type = 'D'AND bus.database_name NOT IN ('master', 'model', 'msdb', 'tempdb')
GROUP BY sdb.Name
ORDER BY LastBackUpTime DESC

O problema aqui é que se, por exemplo, 7 de 8 backups de banco de dados falharem em um trabalho, esse trabalho será sinalizado como 'falhou', mas o relatório mostrará que o último horário de backup foi naquele lote de backups com falha, que foi , pois está selecionando o backup de 8 que foi bem-sucedido.

Antes disso, eu estava encontrando o último tempo de execução do trabalho específico de uma tabela na qual inseri as informações sysjobs e sysjobservers, pois a maioria de nossos trabalhos de backup são trabalhos hallengren nomeados de forma idêntica. (Veja abaixo)

SELECT serverName
         , MAX(CLastRunDateTime) AS CLastRunDateTime
    FROM  jobs
    WHERE name = 'DatabaseBackup - USER_DATABASES - FULL'

O problema com isso é que existem alguns servidores que têm um trabalho com nome não hallengren, então envolve 'mexendo' para inserir o nome correto do trabalho. Há também alguns servidores que não possuem agente e têm backups feitos manualmente, portanto, o nome do trabalho não pode ser usado para selecionar a hora do último backup.

Como posso obter um tempo de backup no nível do servidor com o mínimo de 'brincar' possível. Eu entendo os problemas, pois alguns trabalhos hallengren excluem certos bancos de dados, então não pode ser baseado em 'quando todos os backups foram feitos neste servidor' - tem que ser por um lado específico do trabalho, por outro lado não específico do trabalho. Talvez algo como, quando o nome do trabalho é 'X', 'Y', 'Z', então encontre desta forma, quando o nome do trabalho NÃO EXISTE, então use o backup máximo para o último banco de dados? Mas isso parece envolver as brincadeiras que eu não quero.

Não tenho certeza. Gostaria de saber se alguém tem uma boa maneira de fazer isso.

sql-server backup
  • 1 1 respostas
  • 48 Views

1 respostas

  • Voted
  1. Best Answer
    Randi Vertongen
    2019-06-13T06:27:14+08:002019-06-13T06:27:14+08:00

    O problema aqui é que se, por exemplo, 7 de 8 backups de banco de dados falharem em um trabalho, esse trabalho será sinalizado como 'falhou', mas o relatório mostrará que o último horário de backup foi naquele lote de backups com falha, que foi , pois está selecionando o backup de 8 que foi bem-sucedido.

    No meu entendimento, você deseja que o trabalho relate os backups completos mais recentes em uma instância quando qualquer um deles não estiver atendendo aos seus limites.

    Nesse caso, você pode optar por obter o backup COMPLETO mais recente de todos os bancos de dados e, em seguida, obter o valor mínimo desse conjunto de resultados.

    ;WITH CTE AS
    (
    SELECT 
    sdb.Name AS DatabaseName,
    MAX(backup_finish_date) AS LastBackUpTime
    FROM sys.databases sdb
    LEFT OUTER JOIN msdb.dbo.backupset bus ON bus.database_name = sdb.name
    WHERE bus.type = 'D'AND bus.database_name NOT IN ('master', 'model', 'msdb', 'tempdb')
    AND sdb.state_desc  = 'ONLINE'
    GROUP BY sdb.Name
    )
    
    SELECT  @@SERVERNAME as serverName, 
            MIN(LastBackUpTime) as LastBackUpTime
    FROM CTE;
    

    Se você também precisar do nome do banco de dados com o backup completo bem-sucedido mais antigo

    ;WITH CTE AS
    (
    SELECT 
    sdb.Name AS DatabaseName,
    MAX(backup_finish_date) AS LastBackUpTime
    FROM sys.databases sdb
    LEFT OUTER JOIN msdb.dbo.backupset bus ON bus.database_name = sdb.name
    WHERE bus.type = 'D'AND bus.database_name NOT IN ('master', 'model', 'msdb', 'tempdb')
    AND sdb.state_desc  = 'ONLINE'
    GROUP BY sdb.Name
    )
    
    SELECT TOP(1)  @@SERVERNAME as serverName, 
            LastBackUpTime as LastBackUpTime,
            DatabaseName
    FROM CTE
    ORDER BY LastBackUpTime ASC;
    

    Eu não usaria estatísticas de execução de tarefas, pois elas podem retornar falsos positivos.

    Além de verificar se as tarefas de backup funcionaram corretamente, você também deve validar seus backups restaurando-os em algum lugar.

    • 0

relate perguntas

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

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • 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