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:
Isso abrirá a console de serviços do seu Windows, onde você pode consultar, iniciar e parar os serviços atualmente instalados.
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:
Na janela do powershell digite o comando: “(Get-Service | Measure-Object).Count” como no exemplo abaixo:
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é
… Esse Josuéééééé…
Esse fera precisa ir para um zoológico… 🙂
TMJ! 🙂
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
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é
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.
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é