AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 301602
Accepted
SqlDBA
SqlDBA
Asked: 2021-10-25 15:41:36 +0800 CST2021-10-25 15:41:36 +0800 CST 2021-10-25 15:41:36 +0800 CST

如果有人触发临时备份并且它不是 copy_only 备份,则生成警报

  • 772

我们正在使用第 3 方工具来备份 SQL Server 数据库。我希望设置一个警报,该警报会在进行临时备份时生成,并且它不是 copy_only。我们正在使用第 3 方监控工具,我想使用此第 3 方工具设置警报,该工具使用 T-SQL 脚本提取信息。

每当 T-SQL 查询返回结果 0 或 1 如果在过去 1 小时内进行了临时备份并且它不是 copy_only 数据库备份,则应生成警报

sql-server backup
  • 2 2 个回答
  • 64 Views

2 个回答

  • Voted
  1. Best Answer
    John K. N.
    2021-10-25T23:28:44+08:002021-10-25T23:28:44+08:00

    首先,您要从相关 SQL Server 实例上的备份历史记录中检索正常信息,以找出正常备份文件位置的样子。您可以通过以下方式实现此目的:

    SELECT  
       msdb.dbo.backupset.database_name,  
       msdb.dbo.backupset.backup_start_date,  
       msdb.dbo.backupset.backup_finish_date, 
       CASE msdb..backupset.type  
           WHEN 'D' THEN 'Full'  
           WHEN 'I' THEN 'Diff'
           WHEN 'L' THEN 'Log'  
       END AS backup_type,  
       -- msdb.dbo.backupset.backup_size / 1024 / 1024 as [backup_size MB],  
       CASE  
           WHEN msdb.dbo.backupmediafamily.device_type = 2 THEN 'Disk'
           WHEN msdb.dbo.backupmediafamily.device_type = 5 THEN 'Tape'
           WHEN msdb.dbo.backupmediafamily.device_type = 7 THEN 'Virtual Device' 
           WHEN msdb.dbo.backupmediafamily.device_type = 9 THEN 'Azure Storage' 
           WHEN msdb.dbo.backupmediafamily.device_type = 105 THEN 'A permanent backup device'
           ELSE 'Unknown backup device code:' + CAST(msdb.dbo.backupmediafamily.device_type AS VARCHAR(3)) + '!'    
       END AS device_type_desc,
       msdb.dbo.backupmediafamily.physical_device_name,
       msdb.dbo.backupmediafamily.logical_device_name,
       msdb.dbo.backupset.name AS backupset_name, 
       msdb.dbo.backupset.description,
       msdb.dbo.backupset.is_copy_only,
       msdb.dbo.backupset.is_snapshot,   
       msdb.dbo.backupmediaset.name,
       msdb.dbo.backupmediaset.software_name,
       msdb.dbo.backupset.user_name,
       'EOR'  
    FROM   msdb.dbo.backupmediafamily  
       INNER JOIN msdb.dbo.backupset 
           ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id  
       INNER JOIN msdb.dbo.backupmediaset
           ON msdb.dbo.backupmediaset.media_set_id = backupmediafamily.media_set_id
    WHERE 1 = 1
    ORDER BY msdb.dbo.backupset.backup_start_date DESC;
    

    使用 Commvault 作为备份解决方案时的结果集可能如下所示:

    数据库名称 备份开始日期 备份类型 device_type_desc 物理设备名称 逻辑设备名称 备份集名称 描述 is_copy_only is_snapshot 姓名 软件名称 用户名
    TVD工具 2021-10-25 08:04:14.000 日志 虚拟设备 8e5bda3c-d453-4328-b180-dcee74549f68 无效的 CommVault Galaxy 备份 无效的 0 0 无效的 微软 SQL 服务器 域\用户
    TVD工具 2021-10-24 21:01:58.000 日志 虚拟设备 f40f904f-e197-4c2b-88fe-b9cdb5ee237f 无效的 CommVault Galaxy 备份 无效的 0 0 无效的 微软 SQL 服务器 域\用户
    掌握 2021-10-24 20:16:02.000 满的 虚拟设备 361ff522-8e39-406c-b971-5808ee51240b 无效的 CommVault Galaxy 备份 无效的 0 0 无效的 微软 SQL 服务器 域\用户
    TVD工具 2021-10-24 20:06:44.000 差异 虚拟设备 3589d70e-af8d-469f-ad66-5e1ca52cef1e 无效的 CommVault Galaxy 备份 无效的 0 0 无效的 微软 SQL 服务器 域\用户
    数据库 2021-10-24 20:06:44.000 差异 虚拟设备 12685e62-f688-4818-96d3-e20a802af6b9 无效的 CommVault Galaxy 备份 无效的 0 0 无效的 微软 SQL 服务器 域\用户

    因此,您必须使用备份解决方案确定哪些列会告诉您何时在备份解决方案之外运行某些内容。

    在我的情况下,我只搜索列中没有的任何备份集,CommVault Galaxy%并且backupset_name可能没有device_type使用7. 你的旅费可能会改变。

    回答您的问题

    将上面的查询与几个WHERE子句结合起来会产生以下查询,您可以将其插入到您的监控工具中:

    SELECT  
       msdb.dbo.backupset.database_name,  
       msdb.dbo.backupset.backup_start_date,  
       msdb.dbo.backupset.backup_finish_date, 
       CASE msdb..backupset.type  
           WHEN 'D' THEN 'Full'  
           WHEN 'I' THEN 'Diff'
           WHEN 'L' THEN 'Log'  
       END AS backup_type,  
       -- msdb.dbo.backupset.backup_size / 1024 / 1024 as [backup_size MB],  
       CASE  
           WHEN msdb.dbo.backupmediafamily.device_type = 2 THEN 'Disk'
           WHEN msdb.dbo.backupmediafamily.device_type = 5 THEN 'Tape'
           WHEN msdb.dbo.backupmediafamily.device_type = 7 THEN 'Virtual Device' 
           WHEN msdb.dbo.backupmediafamily.device_type = 9 THEN 'Azure Storage' 
           WHEN msdb.dbo.backupmediafamily.device_type = 105 THEN 'A permanent backup device'
           ELSE 'Unknown backup device code:' + CAST(msdb.dbo.backupmediafamily.device_type AS VARCHAR(3)) + '!'    
       END AS device_type_desc,
       msdb.dbo.backupmediafamily.physical_device_name,
       msdb.dbo.backupmediafamily.logical_device_name,
       msdb.dbo.backupset.name AS backupset_name, 
       msdb.dbo.backupset.description,
       msdb.dbo.backupset.is_copy_only,
       msdb.dbo.backupset.is_snapshot,   
       msdb.dbo.backupmediaset.name,
       msdb.dbo.backupmediaset.software_name,
       msdb.dbo.backupset.user_name,
       'EOR'  
    FROM   msdb.dbo.backupmediafamily  
       INNER JOIN msdb.dbo.backupset 
           ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id  
       INNER JOIN msdb.dbo.backupmediaset
           ON msdb.dbo.backupmediaset.media_set_id = backupmediafamily.media_set_id
    WHERE 1 = 1
    -- Is Not CommVault Backup Check
    AND (msdb.dbo.backupmediafamily.device_type <> 7 
         AND msdb.dbo.backupset.name NOT LIKE 'CommVault Galaxy%')
    -- Last Hour Check 
    AND   (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102)) >= DATEADD(hh,-1,GETDATE())
    -- Is Not Copy_Only Check
    AND msdb.dbo.backupset.is_copy_only <> 1
    ORDER BY msdb.dbo.backupset.backup_start_date DESC;
    

    这导致以下输出:

    数据库名称 备份开始日期 备份类型 device_type_desc 物理设备名称 逻辑设备名称 备份集名称 描述 is_copy_only is_snapshot 姓名 软件名称 用户名 (无列名)
    TVD工具 2021-10-25 09:21:07.000 满的 磁盘 H:\adhoc\SERVERNAME\TVDTools_Full_CopyOnly_20211025_092107.bak 无效的 TVDTools-完整备份 无效的 0 0 无效的 微软 SQL 服务器 域/用户 提高采收率

    明白了!

    结果可以在您的监控软件中用于执行您想做的任何事情,例如发送带有结果的电子邮件,在控制台中触发警报,...

    • 1
  2. HandyD
    2021-10-25T15:51:50+08:002021-10-25T15:51:50+08:00

    查看 msdb 中的备份集表。帮助您入门的示例查询:

    SELECT [database_name] AS [Database]
        , [user_name] AS [BackupCreator]
        , [backup_start_date] AS [BackupDate]
        , CASE [type]
            WHEN 'L' THEN 'Log'
            WHEN 'I' THEN 'Diff'
            WHEN 'D' THEN 'Full'
          END AS [BackupType]
        , [is_copy_only] AS [IsCopyOnly]
    FROM msdb..backupset
    

    如果您还想找到进行错误备份的位置,则可能需要包含backupmediafamily 。

    • 0

相关问题

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve