none
Execução procedure subir instancia RRS feed

  • Discussão Geral

  • Pessoal boa tarde.

    Preciso fazer que uma procedure sempre seja executada toda vez que minha base de dados for reiniciada. Preciso disto para garantir a integridade da base para casos em que a mesma tenha alguma queda inesperada. Para isso preciso que minha rotina seja disparada no momento em que a base estiver sendo inicializada, porém antes de que fique acessível para a rede externa.

    Ao pesquisar me deparei que isto é possível utilizando a procedure "sp_procoption", alguém já utilizou este recurso?
    quarta-feira, 21 de junho de 2017 21:01

Todas as Respostas

  • Deleted
    quarta-feira, 21 de junho de 2017 22:28
  • Bernoulthy,

    A sp_procoption tem como função definir ao SQL Server que uma Stored Procedure deverá ser executada sempre que uma instância foi reinicializada, agora se eu entendi você deseja executar uma determinada procedure quando o banco for reiniciado.

    É isso mesmo?


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 23 de junho de 2017 00:10
  • Isso mesmo, pois meu sistema tem uma tabela onde um ws (com threads) fica batendo nela  para pegar o registro, processar e enviar para uma fila MQ, após adicionado na fila, o registro é removido da tabela. Por questão de segurança, tenho um campo de controle "status", que permite ou não que o serviço ws processe o registro. Minha idéia é caso a base caia por qualquer motivo, preciso que no momento de sua reinicialização, antes de deixar o banco disponível novamente, realize o update neste campo de status, para "Bloquear" todos os registros.

    Preciso deste comportamento para que possa analisar, se os registros bloqueados foram de fato enviados ou não, para a fila do MQ, (para evitar cenários de reenvio), pois mesmo utilizando scopo transacional no .NET. Caso haja algum problema no MQ, fica difícil saber se o registro foi recebido por ele ou não, e ao realizar um send para o MQ, não tenho mais controle sobre o registro e caso o MQ tenha algum problema na resposta, minha app trata como exeção e realiza o rollback do processamento, porém já tive cenários que o rollback foi realizado e ao analisar a fundo, o registro já havia sido recebido pelo MQ e desta forma, quando o banco ficou disponível novamente, reenviou o mesmo registro ocasionando a duplicidade.

     
    • Editado Bernoulthy domingo, 25 de junho de 2017 22:16 alteração do conteúdo
    domingo, 25 de junho de 2017 22:11
  • Bom dia, Bernoulthy. Tudo bem?

    Obrigado por participar do fórum MSDN

    Essa seria uma questão de "Break Fix/Erro" ou "How to/Customização"?

    Atentamente, 


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 26 de junho de 2017 12:12
    Moderador
  • Bernoulthy,

    Sinceramente desconheço qualquer tipo do possibilidade relacionada de forma direta ao processo de inicialização de uma base de dados, na verdade o que é inicializado é o serviço do SQL Server, e neste processo as bases de dados são liberadas para uso.

    Talvez, mas não posso garantir podemos pensar em algo utilizando DDL Triggers.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 28 de junho de 2017 16:43
  • Creio que triggers tb poderia ser utilizado, só que eu preciso garantir é que se sempre que o SQL for iniciado, antes das bases ficarem online para uso, seja possível realizar o update em uma tabela.

    Pois nessa base em questão, tenho 3 serviços ws que ficam batendo nesta base para recuperar registros e processar. 

    Desta forma, se o servidor da base cair, ao ser inicializado novamente, o referido update que preciso fazer, irá realizar um "bloqueio" lógico nos registros, impedindo assim o reprocessamento de registros que já podem ter sido realizados.


    • Editado Bernoulthy quinta-feira, 29 de junho de 2017 02:07 correção ortografica
    quinta-feira, 29 de junho de 2017 02:02
  • Bernoulthy,

    Mas neste caso de o servidor cair o mais indicado é utilizar um job ou um sp_procoption, do que trigger.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 30 de junho de 2017 17:11
  •  Qual das duas opções seria a melhor?

    Se a sp_procoption, executar a minha rotina antes de disponibilizar a base para que os serviços possam acessar, já resolveria o meu problema.

    O que eu preciso é garantir que após a base inicializada e disponibilizada para acesso, a procedure tenha sido executada e a tabela atualizada

     Caso a utilização de um JOB for melhor, poderia me citar um exemplo de como poderia ser aplicado?
    sexta-feira, 30 de junho de 2017 17:52
  • Bernoulthy,

    Acredito que a mais indicada seja a sp_procoption.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 4 de julho de 2017 22:43
  • Então, eu só queria saber se utilizando a sp_procoption, é garantido que antes da base ser disponibilizada para acesso externo, ela terá executado a minha procedure.


    quinta-feira, 6 de julho de 2017 18:09
  • Bernoulthy,

    Sim ela será executada no momento que o serviço do SQL Server venha a ser inicializado, isso antes das bases de dados estarem liberadas para uso.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 7 de julho de 2017 00:25
  • Junior,

    Eu consigo ter essa informação em algum documento (link) oficial da microsoft? Pois vou apresentar esta solução ao meu cliente e gostaria de afirmar que realmente é uma solução efetiva, garantida pela própria microsoft.

    Já procurei em vários sites e não consegui encontrar um documento com esta informação


    sexta-feira, 7 de julho de 2017 21:28
  • Bernoulthy,

    Acesse: https://technet.microsoft.com/pt-br/library/ms181720(v=sql.110).aspx


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 12 de julho de 2017 19:50
  • Muito obrigado Pessoal vlw mesmo
    sexta-feira, 21 de julho de 2017 20:45