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] >>>>>>> >>>>>> >>>>>> >>>>> >>> >> >
