Академический Документы
Профессиональный Документы
Культура Документы
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.