[DUDA]PL/SQL en v$session

(1/3) > >>

-Ramc-:
Hola, pasó a estrenar el nuevo subforo con esta duda.

Tengo que hacer un procedimento almacenado que me diga los comandos ejecutados por X usuario en X intervalo fechas que recibo por parametros; se que al ejecutar un comando con un usuario en la vista v$session, específicamente el parametro command se modifica con el código del último comando de ese usuario, pero, no hay manera de poner un trigger en esa vista, ya que me tocó hacer un enredo para obtener los usuarios conectados y guardarlos en una tabla.  :xD

Pero, no tengo idea de como hacer para guardar todas esas modificaciones que se hagan en v$session a mi tabla, lo que tenía pensado si no había otra forma era poner un bucle que fuera consultando v$session y al ver que algo se a modificado, lo guardara junto con la fecha actual, pero, este método, ademas de no ser eficiente, mantendría mi script dentro de un bucle infinito y tendría que abrir otra sesión, para ejecutar otros comandos.

Necesito su ayuda, si alguien sabe de algún otro método para conseguir esa información, que no sea el bucle mortal  :xD por favor hagamelo saber en este post, estaría muy agradecido, no que me den el código, ya que como ven puedo sacarlo con el bucle mortal jaja, pero, si necesito un empujon para saber si hay una forma más eficiente, apenas voy aprendiendo a manejar oracle, supongo que para ustedes será fácil, pero, la documentación tampoco es muy buena en internet.

Gracias y saludos.

^Tifa^:
La tienes un pelin dificil  ;D  lo mas cercano que se me podria ocurrir (Ya que no puedes usar triggers y la verdad un bucle  :-\  no quisiera saber cuanto afectaria esto a la lectura de disco). Puedes intentar con un Evento? un Evento que se ejecute cada 60 segundos (1 minuto) y consulte la vista V$SESSION para obtener eso que solicitas... Ya con dicho evento podrias llamar tu procedimiento almacenado acorde a que se cumpla o no algo, lo negativo de los eventos que no es en tiempo real (Como un trigger) pero mejor que lea cada 60 segundos y no que lea cada segundo como haria un Bucle. Si te interesa sobre eventos en Oracle investigate sobre:

DBMS_SCHEDULER

 ;) 

Novlucker:
De que BBDD estamos hablando?

Las consultas las crean los propios usuarios?, porque si lo tienes encapsulado podrías tener procedimientos que hagan lo que sea, y en el proceso llaman a otro que realice el LOG :-\

Saludos

-Ramc-:
Muchas gracias ^TiFa^ , voy a probar con un evento y a investigar porque no me los explicaron en clases  :¬¬.

Porque estoy haciendo todo como sys para poder sacar la información y ni siquiera así me deja ponerle un trigger a esa vista, me dice que no es posible a ese tipo de vistas y blablabla.  :xD

Voy a probar y te comento.

Saludos.

The following error or errors occurred while posting this message:
Warning - while you were typing a new reply has been posted. You may wish to review your post.

Uso oracle.

Es que tengo que registrar todo, tanto comandos DML como DDL, de cualquier usuario.

Hay una vista v$session que me deja ver los usuarios, también tiene un campo llamado command que guarda un número que equivale a un comando, por ejemplo el 1 es CREATE TABLE y el 3 es SELECT y así, pero, a esa vista no le puedo poner un trigger.

Entonces tenía pensando un procedimiento que tomara los datos de la vista y los manipulara con un cursor para saber cualos son los que son :xD y los guardara en mi tabla junto con la fecha actual.

Después otro procedimiento recibiera 2 fechas(X, Y), que tomara los datos de esa tabla y me mostrara los datos que están entre las fechas X y Y.

No puedo dejar a ese procedimiento recopilando información sólo ya que necesito poder ejecutar otros comandos.

Saludos.

^Tifa^:
Ahhhhhhhh pero yo pensaba que era que en tu clase los profesores te habian exhigido que no podias crear un TRIGGER sobre esta vista   :xD  por eso sugeri lo del evento, olvidalo.

Prueba lo siguiente:

Código
 
CREATE OR REPLACE TRIGGER trigo
 AFTER LOGON ON DATABASE
DECLARE
 v_prog sys.v_$session.program%TYPE;
BEGIN
  /* Tu codigo Aqui */
END;
/
 
 

:) No me digas tampoco te explicaron sobre los TRIGGERS de sistemas y sus condiciones en Oracle???? (No estoy ya empapada del tema, hace unos meses abandone el PL/SQL en Oracle) Pero esto te puede ayudar, para crear TRIGGERS sobre vistas de SYSTEM.

http://www.psoug.org/reference/system_trigger.html

Tambien existe la posibilidad de que hagas otra vista de la vista v$session solamente con los campos que te interesan ver de v$session y crear un usuario con los roles que le permitan ver dicha vista en su entorno, y asi captar en tiempo real todos los cambios que requieras obtener.  :P Y puedes crear tu Stored Procedure llamando los datos de esta vista nueva que usa de referencia a v$session y mostrar en OUTPUT los resultados obtenidos  ;)  ya sabes que a tu ST puedes concatenarle la fecha actual con current_date();

Suerte con eso :)

Navegación

[0] Índice de Mensajes

[#] Página Siguiente