国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SQL Server數(shù)據(jù)庫判斷最近一次的備份執(zhí)行結(jié)果

這篇具有很好參考價(jià)值的文章主要介紹了SQL Server數(shù)據(jù)庫判斷最近一次的備份執(zhí)行結(jié)果。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1 麻煩的地方

在SQL Server的官方文檔里面可以看到備份和還原的表,但是這些表里面只能找到備份成功的相關(guān)信息,無法找到備份失敗的記錄,比如msdb.dbo.backupset。對于一些監(jiān)控系統(tǒng)未監(jiān)控作業(yè)的情況下,想要監(jiān)控?cái)?shù)據(jù)庫備份任務(wù)執(zhí)行失敗而觸發(fā)告警規(guī)則,有些麻煩。
但是SQL server內(nèi)部是可以通過查詢errorlog來判斷數(shù)據(jù)庫備份作業(yè)是否成功:
SQL Server數(shù)據(jù)庫判斷最近一次的備份執(zhí)行結(jié)果

2 獲取errorlog的trace表

我們可以借助sys.traces定位到errorlog的trace文件路徑,然后通過再通過fn_trace_gettable將errlog的trace文件轉(zhuǎn)換為普通的表來查詢即可。

  1. 定位errorlog的trace文件物理路徑
SELECT
          REVERSE(
            SUBSTRING(
              REVERSE([path]),
              CHARINDEX(CHAR(92), REVERSE([path])),
              260
            )
          ) + N'log.trc'
        FROM
          sys.traces
        WHERE
          is_default = 1

輸出結(jié)果:
SQL Server數(shù)據(jù)庫判斷最近一次的備份執(zhí)行結(jié)果
2. 得到路徑后,使用fn_trace_gettable將errolog的trace文件轉(zhuǎn)換為普通的數(shù)據(jù)表

SELECT
  *
FROM
  sys.fn_trace_gettable(
    'S:\MSSQL13.MSSQLSERVER\MSSQL\Log\log.trc',
    default
  )

SQL Server數(shù)據(jù)庫判斷最近一次的備份執(zhí)行結(jié)果
3. 查找與備份相關(guān)的事件記錄,在trace文件中對應(yīng)的EventClass為115,并將所有備份開頭的語句篩選出來

SELECT
  TextData,Databasename,StartTime
FROM
  sys.fn_trace_gettable(
    'S:\MSSQL13.MSSQLSERVER\MSSQL\Log\log.trc',
    default
  )
WHERE
  EventClass = 115
  AND UPPER(CONVERT(nvarchar(max), TextData)) LIKE 'BACKUP%'

SQL Server數(shù)據(jù)庫判斷最近一次的備份執(zhí)行結(jié)果

從返回的TextData中沒有找到是否關(guān)于備份成功或者失敗的說明,也沒有在其它列中找到相關(guān)描述,需要結(jié)合msdb.dbo.backupset來判斷。

3 結(jié)合備份表backupset,判斷備份狀態(tài)

  1. 篩選出所有數(shù)據(jù)庫的備份任務(wù)執(zhí)行情況
    SQL Server數(shù)據(jù)庫判斷最近一次的備份執(zhí)行結(jié)果
    從查詢的結(jié)果可知,每個(gè)成功的備份都有1個(gè)開始時(shí)間和結(jié)束時(shí)間,考慮將開始時(shí)間與trace文件轉(zhuǎn)換的表進(jìn)行對比:
flowchart LR A[trace表的獲取備份記錄和時(shí)間]--> B[取得StartTime列] B[與backupset表對比判斷]--> C{是否存在與StartTime列對應(yīng)的值} C--存在-->D[備份成功] C--不存在-->E[備份失敗]

形成了具體的思路后,下面將trace轉(zhuǎn)換的表的StartTime列與backupset表的backup_start_date列進(jìn)行對比判斷
2. 判斷存在對應(yīng)的值則說明備份成功,不存在則備份失敗

SELECT
  dt.DatabaseName,
  dt.StartTime,
  bs.backup_start_date,
  bs.backup_finish_date,
  [Status] = CASE
    WHEN bs.backup_start_date IS NULL THEN (dt.DatabaseName) + '數(shù)據(jù)庫備份失敗'
    ELSE (dt.DatabaseName) + '數(shù)據(jù)庫備份成功'
  END
FROM
  sys.fn_trace_gettable(
    'S:\MSSQL13.MSSQLSERVER\MSSQL\Log\log.trc',
    default
  ) AS dt
  LEFT OUTER JOIN msdb.dbo.backupset AS bs ON dt.DatabaseName = bs.database_name
  AND ABS(
    DATEDIFF(SECOND, dt.StartTime, bs.backup_start_date)
  ) < 5
WHERE
  dt.EventClass = 115
  AND UPPER(CONVERT(nvarchar(max), dt.TextData)) LIKE N'BACKUP%'
ORDER BY
  dt.StartTime DESC;

SQL Server數(shù)據(jù)庫判斷最近一次的備份執(zhí)行結(jié)果

4 形成用于告警的SQL語句

完成上面的操作之后,我們已經(jīng)能夠看到所有數(shù)據(jù)庫的備份是成功還是失敗的狀態(tài),現(xiàn)在還需要將SQL再度細(xì)化,輸出所有數(shù)據(jù)庫最近一次備份執(zhí)行成功或者失敗的信息:即每個(gè)數(shù)據(jù)庫只有一行記錄用于說明最近一次的備份狀態(tài)。
下面有兩種寫法可以實(shí)現(xiàn),第1種是游標(biāo)的寫法,性能極差,后來找chatgpt一起討論之后,采用了group by優(yōu)化,形成第2種寫法。

  1. 第1種,游標(biāo)查看每個(gè)數(shù)據(jù)庫最近一次備份狀態(tài)
點(diǎn)擊查看代碼
DBCC FREE
DECLARE @databaseName1 nvarchar(100)
DECLARE @sql nvarchar(4000)

DECLARE db_cursor CURSOR FOR
    SELECT name
    FROM sys.databases
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @databaseName1

WHILE @@FETCH_STATUS = 0  
BEGIN  
    SET @sql = '
	SELECT
  TOP 1 dt.DatabaseName,
  dt.StartTime,
  bs.backup_start_date,
  bs.backup_finish_date,
  [Status] = CASE
    WHEN bs.backup_start_date IS NULL THEN (dt.DatabaseName) + ''數(shù)據(jù)庫備份失敗''
    ELSE (dt.DatabaseName) + ''數(shù)據(jù)庫備份成功''
  END
FROM
  sys.fn_trace_gettable(
    (
      SELECT
        REVERSE(
          SUBSTRING(
            REVERSE([path]),
            CHARINDEX(CHAR(92), REVERSE([path])),
            260
          )
        ) + N''log.trc''
      FROM
        sys.traces
      WHERE
        is_default = 1
    ),
    default
  ) AS dt
  LEFT OUTER JOIN msdb.dbo.backupset AS bs ON dt.DatabaseName = bs.database_name
  AND ABS(
    DATEDIFF(SECOND, dt.StartTime, bs.backup_start_date)
  ) < 5
WHERE
  dt.EventClass = 115
  AND UPPER(CONVERT(nvarchar(max), dt.TextData)) LIKE N''BACKUP%''
  AND dt.DatabaseName=''' + @databaseName1 +''' ORDER BY dt.StartTime DESC'
    EXEC sp_executesql @sql
    FETCH NEXT FROM db_cursor INTO @databaseName1
END 
CLOSE db_cursor
DEALLOCATE db_cursor

可以看到性能極差,查詢3條數(shù)據(jù)耗時(shí)24秒,每次游標(biāo)都要到消耗臨時(shí)表和進(jìn)行大量的邏輯讀取。

點(diǎn)擊查看消耗的資源

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 14 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysobjvalues'。掃描計(jì)數(shù) 14,邏輯讀取 36 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syspalvalues'。掃描計(jì)數(shù) 0,邏輯讀取 98 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysguidrefs'。掃描計(jì)數(shù) 2,邏輯讀取 30 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysclsobjs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syssingleobjrefs'。掃描計(jì)數(shù) 7,邏輯讀取 42 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysdbreg'。掃描計(jì)數(shù) 1,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 31 毫秒,占用時(shí)間 = 27 毫秒。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysobjvalues'。掃描計(jì)數(shù) 2,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syspalvalues'。掃描計(jì)數(shù) 0,邏輯讀取 14 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysguidrefs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysclsobjs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syssingleobjrefs'。掃描計(jì)數(shù) 1,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysdbreg'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 16 毫秒,占用時(shí)間 = 23 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。
SQL Server 分析和編譯時(shí)間: 
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

(1 行受影響)
表 'backupset'。掃描計(jì)數(shù) 1,邏輯讀取 3 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 468 毫秒,占用時(shí)間 = 678 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 468 毫秒,占用時(shí)間 = 678 毫秒。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysobjvalues'。掃描計(jì)數(shù) 2,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syspalvalues'。掃描計(jì)數(shù) 0,邏輯讀取 14 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysguidrefs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysclsobjs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syssingleobjrefs'。掃描計(jì)數(shù) 1,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysdbreg'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 16 毫秒,占用時(shí)間 = 23 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。
SQL Server 分析和編譯時(shí)間: 
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

(0 行受影響)
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 406 毫秒,占用時(shí)間 = 732 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 406 毫秒,占用時(shí)間 = 732 毫秒。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysobjvalues'。掃描計(jì)數(shù) 2,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syspalvalues'。掃描計(jì)數(shù) 0,邏輯讀取 14 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysguidrefs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysclsobjs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syssingleobjrefs'。掃描計(jì)數(shù) 1,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysdbreg'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 16 毫秒,占用時(shí)間 = 21 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。
SQL Server 分析和編譯時(shí)間: 
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

(0 行受影響)
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 422 毫秒,占用時(shí)間 = 659 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 422 毫秒,占用時(shí)間 = 660 毫秒。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysobjvalues'。掃描計(jì)數(shù) 2,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syspalvalues'。掃描計(jì)數(shù) 0,邏輯讀取 14 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysguidrefs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysclsobjs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syssingleobjrefs'。掃描計(jì)數(shù) 1,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysdbreg'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 15 毫秒,占用時(shí)間 = 616 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。
SQL Server 分析和編譯時(shí)間: 
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

(0 行受影響)
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 375 毫秒,占用時(shí)間 = 678 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 375 毫秒,占用時(shí)間 = 678 毫秒。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysobjvalues'。掃描計(jì)數(shù) 2,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syspalvalues'。掃描計(jì)數(shù) 0,邏輯讀取 14 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysguidrefs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysclsobjs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syssingleobjrefs'。掃描計(jì)數(shù) 1,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysdbreg'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 16 毫秒,占用時(shí)間 = 1286 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。
SQL Server 分析和編譯時(shí)間: 
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

(1 行受影響)
表 'backupset'。掃描計(jì)數(shù) 1,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 375 毫秒,占用時(shí)間 = 781 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 375 毫秒,占用時(shí)間 = 781 毫秒。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysobjvalues'。掃描計(jì)數(shù) 2,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syspalvalues'。掃描計(jì)數(shù) 0,邏輯讀取 14 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysguidrefs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysclsobjs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syssingleobjrefs'。掃描計(jì)數(shù) 1,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysdbreg'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 31 毫秒,占用時(shí)間 = 1608 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。
SQL Server 分析和編譯時(shí)間: 
   CPU 時(shí)間 = 13 毫秒,占用時(shí)間 = 13 毫秒。

(1 行受影響)
表 'backupset'。掃描計(jì)數(shù) 1,邏輯讀取 3 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 390 毫秒,占用時(shí)間 = 737 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 406 毫秒,占用時(shí)間 = 751 毫秒。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysobjvalues'。掃描計(jì)數(shù) 2,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syspalvalues'。掃描計(jì)數(shù) 0,邏輯讀取 14 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysguidrefs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysclsobjs'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'syssingleobjrefs'。掃描計(jì)數(shù) 1,邏輯讀取 6 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'sysdbreg'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 16 毫秒,占用時(shí)間 = 20 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。
SQL Server 分析和編譯時(shí)間: 
   CPU 時(shí)間 = 12 毫秒,占用時(shí)間 = 12 毫秒。

(0 行受影響)
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 468 毫秒,占用時(shí)間 = 2492 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 484 毫秒,占用時(shí)間 = 2505 毫秒。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 2 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

(1 行受影響)

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 16 毫秒,占用時(shí)間 = 23 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。
SQL Server 分析和編譯時(shí)間: 
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

SQL Server數(shù)據(jù)庫判斷最近一次的備份執(zhí)行結(jié)果

  1. 第2種,使用MAX函數(shù)和group by優(yōu)化
SELECT
    [Status] = MAX(CASE
      WHEN bs.backup_start_date IS NULL THEN dt.DatabaseName+'數(shù)據(jù)庫備份失敗'
      ELSE dt.DatabaseName+'數(shù)據(jù)庫備份成功'
    END)
  FROM
    sys.fn_trace_gettable(
      (
        SELECT
          REVERSE(
            SUBSTRING(
              REVERSE([path]),
              CHARINDEX(CHAR(92), REVERSE([path])),
              260
            )
          ) + N'log.trc'
        FROM
          sys.traces
        WHERE
          is_default = 1
      ),
      default
    ) AS dt
    LEFT OUTER JOIN msdb.dbo.backupset AS bs ON dt.DatabaseName = bs.database_name
      AND ABS(DATEDIFF(SECOND, dt.StartTime, bs.backup_start_date)) < 5
  WHERE
    dt.EventClass = 115
    AND UPPER(CONVERT(nvarchar(max), dt.TextData)) LIKE 'BACKUP%'
  GROUP BY
    dt.DatabaseName

這次執(zhí)行只要1秒鐘,占用的資源也極低。

SQL Server 分析和編譯時(shí)間: 
   CPU 時(shí)間 = 15 毫秒,占用時(shí)間 = 20 毫秒。

(3 行受影響)
表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'backupset'。掃描計(jì)數(shù) 1,邏輯讀取 48 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 469 毫秒,占用時(shí)間 = 935 毫秒。
SQL Server 分析和編譯時(shí)間: 
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

 SQL Server 執(zhí)行時(shí)間:
   CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。

SQL Server數(shù)據(jù)庫判斷最近一次的備份執(zhí)行結(jié)果


截止到此,基本大功告成了。接下來要實(shí)現(xiàn)的就是監(jiān)控系統(tǒng)怎么取得指標(biāo)和觸發(fā)告警,具體可以根據(jù)不同的監(jiān)控平臺進(jìn)行配置。
實(shí)際上還可以通過xp_readerrorlog來讀取errorlog更加快速得篩選出備份失敗的記錄,但本次沒有再測試,有興趣的朋友可以自行參考測試。
SQL Server數(shù)據(jù)庫判斷最近一次的備份執(zhí)行結(jié)果

5 使用xp_readerrorlog監(jiān)控準(zhǔn)確性更高

2023年5月10日增加:??在實(shí)際生產(chǎn)環(huán)境中,我們發(fā)現(xiàn)使用了NBU類的備份系統(tǒng)對數(shù)據(jù)庫進(jìn)行備份時(shí),NBU備份的啟動時(shí)間在log trace的時(shí)間要晚了10幾秒,這就導(dǎo)致上面的腳本判斷失敗了,最后確定通過xp_readerrorlog來讀取errorlog,確保監(jiān)控?cái)?shù)據(jù)的準(zhǔn)確性。參考腳本:

DECLARE @Logs TABLE
(
    LogDate DATETIME,
    ProcessInfo NVARCHAR(24),
    Text VARCHAR(1000)
)


INSERT INTO @Logs EXEC sp_readerrorlog 0, 1, N'Backup failed'

DECLARE @keyword VARCHAR(50);
DECLARE @num_keywords INT;
DECLARE @i INT;

SET @num_keywords = (SELECT COUNT(*) FROM sysdatabases);
SET @i = 1;

WHILE (@i <= @num_keywords)
BEGIN
  SET @keyword = (SELECT name FROM sysdatabases WHERE dbid = @i);
    SELECT TOP 1 LogDate,SUBSTRING([Text], PATINDEX('%' + @keyword + '%', [Text]), LEN(@keyword))+'備份失敗' AS Result
  FROM @Logs
  WHERE PATINDEX('%' + @keyword + '%', [Text]) > 0
  ORDER BY LogDate DESC;
  SET @i = @i + 1;
END;

SQL Server數(shù)據(jù)庫判斷最近一次的備份執(zhí)行結(jié)果文章來源地址http://www.zghlxwxcb.cn/news/detail-436823.html

到了這里,關(guān)于SQL Server數(shù)據(jù)庫判斷最近一次的備份執(zhí)行結(jié)果的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SQL Server 數(shù)據(jù)庫安裝教程SQL Server 2017

    SQL Server 數(shù)據(jù)庫安裝教程SQL Server 2017

    官網(wǎng):?SQL Server 下載 | Microsoft ?軟件版本看你自己需求啦,反正我是下了SQL Server 2017 評估版(試用180天,秘鑰自己百度) ?下載后,軟件有點(diǎn)小,不是實(shí)際的安裝包,只是安裝導(dǎo)向包,在安裝過程才下載實(shí)際的安裝包: ? ? ?要保持有網(wǎng)絡(luò),直接雙擊安裝,選基本即可: ?選好

    2024年02月05日
    瀏覽(109)
  • SQL Server2008數(shù)據(jù)庫升級至SQL Server2012

    SQL Server2008數(shù)據(jù)庫升級至SQL Server2012

    今天接到了一個(gè)需求,服務(wù)器上的數(shù)據(jù)庫需要從SQL Server2008升級到2012。根據(jù)之前的經(jīng)驗(yàn),感覺是一個(gè)非常有意思的過程(事實(shí)上也是。這個(gè)過程也給了我一些觸動與啟發(fā),因此,便記錄了自己的踩坑過程以及解決方案,還有安裝過程的體會。 啟動SQL Server2012的安裝引導(dǎo)程序,

    2024年02月05日
    瀏覽(92)
  • sql server數(shù)據(jù)庫跟蹤——SQL Server Profiler解析

    sql server數(shù)據(jù)庫跟蹤——SQL Server Profiler解析

    工具 : SQL Server Profiler這個(gè)工具是SQL Server數(shù)據(jù)庫自帶的語句執(zhí)行跟蹤工具,常使用于分析軟件修改數(shù)據(jù)庫時(shí)所執(zhí)行的語句,適合用來研究軟件運(yùn)行數(shù)據(jù)庫的原理。 打開方式: 本機(jī)安裝了SQL server的話,都是自帶的。直接去直接在【開始】-【程序】-搜索Profiler可找到【SQL Ser

    2024年04月16日
    瀏覽(102)
  • Sql server數(shù)據(jù)庫安裝

    Sql server數(shù)據(jù)庫安裝

    以sql server2014數(shù)據(jù)庫為例 sql server數(shù)據(jù)庫安裝需要注意兩點(diǎn): 1.不使用從鏡像中拷貝出的壓縮包安裝會報(bào)錯(cuò),提示缺少trin_aide.cab和vs_shell.cab文件 2.sql server2014數(shù)據(jù)庫安裝前需要安裝.net Framework 3.5 各個(gè)版本sql server數(shù)據(jù)庫情況: 1.sql server2008 R2數(shù)據(jù)庫提示需要.net Framework 3.5。但不

    2024年02月09日
    瀏覽(27)
  • SQL Server數(shù)據(jù)庫管理

    SQL Server數(shù)據(jù)庫管理

    數(shù)據(jù)庫登錄——使用兩種方式均可登錄數(shù)據(jù)庫:windows和sqlserver身份驗(yàn)證方式兩種。 ?數(shù)據(jù)庫的使用和管理 步驟一:創(chuàng)建數(shù)據(jù)庫 1)新建數(shù)據(jù)庫,數(shù)據(jù)庫名為book,初始大小都配置為3,自動增長與路徑都為默認(rèn),點(diǎn)擊確定 ? 步驟二:查看主數(shù)據(jù)與日志文件(查看C:Program Files

    2024年02月13日
    瀏覽(33)
  • SQL Server數(shù)據(jù)庫使用

    SQL Server數(shù)據(jù)庫使用

    SQL Server 2008 R2的安裝和使用 安裝前的準(zhǔn)備 安裝過程 1)安裝所選功能 2)安裝的類型:默認(rèn)或命名實(shí)例 3)服務(wù)賬戶 4)身份驗(yàn)證模式 5)排序規(guī)則設(shè)置 6)開始安裝 7)完成安裝 驗(yàn)證數(shù)據(jù)庫安裝成功 【開始】|【程序】中可以看到Microsoft SQL Server 2008的程序組 啟動和停止數(shù)據(jù)庫

    2024年02月11日
    瀏覽(98)
  • 【SQL Server】數(shù)據(jù)庫開發(fā)指南(一)數(shù)據(jù)庫設(shè)計(jì)

    【SQL Server】數(shù)據(jù)庫開發(fā)指南(一)數(shù)據(jù)庫設(shè)計(jì)

    本系列博文還在更新中,收錄在專欄:#MS-SQL Server 專欄中。 本系列文章列表如下: 【SQL Server】 Linux 運(yùn)維下對 SQL Server 進(jìn)行安裝、升級、回滾、卸載操作 【SQL Server】數(shù)據(jù)庫開發(fā)指南(一)數(shù)據(jù)庫設(shè)計(jì)的核心概念和基本步驟 【SQL Server】數(shù)據(jù)庫開發(fā)指南(二)MSSQL數(shù)據(jù)庫開發(fā)對

    2023年04月08日
    瀏覽(35)
  • 《數(shù)據(jù)庫系統(tǒng)概論》SQL Server 數(shù)據(jù)庫導(dǎo)出、導(dǎo)入教程

    《數(shù)據(jù)庫系統(tǒng)概論》SQL Server 數(shù)據(jù)庫導(dǎo)出、導(dǎo)入教程

    在SQL Server的使用過程中,大家難免遇到數(shù)據(jù)庫表的導(dǎo)出、導(dǎo)入,從而實(shí)現(xiàn)用其它電腦打開數(shù)據(jù)庫。 如果是使用學(xué)校實(shí)驗(yàn)室(機(jī)房)電腦做實(shí)驗(yàn)的同學(xué),一定要掌握本技能?。?! 1、右鍵點(diǎn)擊數(shù)據(jù)庫,“任務(wù)”,“生成腳本”,如下圖 2、選擇對象操作如圖,“選擇具體的數(shù)據(jù)

    2024年02月10日
    瀏覽(34)
  • 【數(shù)據(jù)庫原理】MyShop 商城數(shù)據(jù)庫設(shè)計(jì)(SQL server)

    【數(shù)據(jù)庫原理】MyShop 商城數(shù)據(jù)庫設(shè)計(jì)(SQL server)

    聲明:未經(jīng)允許,請勿轉(zhuǎn)載 MyShop商城是一個(gè)在線購物平臺,致力于提供便捷的購物體驗(yàn)。為了滿足用戶需求,商城需要一個(gè)可靠、高效的數(shù)據(jù)庫系統(tǒng)來管理商品、用戶和訂單信息。數(shù)據(jù)庫系統(tǒng)應(yīng)具備性能、可靠性和擴(kuò)展性,并通過合理的設(shè)計(jì)和優(yōu)化提高系統(tǒng)的響應(yīng)速度和數(shù)據(jù)

    2024年02月11日
    瀏覽(23)
  • 【數(shù)據(jù)庫·關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL·學(xué)習(xí)筆記】Microsoft SQL Server數(shù)據(jù)庫的建立和刪除

    【數(shù)據(jù)庫·關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL·學(xué)習(xí)筆記】Microsoft SQL Server數(shù)據(jù)庫的建立和刪除

    開發(fā)環(huán)境:SQL Server Management Studio(SSMS) 利用數(shù)據(jù)庫對象資源管理器創(chuàng)建數(shù)據(jù)庫 (1)右擊對象資源管理器中的數(shù)據(jù)庫,選擇新建數(shù)據(jù)庫 (2)在新建數(shù)據(jù)庫界面輸入數(shù)據(jù)庫名稱 ,并選擇確定 利用CREAT DATABASE命令在SSM工具的新建查詢中創(chuàng)建數(shù)據(jù)庫 1.語法格式 CREATE DATABASE dat

    2024年02月08日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包