让DBA工作自动化,sqlserver数据库完整性检查历史记录


摘要:
由于数据库数量之多,为了更好的管理好数据库,我们需要将数据库的各项维系尽量自动化,
下文讲述,将dbcc checkdb 采用作业的形式进行记载,方便DBA更好的掌握DB的相关情况。
实验环境:sqlserver 2008 R2


下文讲述,将DBCC checkDB的结果插入数据表中,方便我们对数据库检查的历史记录的查看,和后续的跟踪服务
———————–
1.创建DBCC检查历史数据表

CREATE TABLE [dbo]。[dbcc_historyInfo](
[keyId] [int],
[Level] [int],
[State] [int] ,
[MessageText][varchar(8000),
[RepairLevel] [int],
[Status] [int],
[DbId] [int],
[Id] [int],
[IndId] [int],
[PartitionID] [int],
[AllocUnitID] [int],
[File] [int],
[Page] [int],
[Slot] [int],
[RefFile] [int],
[RefPage] [int],
[RefSlot] [int],
[Allocation] [int],writeDate datetime default getdate() )

---2.创建相应的生成数据的存储过程
 

CREATE PROC  [pr_checkDbInfo]
@database_name SYSNAME = NULL
如
IF @database_name IS NULL
begin
   DECLARE database_cursor CURSOR FOR
   SELECT name  
   FROM sys.databases db
   WHERE name NOT IN('master','model','msdb','tempdb') 
   AND db.state_desc ='ONLINE'
   AND source_database_id IS NULL  
   AND is_read_only = 0

   open database_cursor
   FETCH next FROM database_cursor INTO @database_name
   WHILE @@ FETCH_STATUS = 0
   begin

      INSERT INTO dbcc_historyInfo([keyId],[Level],[State],MessageText,RepairLevel,[Status], 
      [DbId],Id,IndId,PartitionId,AllocUnitId,[File],Page,Slot,RefFile,RefPage, 
      RefSlot,Allocation)
      EXEC('dbcc checkdb('''+ @database_name +''')with tableresults')

      FETCH next FROM database_cursor INTO @database_name
   end 

   close database_cursor
   DEALLOCATE database_cursor
 end

配置相关作业,并指定相应的数据库,如下所示:

  exec pr_checkDbInfo '数据库名称'
 

并指定作业的启动时间,循环时间,可以达到时时刻刻收集数据库的运行状态。