Autor
|
Tema: [DUDA]PL/SQL en v$session (Leído 11,782 veces)
|
-Ramc-
Desconectado
Mensajes: 495
|
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. 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 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.
|
|
|
En línea
|
Shhh... be vewy, vewy, quiet! I'm hunting wabbits...LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
La tienes un pelin dificil 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
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
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
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
-Ramc-
Desconectado
Mensajes: 495
|
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. 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 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.
|
|
|
En línea
|
Shhh... be vewy, vewy, quiet! I'm hunting wabbits...LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
Ahhhhhhhh pero yo pensaba que era que en tu clase los profesores te habian exhigido que no podias crear un TRIGGER sobre esta vista por eso sugeri lo del evento, olvidalo. Prueba lo siguiente: 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.htmlTambien 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. 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
|
|
« Última modificación: 5 Noviembre 2009, 20:13 pm por ^TiFa^ »
|
En línea
|
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
No puedo afirmartelo lo siento.
Pero porque no creas una vista copia de v$session solo con los campos que deseas obtener ver? y dicha vista otorgale permisos a X usuario para que este usuario cree un procedimiento almacenado (si es requerido) para ver dichos datos llamando los campos de esa vista nueva?
|
|
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
De hecho hice una mini-prueba en mi Oracle SQL> CREATE VIEW ejemplo AS SELECT command, USER#, username, STATUS, logon_time FROM v$session; VIEW created. SQL> SELECT * FROM ejemplo; COMMAND USER# USERNAME STATUS LOGON_TIM ---------- ---------- ------------------------------ -------- --------- 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 3 0 SYS ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 COMMAND USER# USERNAME STATUS LOGON_TIM ---------- ---------- ------------------------------ -------- --------- 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 18 ROWS selected. SQL> CREATE USER pepe IDENTIFIED BY pepe; USER created. SQL> GRANT CONNECT, resource TO pepe; GRANT succeeded. SQL> GRANT SELECT, INSERT, UPDATE ON SYS.EJEMPLO TO pepe; GRANT succeeded. SQL> exit oracle@marian:~$ sqlplus pepe/pepe SQL*Plus: Release 10.2.0.1.0 - Production ON Thu Nov 5 15:39:45 2009 Copyright (c) 1982, 2005, Oracle. ALL rights reserved. Connected TO: Oracle DATABASE 10g Enterprise Edition Release 10.2.0.1.0 - Production WITH the Partitioning, OLAP AND DATA Mining options SQL> SELECT * FROM SYS.EJEMPLO; COMMAND USER# USERNAME STATUS LOGON_TIM ---------- ---------- ------------------------------ -------- --------- 0 0 ACTIVE 05-NOV-09 3 60 PEPE ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 3 0 SYS ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 COMMAND USER# USERNAME STATUS LOGON_TIM ---------- ---------- ------------------------------ -------- --------- 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 0 0 ACTIVE 05-NOV-09 19 ROWS selected.
Te podria servir... nunca se sabe
|
|
|
En línea
|
|
|
|
-Ramc-
Desconectado
Mensajes: 495
|
No puedo afirmartelo lo siento.
Pero porque no creas una vista copia de v$session solo con los campos que deseas obtener ver? y dicha vista otorgale permisos a X usuario para que este usuario cree un procedimiento almacenado (si es requerido) para ver dichos datos llamando los campos de esa vista nueva?
Pero, si creo una vista copia, es lo mismo que con la vista original, no puedo crearle trigger, así que tendría que sacarle los datos, guardarlos en mi tabla y consultarlos como haría con v$session la original. O sea, necesito sacar el campo command cada vez que se modifique y guardarlo en otra tabla con la fecha actual y el usuario que lo hizo, pero, no puedo ponerle el trigger a v$session, ni a la vista creada de el. EDIT: El error al intentar poner el trigger es: Error report: ORA-02030: can only select from fixed tables/views 02030. 00000 - "can only select from fixed tables/views" *Cause: An attempt is being made to perform an operation other than a retrieval from a fixed table/view. *Action: You may only select rows from fixed tables/views.
|
|
« Última modificación: 5 Noviembre 2009, 20:57 pm por -Ramc- »
|
En línea
|
Shhh... be vewy, vewy, quiet! I'm hunting wabbits...LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
Hasta lo poco que me concierne, no es posible crear triggers en vistas del esquema SYS sugeri la creacion de una copia a v$session por si ibas a trabajar sobre otro usuario y no SYSTEM. Tambien recuerda que las vistas reflejan todo en tiempo real, no es una tabla estatica que no se actualiza al menos que intervenga manos humanas. Podrias crear tu evento con DBMS_SCHEDULER que se reproduzca cada 60 segundos (1 minuto) y llame los datos en ese tiempo y te vaya haciendo un log spool en un archivo fisico, o en una tabla o donde gustes de todo lo que ocurra cada 60 segundos sobre los campos que te interesan de v$session. (Pero esto no seria en tiempo real) sino cada 60 segundos.
|
|
« Última modificación: 6 Noviembre 2009, 05:20 am por ^TiFa^ »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[DUDA]Como inicio session segura en el foro?
Sugerencias y dudas sobre el Foro
|
wACtOr
|
6
|
4,132
|
1 Diciembre 2010, 02:42 am
por Carloswaldo
|
|
|
ayuda session php
PHP
|
kakashi20
|
3
|
3,845
|
2 Febrero 2011, 02:25 am
por kakashi20
|
|
|
php session
PHP
|
ime
|
2
|
2,269
|
18 Junio 2013, 15:53 pm
por ime
|
|
|
Seguridad en $session
PHP
|
basickdagger
|
3
|
2,135
|
10 Mayo 2014, 20:06 pm
por engel lex
|
|
|
ataques weak session ids
« 1 2 »
Nivel Web
|
tecasoft
|
10
|
7,169
|
1 Diciembre 2017, 15:20 pm
por engel lex
|
|