Procedure para auxiliar no processo de debug do processo.

 Olá pessoal, espero que estejam todos bem! Estive um pouco sumido aqui do blog, pois estava focando meu tempo em outros assuntos, mas hoje gostaria de compartilhar uma rotina que fiz quando me deparei em uma situação onde precisava entender porque um processo não estava funcionando corretamente!  Acredito que em T.I toda solução é feita para curar uma dor, e essa solução não foi diferente.

Vamos ao cenário:

Um cliente procurou a consultoria onde trabalho, para auxiliá-los a identificar porque um processo não estava funcionando corretamente, basicamente eles tinham uma tabela de origem e precisavam que esses dados fossem para a  tabela de destino em outra base, até ai sem problemas, certo? Errado! Imagine você ter que achar esse gap em um processo que você não conhece e para dificultar ainda mais (só ficou mais interessante) existiam 8 bases no banco, o cliente não soube nos informou muita coisa sobre o processo, só que existia uma tabela de origem que precisava passar esses dados para a tabela de destino. A partir desse momento em que conversei com o cliente e levantei o máximo de informações, comecei a formular uma estratégia para começar a debugar o processo, comecei fazendo uma procura inversa, iniciando a procura em quem inseria na tabela de destino e quem inseria nessa tabela que inseria na tabela de destino e assim indo... Mas isso começou a ficar muito complexo, porque eu precisava procurar os procedimento, funções e possíveis triggers que faziam inserts nesses objetos.. foi ai que desenvolvi esse script que me ajudou muito. Basicamente o script funciona assim:

Para exemplificar melhor, irei procurar mostrar um exemplo, onde eu precisava procurar quais rotinas realizavam  o comando de INSERT na tabela TENTATIVA

1- Procurei todas as procedures que em seu texto exista  o objeto procurado (nesse caso a tabela TENTATIVA)

2- Pego os textos dessas procedures e insiro em uma tabela temporária global;

3-Procuro dentro do texto o trecho que o objeto é mencionado;

4-Procurando se nesse trecho (mesma linha) se existe o comando ( no caso INSERT);

4-Procuro também se nesse trecho, existe trechos acima que possuem o comando procurado (INSERT), busco 10 trechos acima, mas a procedure tem um parâmetro que você pode decidir quantos trechos acima quer procurar;

5- Retorno dois resultados no grid, um com os nomes dos objetos que possuem as condições de busca e o trecho que procuramos;



Nesse exemplo busquei quais procedures possuíam dentro do seu texto o comando de INSERT na tabela TENTATIVA.


Posso procurar também updates, deletes e qualquer comando.


Pessoal, infelizmente nem todos os objetos que voltarem podem estar realmente fazendo o comando procurando no objeto que você está procurando, mas acreditem isso pode ajudar muito a limitar a quantidade de objetos (procedures, funções e etc) que você vai ter que abrir e verificar.

No meu caso quando eu procurava quem referenciava o objeto que procurava vinha mais de 1000 procedures, quando limitei veio 6, procurar dentro de 6 procedures é viável dentro de 1000 acredito que não.

Dentro da procedure existe um parâmetro chamado HELP, seta igual a 1 para maiores informações:


Bem pessoal, isso me ajudou muito a entender o processo e o passo a passo dele para poder ajudar nosso cliente aqui da consultoria, espero que ajude vocês também. até a próxima :)


Segue link dos objetos: https://github.com/LeleSp6/Procurar_obj/blob/main/procura_obj_em_objeto




Comentários

Postagens mais visitadas deste blog

Tuning no Postgres utlizando View Materializada

Como realizei um tuning que caiu o tempo de execução de 8h para 7minutos!

Procedure que cria um script de insert.