2014-03-12 58 views
1

编辑:我让它带回我需要的信息,但where子句没有过滤出'L'类型的所有备份,如果我从(bak.type = 'D'...)然后它不会过滤掉所有的sysdatabases。任何想法?SQL未命中完整备份脚本

这是我的。我试图加入msdb..backupset和msdb.dbo.backupmediafamily以获得类型D和device_type为2.任何帮助将被appricated。谢谢!

SELECT DISTINCT 
    CONVERT(varchar,GETDATE()-1,111) AS Missing_Backup_Date, 
    @@servername AS Instance_Name, 
    bak.database_name AS Database_Name, 
    DATENAME(weekday, getdate()-1) AS Backup_Day_of_Week, 
    bak.type AS Failure_Count, 
    fam.device_type, 
     CASE fam.device_type 
      when 2 then 'SQL' 
      when 7 then 'Avamar' 
     END AS Backup_Type 
FROM msdb..backupset bak 
    JOIN msdb.dbo.backupmediafamily fam 
     ON bak.media_set_id = fam.media_set_id 
WHERE bak.database_name NOT IN ('tempdb','msdb','master','model') 
    AND (bak.type = 'D' 
    AND bak.backup_finish_date IS NULL OR bak.backup_finish_date < DATEADD(hour, -24, GETDATE())) 

回答

1

这是一个脚本,我用它来查明备份链是什么。由于SQL注入是一个管理脚本,因此没有对SQL注入的保护。 IE - 限制访问。

只需添加额外的字段和过滤器。

/****************************************************** 
* 
* Name:   usp_get_backup_chain.sql 
*  
* Design Phase: 
*  Author: John Miner 
*  Date:  01-21-2014 
*  Blog:  www.craftydba.com 
* 
*  Purpose: What is the backup chain for a database? 
* 
******************************************************/ 

/* 
    Choose the database. 
*/ 

USE [msdb] 
GO 


/* 
    Drop the old stored procedure. 
*/ 

IF OBJECT_ID('[dbo].[usp_get_backup_chain]') > 0 
DROP PROCEDURE [dbo].[usp_get_backup_chain] 
GO 


/* 
    Create the new stored procedure. 
*/ 

CREATE PROCEDURE [dbo].[usp_get_backup_chain] 
    @NAME SYSNAME = '*' 
AS 
BEGIN 

    -- Declare variables 
    DECLARE @VAR_TSQL VARCHAR(2048); 

    -- Dynamic T-SQL 
    SET @VAR_TSQL = 
    'SELECT 
      s.server_name, 
      s.database_name, 
      s.name as software_name, 
      CASE s.[type] 
       WHEN ''D'' THEN ''Database'' 
       WHEN ''I'' THEN ''Differential database'' 
       WHEN ''L'' THEN ''Log'' 
       WHEN ''F'' THEN ''File or filegroup'' 
       WHEN ''G'' THEN ''Differential file'' 
       WHEN ''P'' THEN ''Partial'' 
       WHEN ''Q'' THEN ''Differential partial'' 
       ELSE ''none'' 
      END AS backup_type, 
      s.backup_start_date, 
      s.backup_finish_date, 
      f.physical_device_name 
     FROM 
      msdb.dbo.backupset AS s 
     JOIN 
      msdb.dbo.backupmediafamily as f 
     ON 
      s.media_set_id = f.media_set_id 
      '; 

    -- All databases? 
    IF @NAME <> '*' 
     SET @VAR_TSQL = @VAR_TSQL + ' WHERE s.database_name = ' + CHAR(39) + @NAME + CHAR(39); 

    -- Show in desc order 
    SET @VAR_TSQL = @VAR_TSQL + 'ORDER BY s.backup_start_date DESC '; 

    -- Run the command 
    EXECUTE(@VAR_TSQL); 
END; 

GO 

如果你在设备类型真正感兴趣的,在动态SQL的末尾添加信息。

这是根据BO1解码 - http://technet.microsoft.com/en-us/library/ms190284.aspx

 CASE f.device_type 
      WHEN 2 THEN 'Disk' 
      WHEN 5 THEN 'Tape' 
      WHEN 7 THEN 'Virtual device' 
      WHEN 105 THEN 'Permanent device' 
      ELSE '' 
     END AS device_types 

此外,如果您未传递数据库名称,则会列出所有数据库。

你还想要什么?

+0

嘿,是的,我有类似于@var_tsql中的内容。然而,我正在寻找的是'SQL'AS Backup_Type值的改变方式,基于它是否是磁盘或虚拟的错过的备份,以及只从主数据库中取回'D'数据库备份。 sysdatabases – user3412016

+0

+1声音脚本在这里它在我的SQL脚本文件夹:) –

+0

我扔了案件,并根据你有一些东西调整我的代码。检查我在OP中的编辑评论,以了解我现在遇到的麻烦。 – user3412016