Académique Documents
Professionnel Documents
Culture Documents
banco de dados
Olá, pessoal.
Assim que assumi a posição de DBA, encontrei muitos artigos dizendo que todos os
dias deveriam ser realizadas uma serie de verificações, o famoso CheckList do DBA.
Entre elas estavam verificar se os Jobs rodaram com sucesso, se os backups foram
realizados, se há espaço disponível em disco etc.
No meu ambiente, cuido de cinco servidores com SQL Server e realizar essa tarefa em
cada um desses servidores me toma um tempo razoável. Imagine, então, em ambientes
maiores (como existem aos montes por aí). Assim, encontrei na internet querys que me
retornavam algumas dessas informações, mas chegar todos os dias no trabalho e ter que
abrir o Management Studio para rodar várias querys ainda não era a solução ideal.
Com isso, resolvi criar uma planilha Excell com várias abas, que agrupa todas as
informações que eu verificava manualmente em um único local, com um tipo de
informação por aba da planilha. Esse relatório é enviado diariamente para o meu e-mail
às 08:00 da manhã. Logo, quando chego, só tenho o trabalho de abrir a planilha, analisar
o CheckList e tomar as devidas medidas. Além disso, posso até acompanhar como está
o meu banco de dados de casa ou do celular, para o caso de não ter ido ao trabalho por
algum motivo.
Nessa aba teremos informações sobre como estão os drives dos discos do nosso servidor
SQL Server. Ela retornará o Drive, o tamanho em MB, o tamanho que está sendo
utilizado, o espaço livre, o percentual de espaço que está sendo utilizado, o percentual
disponível, e o espaço desse disco que é utilizado por arquivos do SQL Server:
Nessa aba teremos informações sobre todos os arquivos do SQL Server (.MDF, .LDF
e .NDF). Com isso, podemos verificar os caminhos desses arquivos, o tamanho atual, o
tamanho máximo que esse arquivo pode alcançar, o quanto esse arquivo cresce,
próximo tamanho que o arquivo terá e sua situação.
04. Backup
Uma das abas mais importantes. Nela, saberemos o nome das databases que fizeram o
backup com sucesso, o horário de início, a duração, o recovery model de cada Database
e o tamanho do backup.
Muitas vezes me deparei com a situação de chegar ao meu ambiente e encontrar vários
Jobs rodando (agarrados). Algumas vezes isso só era percebido quase no fim do dia.
Para que isso não aconteça mais, essa aba retornará todos os Jobs que estão executando
no momento da geração da planilha, no meu caso às 8:00 AM . Com essa informação, o
problema pode ser resolvido rapidamente.
Quantas vezes você já identificou um Job que falhou mas estava sem notificação? Isso
acontece muito em ambientes onde várias pessoas criam e alteram Jobs. Essa aba
identificará via query todos os Jobs que falharam mesmo quando o mesmo não enviar
nenhuma notificação. Será informado o nome do Job, o status, a data e o tempo de
execução e a mensagem retornada pelo Job.
Nessa aba criaremos uma procedure que montará uma tabela com todas as informações
sobre os drives disponíveis no servidor.
Para as versões do SQL Server 2005 e 2008, caso a opção Ole Automation Procedures
não esteja habilitada em seu servidor, a mesma deve ser habilitada.
SET NOCOUNT ON
SET @mbTotal = 0
END
exec dbo.stpVerifica_Espaco_Disco
Para enviar os dados para a planilha, basta executar a query abaixo alterando o caminho
da mesma:
Para a geração dos dados dessa aba, basta executar o script abaixo:
Gerada a informação, a query abaixo deve ser utilizada para enviar os dados para a
planilha.
Quando o valor da coluna Tamanho Max(MB) dessa aba da planilha for igual a -1,
significa que esse arquivo não possui uma restrição de crescimento.
Quando a coluna "Situacao" retornar o valor PROBLEMA, significa que o arquivo não
conseguirá crescer mais uma vez, logo, esse arquivo de ver diminuído ou ter seu
tamanho máximo aumentado para que quando ele precise crescer o SQL Server não
gere um erro.
Para a geração dos dados dessa aba, deve ser criada a procedure abaixo que retornará as
informações sobre os arquivos de log.
insert dbo._CheckList_Utilizacao_Log
exec dbo.StpVerifica_Utilizacao_Log
-- ABA LOG
INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\FabricioLima\CheckList\CheckList do Banco
de Dados.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 informação 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.
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'
Após 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=C:\FabricioLima\CheckList\CheckList do Banco
de Dados.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 estão rodando, basta executar o script abaixo. Essa
query retorna o nome do Job, o horário de início e o tempo em minutos que esse Job
está executando.
Para fazer um teste rápido, 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 informação dessa aba não está disponível para a versão do SQL Server 2000, apenas
para as versões 2005 e 2008.
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 notificação 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 horário deve ser configurado de acordo com a necessidade de cada um.
Depois de gerada a planilha, basta enviá-la por e-mail utilizado o seu método favorito.
Nosso exemplo gerou dados para apenas um servidor, entretanto essas informações
podem ser geradas para vários servidores. No meu ambiente, visualizo algumas dessas
informações de 5 servidores diferentes na mesma aba da planilha, colocando as
informações sobre os diferentes servidores uma abaixo da outra.
Para baixar um exemplo de como fica a planilha gerada nos scripts passados, clique
aqui.
Uma planilha de CheckList pode conter muito mais informações, isso vai da
criatividade e da necessidade de cada um. Seguem algumas informações que podem ser
acrescentadas nessa planilha:
• Crescimento de tabelas
• Crescimento das databases
• Objetos que foram alterados
• Procedimentos mais demorados
• Fragmentação dos Índices
A geração dessa planilha pode ser realizada em um pacote do SSIS, onde podem ser
guardados históricos dos arquivos e pode ser gerada uma planilha melhor formatada,
como por exemplo, formatações condicionais para deixar uma linha de um drive que
está com menos de 20% de espaço em disco em vermelho e negrito.
Espero que essa informação possa ser útil para alguém assim como é para mim no meu
CheckList de DBA. Essa planilha pode dar um pouco de trabalho para montá-la,
entretanto, só é feito uma vez e a facilidade de análise das informações é muito grande.
Com isso, acredito que vale apena o esforço.
Abraços!