监控数据库备份
了解数据库是否有备份是至关重要的,事实上,这是作为一位DBA首先应当考虑的问题之一。没有备份就无法恢复数据库,因此DBA需要每天检查并确保数据库的备份策略是否运行正常,是否按照预期备份所有的数据库。因此每天早上都需要核查备份集,其中的一种方法就是运行脚本文件,类似于下面的一段代码:
SELECT name AS database_name
, backup_finish_date
, coalesce(type,'NO BACKUP') AS last_backup_type
FROM
(SELECT database_name
, backup_finish_date
, CASE WHEN type = 'D' THEN 'Full'
WHEN type = 'I' THEN 'Differential'
WHEN type = 'L' THEN 'Transaction Log'
WHEN type = 'F' THEN 'File'
WHEN type = 'G' THEN 'Differential File'
WHEN type = 'P' THEN 'Partial'
WHEN type = 'Q' THEN 'Differential partial' END AS type
FROM msdb.dbo.backupset x
WHERE backup_finish_date
= (SELECT max(backup_finish_date)
FROM msdb.dbo.backupset
WHERE database_name = x.database_name ) ) a
RIGHT OUTER JOIN sys.databases b
ON a.database_name = b.name
WHERE b.name <> 'tempdb' -- Exclude tempdb
AND (backup_finish_date < dateadd(d,-1,getdate())
或者:
▲显示在过去24小时内所有未备份的数据库列表
以上的脚本列出的每个数据库在过去的24小时内没有完成备份,它记录了上一次备份运行的时间以及备份的类型。该脚本返回的结果用来核查每个数据库在过去的24小时内是否已经备份。
检查事件日志
电脑硬件总是容易出现问题,其中的一些问题,如硬盘故障,可能会很快出现又很难解决。系统事件日志经常会提醒DBA硬件存在间歇性的问题。
此外,SQL Server以及其他应用,将消息写入事件日志。这些消息中有一些是信息(informational),其他的是警告或者错误。这些应用程序的错误可能不会导致应用问题的发生,因此很容易被人们忽视。通过每天查看这些事件日志的警告和错误类型的消息,DBA得到一个解决问题的好机会,如果忽略这些问题,可能会导致服务器或者SQL Server实例中断。
DBA应当每天都查看事件日志,并确保审阅了所有不同的事件日志,如系统日志、应用程序日志等。每天检查这些日志可以让DBA对工作更有信心,能够了解到服务器运行正常,没有反常或者流氓软件。
检查SQL Server错误日志文件
SQL Server维护一个错误日志文件(ERRORLOG file),错误日志文件中包含两种信息,即警告信息和错误信息。一部分写入错误日志中的事件能够表明SQL Server实例中存在一些问题,如数据库损坏或者I/O请求响应速度缓慢。DBA应当检查当前错误日志文件里的所有不正常的信息,这样做可以在其升级为严重问题或者SQL Server实例中断运行之前解决它。因此应该养成习惯每天检查错误日志。
使用名为xp_readerrorlog的未公开的扩展存储过程读取错误日志文件是非常便捷的,浏览网页可以找到有关如何使用未公开存储过程读取错误日志的更多信息。同样也可以使用SQL Server Management Studio或者其他文本编辑器查看错误日志。
磁盘空间可用性
由于数据库随着时间的推移容量变得越来越大,吞噬掉了磁盘里越来越多的可用空间。只要不关闭数据库的自动增长选项,数据库的容量就会自动增长直到装满整个磁盘。如果某些大型流氓数据导入程序运行时,这些自动增长事件会迅速占用绝大多数甚至全部的磁盘可用空间。
给数据库增长提供足够的空间是至关重要的,要明确磁盘有适当的可用空间,以及自动增长事件没有占用大量的磁盘可用空间,这就需要监控可用的磁盘空间。未公开的xp_fixeddrrives扩展存储过程可以用来显示每个磁盘的可用空间。创建xp_fixeddrives的输出进程,当磁盘可用空间低于自定义的阈值时会发出警报,提醒DBA磁盘可用空间不足。
积极主动 监控每一天
DBA们应该每天积极主动的监测每个SQL Server环境,通过日常监控可以快速识别问题或者潜在问题,并且在演变成更大的问题之前解决它们。本文中的列表和脚本并不完整,作为DBA应当仔细思考所在工作环境中什么是需要每天监测的重要内容。一旦有了自己的监测列表,DBA需要将每天早晨的监测工作自动化以帮助简化整个监测过程。