Você está na página 1de 8

Aba 1: Monitoramento do Espao em disco

Nessa aba criaremos uma procedure que montar uma tabela com todas as informaes sobre os drives disponveis nos servidores. Para as verses do SQL Server 2005 e 2008, caso a opo Ole Automation Procedures no esteja habilitada em seu servidor, a mesma deve ser habilitada. sp_configure show advanced options,1 GO reconfigure GO sp_configure Ole Automation Procedures,1 GO reconfigure GO sp_configure show advanced options,0 GO reconfigure Aps habilitada, devemos criar a procedure abaixo em uma determinada database. Segue o script da procedure: CREATE PROCEDURE [dbo].[stpVerifica_Espaco_Disco] AS BEGIN SET NOCOUNT ON CREATE TABLE #dbspace (name sysname, caminho varchar(200),tamanho varchar(10), drive Varchar(30)) CREATE TABLE [#espacodisco] ( Drive varchar (10) ,[Tamanho (MB)] Int, [Usado (MB)] Int, [Livre (MB)] Int, [Livre (%)] int, [Usado (%)] int, [Ocupado SQL (MB)] Int,[Data] smalldatetime) Exec SP_MSForEachDB Use ? Insert into #dbspace Select Convert(Varchar(25),DB_Name())Database,Convert(Varchar(60),FileName),C onvert(Varchar(8),Size/128)Size in MB,Convert(Varchar(30),Name) from SysFiles DECLARE @hr int,@fso int,@mbtotal int,@TotalSpace int,@MBFree int,@Percentage int, @SQLDriveSize int,@size float, @drive Varchar(1),@fso_Method varchar(255) SET @mbTotal = 0 EXEC @hr = master.dbo.sp_OACreate Scripting.FilesystemObject, @fso OUTPUT CREATE TABLE #space (drive char(1), mbfree int) INSERT INTO #space EXEC master.dbo.xp_fixeddrives

Declare CheckDrives Cursor For Select drive,MBfree From #space Open CheckDrives Fetch Next from CheckDrives into @Drive,@MBFree WHILE(@@FETCH_STATUS=0) BEGIN SET @fso_Method = Drives( + @drive + :).TotalSize SELECT @SQLDriveSize=sum(Convert(Int,tamanho)) from #dbspace where Substring(caminho,1,1)=@drive EXEC @hr = sp_OAMethod @fso, @fso_method, @size OUTPUT SET @mbtotal = @size / (1024 * 1024) INSERT INTO #espacodisco VALUES(@Drive+:',@MBTotal,@MBTotal-@MBFree,@MBFree,(100 * round(@MBFree,2) / round(@MBTotal,2)), (100 100 * round(@MBFree,2) / round(@MBTotal,2)),@SQLDriveSize, getdate()) FETCH NEXT FROM CheckDrives INTO @drive,@mbFree END CLOSE CheckDrives DEALLOCATE CheckDrives IF (OBJECT_ID(_CheckList_Espacodisco ) IS NOT NULL) DROP TABLE _CheckList_Espacodisco SELECT Drive, [Tamanho (MB)],[Usado (MB)] , [Livre (MB)] , [Livre (%)],[Usado (%)] , ISNULL ([Ocupado SQL (MB)],0) AS [Ocupado SQL (MB)] into dbo._CheckList_Espacodisco FROM #espacodisco DROP TABLE #dbspace DROP TABLE #space DROP TABLE #espacodisco END Agora basta rodar a SP para geramos as informaes na tabela _CheckList_Espacodisco: exec dbo.stpVerifica_Espaco_Disco Para enviar os dados para a planilha, basta executar a query abaixo alterando o caminho da mesma: ABA ESPAO DISCO INSERT INTO OPENROWSET(Microsoft.Jet.OLEDB.4.0, Excel 8.0;Database=caminho_do_arquivo\CheckList do Banco de Dados BI.xls;, SELECT Drive, [Tamanho(MB)],[Utilizado(MB)],[Livre(MB)],[Utilizado(%)], [Livre(%)],[Ocupado SQL(MB)] FROM [Espao Disco$]) SELECT Drive,[Tamanho (MB)],[Usado (MB)],[Livre (MB)],[Usado (%)],[Livre (%)],[Ocupado SQL (MB)] from _CheckList_Espacodisco Segue um exemplo de como essa informao ser retornada pela planilha.

Drive Tamanho (MB) C: E: F: 29989 30718 78520

Utilizado(MB) Livre (MB) Utilizado (%) 21774 25758 68187 8215 4960 10333 73 84 87

Livre (%) Ocupado SQL (MB) 27 16 13 0 490 0

Aba 2: Monitoramento dos arquivos SQL


Para a gerao dos dados dessa aba basta executar o script abaixo: IF (OBJECT_ID(_CheckList_Arquivos_SQL) IS NOT NULL) drop table _CheckList_Arquivos_SQL create table dbo._CheckList_Arquivos_SQL ( [Name] varchar(250) , [FileName] varchar(250) , [Size] bigint, [MaxSize] bigint, Growth varchar(100), Proximo_Tamanho bigint, Situacao varchar(15)) insert into dbo._CheckList_Arquivos_SQL select convert(varchar, name) as NAME ,Filename , cast(Size * 8 as bigint) / 1024.00 Size, case when MaxSize = -1 then -1 else cast(MaxSize as bigint)* 8 / 1024.00 end MaxSize, case when substring(cast(Status as varchar),1,2) = 10 then cast(Growth as varchar) + % else cast (cast((Growth * 8 )/1024.00 as numeric(15,2)) as varchar) + MBend Growth, case when substring(cast(Status as varchar),1,2) = 10 then (cast(Size as bigint) * 8 / 1024.00) * ((Growth/100.00) + 1) else (cast(Size as bigint) * 8 / 1024.00) + cast((Growth * 8 )/1024.00 as numeric(15,2)) end Proximo_Tamanho , case when MaxSize = -1 then OK OK when ( case when substring(cast(Status as varchar),1,2) = 10 then (cast(Size as bigint)* 8 / 1024.00) * ((Growth/100.00) + 1) else (cast(Size as bigint) * 8/ 1024.00) + cast((Growth * 8 )/1024.00 as numeric(15,2)) end ) < (cast(MaxSize as bigint) * 8/1024.00) then OK else PROBLEMA end Situacao from master..sysaltfiles with(nolock) order by Situacao, Size desc Gerada a informao, a query abaixo deve ser utilizada para enviar os dados para a planilha.

ABA ARQUIVOS SQL INSERT INTO OPENROWSET(Microsoft.Jet.OLEDB.4.0, Excel 8.0;Database= caminho_do_arquivo\CheckList do Banco de Dados BI.xls;, SELECT [DataBase],[File Name],[Tamanho(MB)],[Tamanho Max(MB)], [Crescimento],[Prximo Tamanho], [Situacao] FROM [Arquivos SQL$]) select Name,FileName,Size,MaxSize,Growth,Proximo_Tamanho,Situacao from dbo._CheckList_Arquivos_SQL order by Situacao desc, Size desc Quando o valor da coluna Tamanho Max(MB) dessa aba da planilha for igual a -1, significa que esse arquivo no possui uma restrio de crescimento. Quando a coluna Situacao retornar o valor PROBLEMA, significa que o arquivo no conseguir crescer mais uma vez, logo, esse arquivo de ver diminudo ou ter seu tamanho mximo aumentado para que quando ele precise crescer o SQL Server no gere um erro.

Aba 3: Utilizao do Arquivo de Log


Para a gerao dos dados dessa aba, deve ser criada a procedure abaixo que retornar as informaes sobre os arquivos de log. CREATE procedure [dbo].[StpVerifica_Utilizacao_Log] as DBCC SQLPERF (LOGSPACE) possvel inserir em uma tabela direto desse comando Agora que a procedure j existe, o cdigo abaixo deve ser executado para gerar a tabela com as informaes para a planilha. IF (OBJECT_ID(_CheckList_Utilizacao_Log) IS NOT NULL) DROP TABLE _CheckList_Utilizacao_Log create table dbo._CheckList_Utilizacao_Log ( Nm_Database varchar(50), Log_Size numeric(15,2), [Log_Space_Used(%)] numeric(15,2), status_log int) insert dbo._CheckList_Utilizacao_Log exec dbo.StpVerifica_Utilizacao_Log Com os dados gerados, basta mandar as informaes para a planilha. ABA LOG INSERT INTO OPENROWSET(Microsoft.Jet.OLEDB.4.0, Excel 8.0;Database=Caminho_do_arquivo\CheckList do Banco de Dados BI.xls;, SELECT [Database], [Log Size(MB)],[Space Used(%)] FROM [Log$]) select Nm_Database, Log_Size,[Log_Space_Used(%)] from dbo._CheckList_Utilizacao_Log order by 3 desc

Aba 4: Backup

Com o script abaixo, teremos a informao de todos os backups que foram rodados desde o dia anterior s 18h. O intervalo de backup que ser retornado pode ser alterado para ficar de acordo com a realidade do seu ambiente. Na verso do SQL Server 2000, a coluna recovery_model retornada na query abaixo no existe na tabela backupset, logo a query deve ser alterada para retornar um espao em branco nessa coluna. IF (OBJECT_ID(_CheckList_Backup) IS NOT NULL) DROP TABLE _CheckList_Backup create table dbo._CheckList_Backup(database_name nvarchar(256),name nvarchar(256), backup_start_date datetime,tempo int, server_name nvarchar(256), recovery_model nvarchar(120), tamanho numeric(15,2)) DECLARE @Dt_Referencia datetime SELECT @Dt_Referencia = cast(floor(cast(GETDATE() as float)) as datetime) Hora zerada insert dbo._CheckList_Backup SELECT database_name, name,Backup_start_date, datediff(mi,Backup_start_date,Backup_finish_date) [tempo (min)], server_name,recovery_model, cast(backup_size/1024/1024 as numeric(15,2)) [Tamanho (MB)] FROM msdb.dbo.backupset B INNER JOIN msdb.dbo.backupmediafamily BF ON B.media_set_id = BF.media_set_id where Backup_start_date >= dateadd(hh, 18 ,@Dt_Referencia 1 ) backups realizados a partir das 18h de ontem and Backup_start_date < dateadd (day, 1, @Dt_Referencia) and type = D Aps populada a tabela, a query abaixo deve ser utilizada para retornar os dados para a planilha.
ABA BACKUP

INSERT INTO OPENROWSET(Microsoft.Jet.OLEDB.4.0, Excel 8.0;Database=Caminho_do_arquivo\CheckList do Banco de Dados BI.xls;, SELECT Database, Nome, Start, [Tempo(Min)], Recovery, [Tamanho(MB)] FROM [Backup$]) select database_name,name,backup_start_date,tempo,recovery_model, Tamanho from dbo._CheckList_Backup order by backup_start_date

Aba 5: Jobs executando

Para verificarmos quais os Jobs que esto rodando basta executar o script abaixo. Essa query retorna o nome do Job, o horrio de incio e o tempo em minutos que esse Job est executando. Para fazer um teste rpido, crie e execute um Job com a query waitfor delay 00:05:00. Em seguida rode a query abaixo para retornar esse Job que est sendo executado. A informao dessa aba no est disponvel para a verso do SQL Server 2000, apenas para as verses 2005 e 2008. IF (OBJECT_ID(_CheckList_JobsRodando) IS NOT NULL) DROP TABLE _CheckList_JobsRodando create table dbo._CheckList_JobsRodando( Name varchar(256), Data_Inicio datetime, Tempo_Rodando int ) insert into dbo._CheckList_JobsRodando select name, run_Requested_Date, datediff(mi,run_Requested_Date,getdate()) from msdb..sysjobactivity A join msdb..sysjobs B on A.job_id = B.job_id where start_Execution_Date is not null and stop_execution_date is null Para enviar as informaes para a planilha: ABA JOBS EM EXECUO INSERT INTO OPENROWSET(Microsoft.Jet.OLEDB.4.0, Excel 8.0;Database=Caminho_do_arquivo\CheckList do Banco de Dados BI.xls;, SELECT Job,[Data Inicio],[Tempo Execuo] FROM [Jobs em Execuo$]) select Name, Data_Inicio, Tempo_Rodando from dbo._CheckList_JobsRodando

Aba 6: Jobs que falharam


Geralmente recebemos e-mails e torpedos com os Jobs que falham, entretanto muito importante identificarmos todos os Jobs que falharam por outro meio, pois esse Job pode estar sem notificao ou pode ocorrer algum problema com seu servidor de e-mail. A query abaixo retornar todos os Jobs que falharam desde as 17:00 do dia anterior, sendo que esse horrio deve ser configurado de acordo com a necessidade de cada um. if OBJECT_ID(Tempdb..#Result_History_Jobs) is not null #Result_History_Jobs drop table

create table #Result_History_Jobs( Cod int identity(1,1),Instance_Id int, Job_Id varchar(255),Job_Name varchar(255),Step_Id int,Step_Name varchar(255), Sql_Message_Id int,Sql_Severity int,SQl_Message varchar(3990),Run_Status int, Run_Date varchar(20), Run_Time varchar(20),Run_Duration int,Operator_Emailed varchar(100),Operator_NetSent varchar(100), Operator_Paged varchar(100),Retries_Attempted int, Nm_Server varchar(100))

IF (OBJECT_ID(_CheckList_Jobs_Failed) IS NOT NULL) DROP TABLE _CheckList_Jobs_Failed declare @hoje varchar (8) declare @ontem varchar (8) set @ontem = convert (varchar(8),(dateadd (day, -1, getdate())),112) insert into #Result_History_Jobs exec Msdb.dbo.SP_HELP_JOBHISTORY @mode = FULL , @start_run_date = @ontem select Job_Name, case when Run_Status = 0 then Failed when Run_Status = 1 then Succeeded when Run_Status = 2 then Retry (step only) when Run_Status = 3 then Canceled when Run_Status = 4 then In-progress message when Run_Status = 5 then Unknown end Status, cast(Run_Date + + right(00 + substring(Run_time,(len(Run_time)-5),2) ,2)+ : + right(00 + substring(Run_time,(len(Run_time)-3),2) ,2)+ : + right(00 + substring(Run_time,(len(Run_time)-1),2) ,2) as varchar) Dt_Execucao, right(00 + substring(cast(Run_Duration as varchar),(len(Run_Duration)-5),2) , 2)+ : + right(00 + substring(cast(Run_Duration as varchar),(len(Run_Duration)-3),2) , 2)+ : + right(00 + substring(cast(Run_Duration as varchar),(len(Run_Duration)-1),2) , 2) Run_Duration, SQL_Message into _CheckList_Jobs_Failed from #Result_History_Jobs where cast(Run_Date + + right(00 + substring(Run_time,(len(Run_time)-5),2) ,2)+ : + right(00 + substring(Run_time,(len(Run_time)-3),2) ,2)+ : + right(00 + substring(Run_time,(len(Run_time)-1),2) ,2) as datetime) >= @ontem + 17:00 dia anterior no horrio and Step_Id = 0 and Run_Status <> 1 order by Dt_Execucao Enviando os dados para a planilha e excluindo todas as tabelas utilizadas no CheckList. ABA JOBS FAILED INSERT INTO OPENROWSET(Microsoft.Jet.OLEDB.4.0, Excel 8.0;Database=Caminho_do_arquivo\CheckList do Banco de Dados BI.xls;, SELECT [Job], [Status], [Data Execuo], [Tempo Execuo], [SQL Message] FROM [Jobs Failed$]) select Job_Name, Status,Dt_Execucao,Run_Duration,SQL_Message from dbo._CheckList_Jobs_Failed

IF (OBJECT_ID(_CheckList_Espacodisco ) IS NOT NULL) DROP TABLE _CheckList_Espacodisco IF (OBJECT_ID(_CheckList_Arquivos_SQL) IS NOT NULL) DROP TABLE _CheckList_Arquivos_SQL IF (OBJECT_ID(_CheckList_Utilizacao_Log) IS NOT NULL) DROP TABLE _CheckList_Utilizacao_Log IF (OBJECT_ID(_CheckList_Backup) IS NOT NULL) DROP TABLE _CheckList_Backup IF (OBJECT_ID(_CheckList_JobsRodando) IS NOT NULL) DROP TABLE _CheckList_JobsRodando IF (OBJECT_ID(_CheckList_Jobs_Failed) IS NOT NULL) DROP TABLE _CheckList_Jobs_Failed Depois de gerada a planilha basta envi-la por e-mail utilizado o seu mtodo favorito.