Auditoría de la base de datos, seguimiento y seguridad

Abro este tema de auditoría en bases de datos Oracle para comentar cualquier cuestión relacionada con la activación y utlización de la auditoría de Oracle para hacer un seguimiento de determinadas consultas, usuarios, objetos, conexiones, etc. con el fin de mejorar el rendimiento de la base de datos, o también por cuestiones de seguridad.

Comienzo incluyendo este documento que explica bastante bien cómo utilizar la auditoría

En respuesta a por Carlos

Ahora tengo otra duda, resulta que tengo en la bd de oracle 10g algunos procesos que me están consumiendo casi la totalidad de la memoria, por ponerte un  ejemplo de 16 Gigas me queda en 100,200 ó 300 megas, y no puedo determinar que proceso es el que se me está comiendo la memoria. Te agradecería si tienes por ahi algún scripts que saque esta información.

Por otro lado, una consulta mas, tengo una bd oracle10g 10.2.0.3 r2,  y una aplicación desarrollada en forms 6i y report 6i y  tengo problemas de rendimiento, hay alguna forma de averiguar si es problema de la base de datos o de la aplicación o del servidor, tenemos una estructura RAC de oralce, un arreglo cx-310 de 15 rmp  y 2 server o nodos PE 2950 cada uno con 16 Gigas de RAM

Gracias.

En respuesta a por Yamil

Yamil, para lo que comentas te recomiendo activar la auditoría y/o utilizar herramientas de monitorización de la base de datos.

En el primer caso ten en cuenta que la base de datos siempre intentará utilizar toda la memoria disponible que tenga. Si es demasiada, y el servidor necesita parte de esa memoria para dar servicio a otros procesos tendras que reducirla modificando los parámetros de memoria de la BD.

Antes de utilizar herramientas externas, te recomiendo que utilices los recursos y asistentes proporciona Enterprise Manager para controlar las áreas de memoria de la BD, enlazo un artículo de mailxmail que da algunos apuntes sobre cómo hacerlo.

Otras herramientas como Toad for Oracle, o NimBUS también te pueden ayudar.

En Recopilación y consultas útiles de Oracle tienes también alguna consulta para saber directamente algunos datos de la memoria:

•• Consulta Oracle SQL para conocer la memoria Share_Pool libre y usada
select name,to_number(value) bytes
from v$parameter where name ='shared_pool_size'
union all
select name,bytes
from v$sgastat where pool = 'shared pool' and name = 'free memory'
•• Consulta Oracle SQL para conocer los aciertos de la caché (no debería superar el 1 por ciento)
select sum(pins) Ejecuciones, sum(reloads) Fallos_cache,
trunc(sum(reloads)/sum(pins)*100,2) Porcentaje_aciertos
from v$librarycache
where namespace in ('TABLE/PROCEDURE','SQL AREA','BODY','TRIGGER');

Y a un nivel más avanzado, el artículo Monitoring Oracle SGA and PGA Memory Changes, de Burleson Consulting también te puede ser útil.

 

Sobre los problemas de rendimiento que comentas en el segundo párrafo, aparte de monitorizar la BD tendrás que monitorizar otros procesos a nivel de sistema, y comparar. Al tener Oracle en RAC aún lo tienes más complicado. Si la instalación de RAC se ha hecho desde cero, no creo que te de problemas, pero se me ocurre que si se ha hecho una migración desde una BD que no estaba en RAC podrías tener, por ejemplo, algún problema de sincronización en la generación de claves primarias o secuencias.

buenas noches me piden  generar una auditoria que identifique

las conexiones de un usuario e indique las sentencias ejecutadas por el,

 indicando fecha y hora de las conexiones.  le agradeceria su pronta

ayuda

En respuesta a por salome

Salome, en la presentación que he adjuntado al abrir el tema encontrarás información sobre cómo activar la auditoría y realizar el seguimiento de las conexiones del usuario que te solicitan, o utilizar el paquete DBMS_FGA para realizar un seguimiento con mayor nivel de detalle, ya verás que hay muchas posibilidades.

En este comentario también comenté algo sobre la auditoría, puede que algo te sirva.

Enlazo además el artículo Auditoría de una base de datos Oracle ¿qué es? ¿para qué sirve? ¿cómo se activa?, de AJPDsoft, que también explica bastante bien, y en una sóla página, cómo funciona la auditoría .

Por ejemplo, una sentencia sencilla para consultar las conexiones de un usuario a partir de una fecha con la auditoría activada sería esta:

select os_username, username, terminal, timestamp, logoff_time, comment_text
from dba_audit_trail
where username = 'usuario' 
and trunc(timestamp) > '20100430'
order by timestamp desc;

Buen dia, necesito saber como restrinjo a un usuario para que no tenga mas de 3 o x sesiones.

Hola muchachos ando realizando un monitoreo a la base de datos donde ando viendo las personas que modifican los objetos de la base "DDL".

El tema aqui es que cuando alguien modifica externamente los objetos que no son por medio de un cliente si no dentro del servidor no puedo ver a detalle los datos del ususario.

Uds tendran algo entre sus cursidades ..?

Buenas tardes, necesito saber el id de la sesion de Oracle que está activo en determinado momento que corre un proceso.

Es decir, si yo consulto la vista:

select sid from v$session
where username : 'DESA'

Si hay varias sesiones abiertas, me devuelta tantos sid como sesiones abiertas haya y lo que necesito en realidad es un único valor de sid que me muestra univocamente la sesion utilizada, es esto posible?

Muchas Gracias,
Saludos,
Osk

En respuesta a por osk (no verificado)

 Que tal osk, prueba con el siguiente query

SELECT SS.SID, P.PROGRAM, P.PGA_USED_MEM, P.PGA_MAX_MEM, S.SQL_TEXT, SS.SID

FROM V$SQL S, V$SESSION SS, V$PROCESS P WHERE S.SQL_ID = SS.SQL_ID 

AND P.ADDR = SS.PADDRAND

AND SS.USERNAME = ' TU USUARIO'

Con esto puedes ver el query que corre cada sesion de tu usuario y puedes determinar cual es la sesion que necesitas

Espero te sirva, Saludos.

 

Hola que tal,

Tengo una necesidad pero no se si se pueda llevar a cabo. 

Es posible tener algun log o información para un procedimiento almacenado o paquete, donde me muestre en que momento se ejecutó el PKG o PROC con la información que recibió y la información que envió (si es del caso).

De antemano muchas gracias por la ayuda que me puedan brindar.

Saludos, 

Buen dia,

Podrian apoyarme con la siguiente solicitud, hemos presentado problemas de espacio con los file system, creemos que programar depuraciones desde EBS podria ayudar a liberar espacios, pero para definir los periodos de depuración, me solicitan un analisis para saber la carga diaria es decir cuantos outputs, archivos temporales etc, se generan diariamente y el espacio que ocupan, esto para definir la programacion,  tienen algun metodo para sacar estas estadisticas o como podria recopilar la informacion que me solicitan.

De antemano mil gracias por su apoyo

Buen día Carlos:

 

Eh visto tu blog en está página y me ha parecido interesante, te comento que eh ingresado a una institución financiera como DBA.

 

Debido a multiples limitaciones que existen conn el tema de acceso hacia la Base de datos de desarrollo, la cual tengo que administrar en un futuro.

 

Me gustaría preguntarte si existe alguna herramienta que me permita monitorear los cambios a los objetos de la  base (tablas, stores, funciones, paquetes, etc), aquí en el área realizan cambios sin aviso y de ultimo momento. Por lo que la auditoria unificada en el servidor de la base no es opción por n limitaciones que existen.

 

No puedo instalar nada en el servidor ya que es solaris y por lo que eh escuchado, todo el tema de hardware o almacenamiento es muy caro. Si puedo implementar alguna aplicaciòn que me permita auditar sería en mi laptop y que se conecte al servidor con el usuario que ya tengo temporalmente.

 

Saludos y muchas gracias.

 

Abraham Santamaría.

En respuesta a por Abraham Santamaría (no verificado)

Hola Abraham

Lo normal es utilizar la auditoría que proporciona la base de datos porque el servidor de base de datos es el que centraliza los cambios. Cualquier otra cosa tendría que estar consultando constantemente los objetos auditados para comprobar si han cambiado. No te digo que no exista alguna utilidad que haga algo así, pero yo no la conozco.

Lo que sí hay son aplicaciones que recogen cambios consultando en los logs del servidor, en lugar de hacer consultas contra la base de datos, y así no interfieren en el funcionamiento, pero igualmente si quieres que los cambios se salven en los logs has de tener activada la auditoría de la base de datos.

Otra opción, si el problema es el espacio, sería activar la auditoría, y lanzar consultas contra la base de datos, pero recoger y almacenar los resultados en otra máquina de la red, o un ordenador, o un portátil, eso sí que seguro que lo hacen herramientas de administración de bases de datos Oracle.

Saludos,