none
Ayuda con logs de mi programa y su base de datos RRS feed

  • Pregunta

  • ¡Hola programadores! Vengo en busca de su ayuda. Resulta que he desarrollado una aplicación y necesito que la misma tenga un visor de "logs", acerca de toda acción qeu realice el usuario del sistema. Estoy utilizando MySQL y se me ocurrió hacer tres triggers para cada tabla. De este modi, me ahorro mucho código en C#. EL problema es uqe tengo que especificar qué usuario del sistema es el que realizó los cambios. Para ello, no se me ocurre mas que tener una variable global en la base de datos, que contenga el usuario activo de mim sistema. Pero el problema es que cuando varias instancias de mi programa se abran desde diferentes equipos, todos modificarán y leerán el mismo usuario, ya que las variables globales, tengo entendido, son compartidas entre todos los uduarios.

     

    ¿Alguuna vez tuvieron que hacer algo smilar? ¿Cómo lo resolvieron? ¿Me ayudan con un par de ideas?


    Gabriela
    lunes, 6 de diciembre de 2010 12:15

Respuestas

  • hola

    en lugar de triggers no has analizado usar Stored Procedure ?

    con este podrias enviar el usuario por parametros, entonces dentro del SP no solo actualziarias la tabla, sino que ademas crearias el registro en la tabla de logs

    o sea realizarias dos actualizaciones en las tablas dentro del SP, tomando el usuario que le pasas por parametros desde la aplicacion

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 6 de diciembre de 2010 12:51

Todas las respuestas

  • hola

    no mantienes auditoria en los registros de las tablas ? o sea no tienes en las tablas definidos los campos UsuarioAlta, FechaAlta, UsuarioModificacion, FechaModificacion

    si mantienes estos 4 campos por tabla, al momento de actualizar el registro deberas insertar estos datos que podrias tomar desde los triggers

    por ahi es molesto administrar esta info pero podras tener el tracking de que usaurio creo el registero y quien los actualizo por ultima vez

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 6 de diciembre de 2010 12:22
  • Buena respuesta!! No la había pensado. Pero ¿Cómo voy a saber quién eliminó un registro? Si al borrarlo, no estoy guardando nada en él. Lo que se me ocurre es tener el username en una tabla aparte... Pero después ¿cómo sé cuál de todos es el mío si varios usuarios han iniciado sesión?
    Gabriela
    lunes, 6 de diciembre de 2010 12:35
  • No lo elimines. Simplemente ponle una marca de estado como eliminado. Yo suelo usar una tabla de "Anulaciones" con los campos, id, motivo, usuario, fecha (incluye hora). Luego en cada tabla tengo un campo [Anulado Id]. Al anular un registro (jamas elimino los registros), creo un registro en la tabla de anulaciones y luego guardo el id obtenido en esa tabla en el campo [anulado id] de la tabla que se anulo el registro.

    De esa forma puedo simplificar las anulaciones y la forma de ver quien, cuando y por que se anulo el registro.

    Otra forma es llevar una tabla con todos los updates, insert y deletes y agregar un trigger en las tablas que debe dejar registro. En caso de que te interese este metodo, avisame y te paso el script que tengo que es un poco complicado y que "recicle" de una pagina web.

     

    lunes, 6 de diciembre de 2010 12:41
  • Eso es lo qe estoy buscando. Yo llevo una tabla con todos los updates, llamada logs. Guardo todo allí, pero no se de dónde sacar el nombre del usuario activo en el momento de los ABM.
    Gabriela
    lunes, 6 de diciembre de 2010 12:44
  • hola

    en lugar de triggers no has analizado usar Stored Procedure ?

    con este podrias enviar el usuario por parametros, entonces dentro del SP no solo actualziarias la tabla, sino que ademas crearias el registro en la tabla de logs

    o sea realizarias dos actualizaciones en las tablas dentro del SP, tomando el usuario que le pasas por parametros desde la aplicacion

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 6 de diciembre de 2010 12:51
  • ¡¡Gracias por las ideas!! Voy a utilizar la de Leandro :)
    Gabriela
    lunes, 6 de diciembre de 2010 13:00