Inquiridor
Execução procedure subir instancia

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?- Tipo Alterado Filipe B CastroModerator quinta-feira, 29 de junho de 2017 12:29 how to
Todas as Respostas
-
-
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]
-
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
-
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.
-
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]
-
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
-
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]
-
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? -
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]
-
-
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]
-
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
-
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]
-