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.
Utilizado(MB) Livre (MB) Utilizado (%) 21774 25758 68187 8215 4960 10333 73 84 87
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 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
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
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.