Eu trabalhava para uma empresa onde eles tinham essa solução de data warehouse de terceiros. Obviamente, todos os objetos e tabelas estavam ocultos no banco de dados de suporte, então não tenho uma ideia clara do que exatamente aconteceu dentro de alguns dos procedimentos armazenados. Eu vi esse procedimento armazenado interessante lá e quero replicá-lo em minha própria solução, mas simplesmente não consigo entender como ele funciona. Estou descrevendo o procedimento armazenado abaixo e será muito útil se alguém puder me dar algumas ideias sobre como conseguir isso. Melhor ainda se você puder me sugerir como posso tornar isso ainda melhor.
O procedimento armazenado foi chamado de log do processo. Tinha parâmetros como DBID, ObjectId, Step, Status, Remarks, Reads, Inserts, Updates, Deletes
O que tivemos que fazer foi, dentro de cada procedimento armazenado, temos que executar este procedimento armazenado com Status como 2 (Em andamento) Durante o processo, onde podemos executar este procedimento armazenado várias vezes no final de cada etapa ou seção após aumentar o valor de passo variável. com base nas contagens de linhas das instruções Insert update select e delete, deveríamos registrar valores nas respectivas variáveis de parâmetro do procedimento armazenado. No final, você pode executar o mesmo procedimento armazenado com Status de 3 (Concluído) ou se o procedimento terminou no bloco catch, o status será 4 (Falha) na seção de comentários, podemos copiar as mensagens de erro do SQL.
Para ver todas essas informações, tivemos acesso a um relatório, para o qual obviamente eu não tinha o código-fonte, mas o relatório mostrava a que horas o procedimento armazenado começou, quando terminou, qual era o status quantas atualizações inserções exclui e lê fez. se falhou, qual foi a mensagem de erro?
Já tenho algumas ideias de melhorias para armazenar, quem começou?, quais eram os valores dos parâmetros? Para quem iniciou a parte do procedimento armazenado, estou confuso. A maioria desses procedimentos armazenados é executada como parte de diferentes trabalhos. Todos os nossos trabalhos são executados como um usuário de conta de serviço, mas os trabalhos são iniciados manualmente por vários usuários. Preciso descobrir qual usuário iniciou, pois dentro do procedimento armazenado, como usuário atual, sempre mostrará a conta de serviço. Também para Valores de Parâmetros, existe uma maneira dinâmica melhor de descobrir isso? em vez de definir um valor para uma variável manualmente. Eu esperava usar a saída de INPUTBUFFER, mas ela mostra apenas o nome do parâmetro, não os valores.
Se alguém puder me orientar sobre a estrutura da tabela de back-end e o script para este SP de auditoria, será muito útil. Além disso, mais ideias de melhoria são bem-vindas.
Minha principal confusão: acredito que eles tinham alguma tabela onde estavam armazenados esses valores de stored procedures e se o SP já estiver rodando, eles atualizaram no registro então fazendo um Insert mas como eles identificariam para fazer um insert ao invés de atualizar no cenário onde o procedimento armazenado falhou criticamente e o bloco catch não foi executado.