Pancho: si te entendí, solo que no me gusta esa solución.

Ponete en el lugar del desarrollador del sistema: Desarrollaste una
aplicación, la tenes en funcionamiento y viene otro programador y te dice:
Por cada INSERT que hagas en tal, tal y tal tabla voy  a disparar un
TRIGGER que *a)* inserte un registro en otra tabla, o *b) *inserte un
registro en otra tabla en *otra base de datos*, o bien c) inserte un
registro en otra tabla en otro motor, que puede ser mysql, firebird o
postgresql, que la voy a tener funcionando en este linux.

Las mínimas preguntas que vos te vas a hacer son: ¿cómo va a ser la tabla
donde vas a insertar? ¿qué pasa si a esa tabla luego la lockea otro
proceso? ¿ y si está en otro motor, qué pasa si el motor perece, o se
indispone ? ¿si está en otro motor en otra pc?

¿Todo mi sistema va a depender de un mysql que está en un linux en un
cacharro ahí tirado ? Sostiene el programador del sistema, creo que con
justa causa.


Por eso, creo que lo mas sano es ver el tema de los catcheos de eventos,
que son o deberían ser muy livianos siempre.

Ya me pongo a leer sobre el Profiler. Gracias de todas formas.



[email protected]


El 28 de abril de 2014, 8:07, francisco prieto <[email protected]>escribió:

> No no no...
>
> No me entendiste...
>
> Si tenes acceso a la base de datos podes crear un trigger en la tabla que
> quieras interceptar y por lo tanto en ese trigger podes disparar un
> procedimiento almacenado o bien insertar los datos en otra tabla que no
> tiene porque esta en la misma base de datos... es mas podes si queres
> insertar datos en una tabla de un motor libre...
>
> Claro que el acceso a la base de datos que tenes que tener no es un acceso
> de usuario final, tenes que poseer ciertos privilegios para poder crear SP.
>
> En Sql Server hay eventos....  estudia el tema SQL Profiler, pero dichos
> eventos estan orientados a la optimizacion del motor y no a la interacción
> con sus datos.
>
> Lo otro que podes hacer es armarte un esquema en Firebird o en MySql pero
> que apunte a cualquier base de datos externa, el tema es que los eventos
> que puedas generar en ellos van a apuntar a tu base y no a la externa,
> salvo que en la extena tengas propiedades privilegiadas.
>
> En fin esa es mi experiencia... en el caso Firebird podes realizale esta
> misma pregunta a Walter Ojeda Valiente que es un maestro en Firebird... te
> paso su blog... http://firebird21.wordpress.com/
>
> Saludos,
>
> Pancho
> Córdoba
>
>
> El 27 de abril de 2014, 10:47, Alejandro Paciotti <
> [email protected]> escribió:
>
>> Supongamos que hay un sistema, y que ese sistema inserta registros en una
>> tabla.
>> Yo no tengo los fuentes de ese sistema pero tengo acceso a la base de
>> datos y quiero que cada vez que se inserta un registro en alguna tabla
>> específica se ejecute *un programa*.
>>
>> Podría hacer lo que dice Pancho y hacer que ese *programa* observe cada
>> n segundos una tabla en la base de datos y cuando se insertó un registro
>> ejecute lo que tenía que hacer originalmente.
>>
>> La verdad, esta solución no me gusta. En C# existe algo así como el
>> "system watcher " (no recuerdo exactamente) para una carpeta, que
>> interactua con el sistema operativo tal que determinados procedimientos se
>> ejecutan cuando se crea o altera algún archivo en esa carpeta.
>>
>> El mismo Windows también lo hace, si uno abre el explorador de windows
>> dos veces en la misma carpeta y crea un archivo en alguna de esas dos
>> ventanas la otra lo muestra casi inmediatamente. No creo que windows use
>> "timers"... debe tener algún sistema de eventos y notificaciones.
>>
>> De hecho, MSSQLSERVER también lo tiene!  el Service 
>> Broker<http://msdn.microsoft.com/en-us/library/ms166100.aspx> ,
>> pero los eventos no salen de la instancia de SQL SERVER, o bien, si salen
>> pero a otra instancia de SQL SERVER. Lo que yo quiero es que dispare un
>> evento en algún puerto, como lo hace FIREBIRD, o MYSQL.. ¿ para qué? Para
>> desligarme de tener que usar C# o bien para desligarme de tener que usar
>> una instancia de SQLSERVER y programar en lo que se me antoja, sea PYTHON,
>> JAVA, RUBY O JAVASCRIPT...
>>
>> Otros ejemplos de uso, y quizá muchísimo mas útil que mi necesidad es
>> para auditar la performance  del motor y de cualquier aplicación, como por
>> ejemplo lo que trae SQL SERVER (creo que a partir de 2012) que son los
>> eventos extendidos que sirven para:
>>
>>
>>
>>    -
>>
>>    Encontrar las consultas más caras
>>    -
>>
>>    Encontrar las causas principales de la contención de bloqueos
>>    temporales
>>    -
>>
>>    Encontrar una consulta que esté bloqueando otras consultas
>>    -
>>
>>    Solucionar problemas de uso excesivo de la CPU producido por la
>>    recompilación de consultas
>>    -
>>
>>    Solucionar problemas de interbloqueos
>>
>> Sobre este tema pueden leer mucho 
>> aquí.<http://technet.microsoft.com/es-es/library/bb630282.aspx>
>>  *Esto no lo conocía cuando hice la pregunta*, lo leí recién ayer
>> (ayer... no se si fue ayer o el Viernes, ya estoy perdiendo la noción de
>> los días).
>>
>> En resumen, lo que yo quiero hacer es un sistema que escuche cuando en
>> una base de datos se produzca un evento sin tener la necesidad de alterar
>> *nada* de las instrucciones que se utilizan para insertar, borrar y/o
>> modificar.
>>
>> Para mi, es sumamente importante, ya que de poder hacer esto podría
>> integrar cualquier sistema hecho con BDD en SQLSERVER solamente pidiendo al
>> administrador de la base de datos que inserte esos TRIGGERS, (o lo que
>> fuese). Cuando me refiero a integrar quiero decir por ejemplo, integrar un
>> sistema con una herramienta de inteligencia de negocios, o con un CRM.
>> (Ejemplo: cuando se modifica el saldo de la tabla clientes y ese saldo
>> supera un monto determinado por una regla determinada por el gerente
>> comercial notificarlo vía email y generar un caso en el CRM).
>>
>> Espero haber sido claro!
>>
>> Saludos for everyone and everyone! (todos y todas en inglés...)
>>
>>
>>
>>
>>
>>
>> [email protected]
>>
>>
>> El 27 de abril de 2014, 9:03, francisco prieto <[email protected]>escribió:
>>
>>>  Alejandro...
>>>
>>> No hace falta que lo escuches... con que el trigger inserte el elemento
>>> en una tabla y vos mires constantemente dicha tabla sería suficiente.
>>>
>>> Saludos,
>>>
>>> Pancho
>>> Córdoba
>>>
>>>
>>> El 26 de abril de 2014, 23:51, César Pistiner 
>>> <[email protected]>escribió:
>>>
>>>> Buenas noches...
>>>>
>>>> Cual es la necesidad de capturar ese evento? No te alcanza con
>>>> controlarlo antes o después de la llamada en tu código?
>>>>
>>>> Solo para comprender mas el problema.
>>>>
>>>> Saludos,
>>>> César
>>>>  El abr 26, 2014 9:51 AM, "Alejandro Paciotti" <
>>>> [email protected]> escribió:
>>>>
>>>>>  Un trigger en la tabla que vos quieras... pero como haces para
>>>>> "escuchar" o catchear el evento desde afuera, y con que?
>>>>>
>>>>> Gracias!
>>>>>
>>>>> [email protected]
>>>>>
>>>>>
>>>>> El 26 de abril de 2014, 9:41, francisco prieto 
>>>>> <[email protected]>escribió:
>>>>>
>>>>>> Ale,
>>>>>>
>>>>>> Eso es simplemente un Trigger... y en Sql podes crearlo sin
>>>>>> problemas... gracias a ellos hice mi propia aplicacion de sincronozación
>>>>>> entre servidores...
>>>>>>
>>>>>> Saludos,
>>>>>>
>>>>>> Pancho
>>>>>> Córdoba
>>>>>>
>>>>>>
>>>>>> El 25 de abril de 2014, 12:25, Alejandro Paciotti <
>>>>>> [email protected]> escribió:
>>>>>>
>>>>>>> Hola muchachos:
>>>>>>>
>>>>>>> Alguien conoce algún generador de eventos chatcheables en SQL SERVER?
>>>>>>>
>>>>>>> ¿Qué quiero decir?
>>>>>>>
>>>>>>> En este  ejemplo muestran como *Catch un Firebird events
>>>>>>> <http://www.king-foo.be/2011/07/catch-firebird-events-with-node-js/>*,
>>>>>>> que básicamente lo hace a traves de un disparador luego de la inserción 
>>>>>>> /
>>>>>>> borrado / update de un registro de una tabla.
>>>>>>>
>>>>>>>
>>>>>>> SQL> SET TERM !! ; SQL> CREATE TRIGGER NEW_MONKEY_EVENT FOR monkeys
>>>>>>> CON> ACTIVE CON> AFTER INSERT CON> AS CON> BEGIN CON> POST_EVENT
>>>>>>> 'new_monkey_created'; CON> END!! SQL> SET TERM ; !!
>>>>>>>
>>>>>>> Todavía no lo probé, porque no quiero enroscarme con FIREBIRD siendo
>>>>>>> que lo necesito primeramente en SQLSERVER.
>>>>>>>
>>>>>>> Si a alguien leyó, vio, o escuchó algo... agradeceré comentarios...
>>>>>>>
>>>>>>>
>>>>>>> Abrazos.
>>>>>>>
>>>>>>>
>>>>>>> [email protected]
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>
>>
>

Responder a