Oi! Seja bem-vindo!

Hoje aprenderemos um jeito eficiente de MONITORAR, INICIAR e PARAR SERVIÇOS do Windows no SQL Server. Algo sensacional para nos ajudar com o monitoramento e gestão do nosso ambiente de tecnologia.

O que é um SERVIÇO do Windows

Um serviço do Windows é um programa que inicia automaticamente quando o Windows é carregado e fica rodando em segundo plano (sem que você veja a janela do programa aberta) enquanto o Windows estiver em execução.

Para que servem SERVIÇOS do Windows

Os serviços facilitam a utilização do sistema operacional, ao executar tarefas de forma automática, por exemplo: Se você tem um notebook ou até mesmo um celular, já percebeu que automaticamente ele procura e se conecta em redes wifi? O aplicativo que faz isso automaticamente é um serviço do Windows (ou do Android / Apple se você estiver pensando em um celular).

Outro exemplo é o antivírus. Durante todo o tempo que você trabalha, existe esse programa (o software de antivírus caso você o tenha instalado) sendo executado em segundo plano (você não vê a janelinha, a não ser que ele encontre algo errado que precise de sua decisão). O antivírus é outro serviço do Windows (ou do seu sistema de celular).

Existem dois tipos de serviços.

== Serviços nativos: São serviços que vem instalados com o próprio sistema operacional, exemplo: serviço de gerenciamento das redes wifi, serviço que reconhece o dispositivo USB que você acabou de conectar, etc…

== Serviços não-nativos: Serviços que não fazem parte do sistema operacional, exemplo: Serviço do antivírus, Serviço do SQL Server, etc…

Ao se aprofundar mais, você verá que existem muitos serviços trabalhando mesmo antes de você sequer abrir a primeira janela do seu Windows ou smartphone (por isso que as vezes serviços com problema podem causar lentidão no seu aparelho mesmo quando você acabou de liga-lo).

Para você ter uma ideia, acabei de contar os serviços instalados no computador que estou trabalhando e no momento são 198 serviços… 🙂

Quer saber quais serviços você tem instalado ai? Fácil:

No seu Windows vá até o “botão iniciar”, depois clique em “executar”. Será aberta uma janelinha como no exemplo abaixo, onde você deverá digitar “services.msc” e depois clicar em OK:

iniciar executar services.msc para acessar os serviços do windows

Isso abrirá a console de serviços do seu Windows, onde você pode consultar, iniciar e parar os serviços atualmente instalados.

monitorar, iniciar e parar serviços do windows no sql server

Quer contar quantos serviços você tem? Moleza:

No seu Windows vá até o “botão iniciar”, depois clique em “executar”. Então digite powershell e clique OK:

iniciar executar powershell para abrir o powershell

Na janela do powershell digite o comando: “(Get-Service | Measure-Object).Count” como no exemplo abaixo:

contar os serviços instalados no windows com o powershell

No meu caso são 198 serviços instalados, quanto ficou no seu? 🙂

Como INICIAR e PARAR serviços do Windows pelo SQL Server

Existem várias abordagens para iniciar e parar serviços do Windows pelo SQL, no vídeo a seguir trago para você as que considero mais simples de implementar.

Aqui vai o script que usei nesse vídeo:



------------------------------------------------------------------
-- Gerenciando serviços do Windows via SQL
------------------------------------------------------------------

--------------------------------------------------
-- Quero só consultar o status de um serviço:
--------------------------------------------------
exec xp_servicecontrol 'querystate', 'Spooler'


--------------------------------------------------
-- Quero fazer STOP/START dos serviços:
--------------------------------------------------
-- PASSO 1) Pré-requisito: Permissão de start/stop para a conta do SQL Server no serviço do windows. 
/* 
= Jeito fácil para 1 estação:
Download da do subinacl: http://www.microsoft.com/en-us/download/details.aspx?id=23510
Fornecer a permissão: subinacl /service spooler /grant=MSSQLSERVER=F

= Configuração via GPO para domínios:
https://social.technet.microsoft.com/wiki/contents/articles/5752.how-to-grant-users-rights-to-manage-services-start-stop-etc.aspx

*/

-- PASSO 2) xp_ServiceControl: Gerencia serviços do Windows
exec xp_servicecontrol 'stop', 'Spooler'
exec xp_servicecontrol 'querystate', 'Spooler'
exec xp_servicecontrol 'start', 'Spooler'
exec xp_servicecontrol 'querystate', 'Spooler'


--------------------------------------------------
-- Quero listar só os serviços do SQL
--------------------------------------------------
-- Só serviços do SQL
select * from sys.dm_server_services


--------------------------------------------------
-- Quero listar TODOS os serviços do Windows
--------------------------------------------------
-- Existem várias formas, "sp_cmdshell + SC" é uma das mais rápidas

-- PASSO 1) Fornecer permissão para o SQL acessar o MSDOS
exec sp_configure 'show advanced options', 1
reconfigure
exec sp_configure 'ole Automation Procedures', 1
exec sp_configure 'xp_cmdshell', 1
reconfigure
go

-- PASSO 2) Listar serviços usando utilitário SC do Windows com a xp_cmdshell
if object_id('tempdb.dbo.#info_servicos') is not null drop table #info_servicos
create table #info_servicos(linha smallint identity(1,1) primary key clustered, conteudo varchar(max))
insert into #info_servicos(conteudo) exec master.dbo.xp_cmdshell 'sc queryex type= service state= all'

select
	substring(l1.conteudo, 15, 200) as servico,
	substring(l2.conteudo, 15, 200) as display_name,
	substring(l3.conteudo, 33, 200) as status
from #info_servicos l1
inner join #info_servicos l2 on l1.linha = l2.linha - 1
inner join #info_servicos l3 on l1.linha = l3.linha - 3
where l1.conteudo like 'service_name%'

Josué, o que se faz com essa informação… kkkk?

Boa pergunta… kkkkk Eu já utilizei para duas coisas.

== Primeiro para reiniciar periodicamente serviços não-nativos. Em geral códigos mal escritos demandam uma “reiniciada” periódica para limpar da memória erros e dados já processados que por algum motivo não foram limpos pelo próprio programa. É comum isso ocorrer, e ao invés de iniciar o Windows inteiro, podemos reiniciar serviços pontualmente.

== Segundo: Para monitorar serviços ativos. Por vezes um serviço pode “dar erro” e acabar parando sozinho. Então a partir do nosso SQL Server, podemos monitorar automaticamente e verificar se os serviços do estão ativos como deveriam. Se não estiverem, podemos mandar um e-mail como já mostrei aqui no blog, ou até mesmo iniciar o serviço pelo SQL como mostrei no vídeo.

CONCLUSÃO

Embora nesse blog eu esteja focado em te ensinar sobre um dos serviços do Windows, o SQL Server, a essa altura você já sabe que a estabilidade do nosso banco de dados depende bastante de inúmeros outros serviços, principalmente os serviços nativos do Windows.

Por isso monitorar o sistema operacional e criar rotinas de auto gerenciamento é importante também para nós, mesmo que não sejamos diretamente responsáveis pelos Windows onde nossos SQL Servers são executados.

Espero que você tenha gostado e continue firme e forte com seus estudos!

Abraço do seu amigo Josué

 

6 respostas

  1. Bom dia

    Não consigo iniciar o Serviço de diretiva de diagnostico. Aparece uma mensagem com erro 5 acesso negado. Sabe como resolver? Obrigada

    1. Olá, bom dia! Sim, é preciso dar acesso de start/stop no serviço ao usuário da instância do SQL. No artigo há duas alternativas para isso… Abraço, Josué

  2. Josué, ótimo post.

    ME tira uma dúvida, por favor: eu preciso reiniciar meu windows para aplicar uma correção do SO. Se minha aplicação já estiver parada, sem nenhum usuário no banco, posso reiniciar o windows direto ou devo parar o SQL Server antes de reiniciar o SO?

    Obrigado e parabéns pelo site.

    1. Olá, obrigado! Em um mundo ideal você para a aplicação (serviços, iis, com, etc…), para o SQL, reinicia a máquina. Depois inicia o banco e por fim a aplicação. Como não estamos em um mundo ideal, não vejo quase ninguém fazendo isso… 🙂 Na verdade acho que hoje em dia com as aplicações modernas esse procedimento extremamente cauteloso que eu mesmo muito fiz na antiga, provavelmente não se aplique mais. Abraço, Josué

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *