Log de oracle
Tu respuesta del viernes parece ser que se ha perdido, te vuelvo hacer la pregunta para que cuando puedas me respondas.
Tengo una aplicación en Fox, sobre una DB de oracle, lo que necesito es como crear un log o auditar, donde todas las acciones que hago con la aplicación, pudiera ver que es lo que va haciendo en las tablas y los campos de la DB.
Tengo una aplicación en Fox, sobre una DB de oracle, lo que necesito es como crear un log o auditar, donde todas las acciones que hago con la aplicación, pudiera ver que es lo que va haciendo en las tablas y los campos de la DB.
1 respuesta
Respuesta de pedrito12
1
1
pedrito12, Actualmente estoy trabajando como Manager en una multinacional de...
Parece ser que mis homólogos aquí en TodoExpertos han tenido problemas... si es que antes o después el desastre llegará. Si trabajasen con Oracle y necesitasen un experto... pues...
... bueno a lo que vamos...
Recuerdo el tema de las auditorías:
Lo que tienes que hacer es lo siguiente:
Quita la almohadilla del parámetro AUDIT_TRAIL=true en el fichero de inicialización de parametros. init.ora.
Apaga y reinicia la base de datos para que los cambios hagan efecto.
Con el usuario SYS tienes que activar la auditoría que te interese, que creo eran las de objeto.
Pues bien, desde sqlplus, usuario SYS:
audit insert on PEDRO.demo;
audit select on PEDRO.demo;
audit delete on PEDRO.demo;
audit update on PEDRO.demo;
tambien tienes la opcion de auditar todo a la vez en una sola sentencia:
audit all on PEDRO.demo;
Y la vista DBA. AUDIT. OBJECT recogerá los registros de auditoría, que en realidad residen en la tabla AUD$ del sistema, tablespace SYSTEM.
---¡AVISO!---
Necesitarás vaciar la tabla AUD$ de vez en cuando, (lo normal es una vez a la semana), para que no se llene innecesariamente el tablespace de system, lo cual puede resultar peligroso y podemos incidir en el rendimiento de la base de datos negativamente.
----------
Para poder vaciar la tabla, debemos llevárnosla a otro tablespace de otro usuario, por ejemplo tablespace AUDITORIA del usuario AUDITORIA.
Primero creamos la tabla que albergará los datos.
Sácate el script de la vista, o si no ejecuta lo siguiente:
create table AUDITORIA tablespace AUDITORIA as select * from DBA_AUDIT_OBJECT;
En este caso como ya hemos metido los registros que nos interesan, pues podemos borrarlos:
truncate table AUD$; --> desde usuario SYS.
Si lo que pasa es que ya tenemos creada la tabla auditoria, lo que tenemos que hacer es pasar los registros a la tabla AUDITORIA y truncar la tabla del sistema, de la siguiente manera:
insert into AUDITOR.AUDITORIA
select * from DBA_AUDIT_OBJECT;
seguuidamente hacemos un truncate de la tabla AUD$;
truncate table AUD$;
NOTA: Lo más profesional y ordenado sería tener la tabla de auditoria en un tablespace para ella sola(si va a ser muy grande) y además que esté bajo un usuario a parte de cualquiera, más que nada para mejorar e independizar la manejabilidad de los datos.
En fin, espero todo salga a pedir de boca... y ah! Se me olvidaba dejarte la famosa select para ver los registros que se están auditando:
Select Os_Username , Username, Terminal, Owner, Obj_Name, Action_Name, DECODE(Returncode,'0','Success',Returncode), TO_CHAR(Timestamp,'DD-MON-YY HH24:MI:SS')
from DBA_AUDIT_OBJECT;
Fíjate que los campos son comunes a los que tiene tu tabla de AUDITORIA, con lo que esta select, dentro de un tiempo también podrás lanzarla sobre esa tabla para ver registros, porque como tiene la misma estructura, pues puedes lanzarla.
En fin.
... bueno a lo que vamos...
Recuerdo el tema de las auditorías:
Lo que tienes que hacer es lo siguiente:
Quita la almohadilla del parámetro AUDIT_TRAIL=true en el fichero de inicialización de parametros. init.ora.
Apaga y reinicia la base de datos para que los cambios hagan efecto.
Con el usuario SYS tienes que activar la auditoría que te interese, que creo eran las de objeto.
Pues bien, desde sqlplus, usuario SYS:
audit insert on PEDRO.demo;
audit select on PEDRO.demo;
audit delete on PEDRO.demo;
audit update on PEDRO.demo;
tambien tienes la opcion de auditar todo a la vez en una sola sentencia:
audit all on PEDRO.demo;
Y la vista DBA. AUDIT. OBJECT recogerá los registros de auditoría, que en realidad residen en la tabla AUD$ del sistema, tablespace SYSTEM.
---¡AVISO!---
Necesitarás vaciar la tabla AUD$ de vez en cuando, (lo normal es una vez a la semana), para que no se llene innecesariamente el tablespace de system, lo cual puede resultar peligroso y podemos incidir en el rendimiento de la base de datos negativamente.
----------
Para poder vaciar la tabla, debemos llevárnosla a otro tablespace de otro usuario, por ejemplo tablespace AUDITORIA del usuario AUDITORIA.
Primero creamos la tabla que albergará los datos.
Sácate el script de la vista, o si no ejecuta lo siguiente:
create table AUDITORIA tablespace AUDITORIA as select * from DBA_AUDIT_OBJECT;
En este caso como ya hemos metido los registros que nos interesan, pues podemos borrarlos:
truncate table AUD$; --> desde usuario SYS.
Si lo que pasa es que ya tenemos creada la tabla auditoria, lo que tenemos que hacer es pasar los registros a la tabla AUDITORIA y truncar la tabla del sistema, de la siguiente manera:
insert into AUDITOR.AUDITORIA
select * from DBA_AUDIT_OBJECT;
seguuidamente hacemos un truncate de la tabla AUD$;
truncate table AUD$;
NOTA: Lo más profesional y ordenado sería tener la tabla de auditoria en un tablespace para ella sola(si va a ser muy grande) y además que esté bajo un usuario a parte de cualquiera, más que nada para mejorar e independizar la manejabilidad de los datos.
En fin, espero todo salga a pedir de boca... y ah! Se me olvidaba dejarte la famosa select para ver los registros que se están auditando:
Select Os_Username , Username, Terminal, Owner, Obj_Name, Action_Name, DECODE(Returncode,'0','Success',Returncode), TO_CHAR(Timestamp,'DD-MON-YY HH24:MI:SS')
from DBA_AUDIT_OBJECT;
Fíjate que los campos son comunes a los que tiene tu tabla de AUDITORIA, con lo que esta select, dentro de un tiempo también podrás lanzarla sobre esa tabla para ver registros, porque como tiene la misma estructura, pues puedes lanzarla.
En fin.
Hola Pedro, como siempre gracias de antemano por tu tiempo.
Después de ejecutar la sentencia Audit All a varias tablas, donde en todas me dio el mensaje "Auditoría terminada con éxito" hice una commit; y me válido "Validación terminada".
Después de efectuar cambios, creaciones de documento, confirmaciones, etc... en el Programa de fox, he ejecutado la select en sql plus y me de el mensaje de "ninguna fila seleccionada", lo he ejecutado desde el TOAD y sale vacío y desde el Schema Browser he visualizado los datos de la tabla AUD$ y esta vacío.
Seguro que estoy haciendo algo mal, pero no lo detecto.
Un Saludo
Miguel :-)
PD:Por cierto, si lo consigo (con tu ayuda, evidentemente), ¿hay manera de desactivarlo?.
¿Se pueden seleccionar todas las tablas de una vez o hay que seleccionarlas una por una?
Después de ejecutar la sentencia Audit All a varias tablas, donde en todas me dio el mensaje "Auditoría terminada con éxito" hice una commit; y me válido "Validación terminada".
Después de efectuar cambios, creaciones de documento, confirmaciones, etc... en el Programa de fox, he ejecutado la select en sql plus y me de el mensaje de "ninguna fila seleccionada", lo he ejecutado desde el TOAD y sale vacío y desde el Schema Browser he visualizado los datos de la tabla AUD$ y esta vacío.
Seguro que estoy haciendo algo mal, pero no lo detecto.
Un Saludo
Miguel :-)
PD:Por cierto, si lo consigo (con tu ayuda, evidentemente), ¿hay manera de desactivarlo?.
¿Se pueden seleccionar todas las tablas de una vez o hay que seleccionarlas una por una?
Vamos a probar una cosa. No se exactamente que version de base de datos, con lo que no estoy al 100% seguro de que esté funcionando bien el parámetro en el init. Ora. Ahora mismo deberías tenerlo así:
AUDIT_TRAIL=TRUE
No es asi?, pues bien si está así debería funcionar bien.
De no ser así, vamos a probar con esto:
AUDIT_TRAIL=DB
¿No debe llevar delante ningún carácter especial como # o?¬ Cualquiera; no debe llevar nada delante.
Un vez hayamos hecho el cambio en el fichero de inicialización de parámetros de la base de datos, debemos "rebotar" la base de datos.
AVISO: A veces puede ocurrir que tengamos más de un fichero de inicialización de parámetros, y estemos haciendo cambios en un fichero que no vale, osea que tienes que estar seguro de que los cambios los estás haciendo en el fichero correcto. El fichero suele llamarse: init"SID". Ora es decir, si tu base de datos se llama demo: initdemo. Ora amén de alguna diablurilla de alguien.
En caso de que anteriormente hayas hecho esto y no funcione, pues debes decirme en que sistema operativo estás, con que usuario entras a la base de datos para hacer los cambios, y amandarme el fichero de alert de la base de datos, residente en: $ORACLE_HOME/rdbms/trace/alert.ora , generalmente suele estar ahí, a no ser de cambios por motivos de espacio o rendimiento.
Bueno, pues nada, prueba esto último que te mando a ver que pasa.
RESUMEN: Vuelve a asegurarte de que el init. Ora tiene el cambio hecho y de que sales guardando los cambios.
Apaga e inicia la base de datos
Conéctate como SYS y activa las auditorías, siempre refiriéndote a las tablas como: NombreDeUsuario. NombreDeTabla
Para desactivar una auditoría bastará con poner la misma sentencia del objecto que estás auditando, pero desauditando osea: noaudit.
noaudit all on PEDRO.DEMO;
Y te devolverá algo así como :
Noauditoría terminada con éxito.
Espero que haya más suerte la próxima vez. La verdad es que a mi también me costó algo la primera vez que activé una auditoría, porque son muchas cositas que hacer y que mirar, activar, etc... pero debe funcionar, no tiene más secreto tampoco;
Cuando hayas activado las auditorías, intenta generar algún registro de auditoría, insertando, borrando algo sobre la tabla auditada y confirmando la transacción de modo que quede grabada. Realiza una selección del numero de registros que haya en la tabla de auditoría de la siguiente manera.
... incluso antes de empezar la auditoría; primero cuenta cuantos registro hay.
Select count(*) from DBA_AUDIT_OBJECT;
Después activa la auditoría e intenta generar registros desde otro usuario.
Seguidamente valida y vuelve al usuario SYS y ejecuta nuevamente Select count(*) from DBA_AUDIT_OBJECT;
Debería funcionar... de no ser así... bueno, no adelantemos acontecimientos...
AUDIT_TRAIL=TRUE
No es asi?, pues bien si está así debería funcionar bien.
De no ser así, vamos a probar con esto:
AUDIT_TRAIL=DB
¿No debe llevar delante ningún carácter especial como # o?¬ Cualquiera; no debe llevar nada delante.
Un vez hayamos hecho el cambio en el fichero de inicialización de parámetros de la base de datos, debemos "rebotar" la base de datos.
AVISO: A veces puede ocurrir que tengamos más de un fichero de inicialización de parámetros, y estemos haciendo cambios en un fichero que no vale, osea que tienes que estar seguro de que los cambios los estás haciendo en el fichero correcto. El fichero suele llamarse: init"SID". Ora es decir, si tu base de datos se llama demo: initdemo. Ora amén de alguna diablurilla de alguien.
En caso de que anteriormente hayas hecho esto y no funcione, pues debes decirme en que sistema operativo estás, con que usuario entras a la base de datos para hacer los cambios, y amandarme el fichero de alert de la base de datos, residente en: $ORACLE_HOME/rdbms/trace/alert.ora , generalmente suele estar ahí, a no ser de cambios por motivos de espacio o rendimiento.
Bueno, pues nada, prueba esto último que te mando a ver que pasa.
RESUMEN: Vuelve a asegurarte de que el init. Ora tiene el cambio hecho y de que sales guardando los cambios.
Apaga e inicia la base de datos
Conéctate como SYS y activa las auditorías, siempre refiriéndote a las tablas como: NombreDeUsuario. NombreDeTabla
Para desactivar una auditoría bastará con poner la misma sentencia del objecto que estás auditando, pero desauditando osea: noaudit.
noaudit all on PEDRO.DEMO;
Y te devolverá algo así como :
Noauditoría terminada con éxito.
Espero que haya más suerte la próxima vez. La verdad es que a mi también me costó algo la primera vez que activé una auditoría, porque son muchas cositas que hacer y que mirar, activar, etc... pero debe funcionar, no tiene más secreto tampoco;
Cuando hayas activado las auditorías, intenta generar algún registro de auditoría, insertando, borrando algo sobre la tabla auditada y confirmando la transacción de modo que quede grabada. Realiza una selección del numero de registros que haya en la tabla de auditoría de la siguiente manera.
... incluso antes de empezar la auditoría; primero cuenta cuantos registro hay.
Select count(*) from DBA_AUDIT_OBJECT;
Después activa la auditoría e intenta generar registros desde otro usuario.
Seguidamente valida y vuelve al usuario SYS y ejecuta nuevamente Select count(*) from DBA_AUDIT_OBJECT;
Debería funcionar... de no ser así... bueno, no adelantemos acontecimientos...
- Compartir respuesta
- Anónimo
ahora mismo