02 diciembre 2017

¿Hay vida más allá de Oracle? Características de Postgres SQL para un DBA de Oracle

Esta entrada en el blog contiene información para ayudar a un DBA de Oracle a entender algunos términos y la administración de una base de datos PostgreSQL. Pretendo dar una introducción a PostgreSQL, no un tutorial o una definición completa de cómo administrar una base de datos PostgreSQL. Para obtener la documentación completa, consulte los manuales de PostgreSQL.

¿Que es una base de datos Oracle?

Un servidor de base de datos Oracle consiste en una instancia de Oracle y una base de datos Oracle.
Una instancia de Oracle consiste en los procesos en segundo plano de Oracle y la memoria asignada dentro del área global compartida (SGA) y el área global del programa (PGA).
Los procesos en segundo plano de Oracle constan de lo siguiente:

  • Proceso del escritor de la base de datos (DBWn)
  • Proceso de registro de registro (LGWR)
  • Proceso de punto de control (CKPT)
  • Proceso de supervisión del sistema (SMON)
  • Process Monitor Process (PMON)
  • Proceso de Recuperación (RECO)
  • Archivar procesos (ARCn)
  • Una base de datos Oracle consiste en los archivos de datos de la base de datos, los archivos de control, los archivos de registro de rehacer, los archivos de registro de archivos y el archivo de parámetros. Para acceder de forma remota a una base de datos Oracle, existe un proceso separado denominado Listener Oracle.
  • En la configuración del Servidor Dedicado (frente a la configuración del Servidor Compartido), cada sesión de base de datos establecida tiene su propio proceso ejecutándose en el servidor.

Para mantener las cosas simples, cualquier comparación con una base de datos Oracle siempre se referirá a una sola instancia que administre una sola base de datos, RAC y Data Guard no serán mencionados. 

Nota: PostgreSQL también tiene el concepto de un modo de espera en caliente (desde 8.2) con el envío de registros de archivo (introducido en 8.0).

PostgreSQL

Procesos de servidor de base de datos

El programa de servidor de base de datos postgres son todos los procesos del servidor. No hay procesos nombrados por separado como en Oracle para las diferentes tareas dentro del entorno de la base de datos. Si mirara la lista de procesos (ps), el nombre de los procesos sería postgres. Sin embargo, en la mayoría de las plataformas, PostgreSQL modifica su título de comando para que los procesos individuales del servidor puedan identificarse fácilmente. Es posible que deba ajustar los parámetros utilizados para comandos como ps y top para mostrar estos títulos actualizados en lugar del nombre del proceso ("postgres").
Los procesos vistos en una lista de procesos pueden ser algunos de los siguientes:

  • Proceso maestro: inicia los otros procesos, procesos de fondo y sesión.
  • Proceso de Writer: proceso en segundo plano que coordina las escrituras de la base de datos, las escrituras de registro y los puntos de control.
  • Proceso de recopilación de estadísticas: proceso en segundo plano que recopila información sobre la actividad del servidor.
  • Procesos de sesión de usuario.

Los procesos del servidor se comunican entre sí utilizando semáforos y memoria compartida para garantizar la integridad de los datos a través del acceso simultáneo a los datos.

Clúster de base de datos PostgreSQL

Dentro de un servidor, se pueden construir una o más instancias de Oracle. Las bases de datos están separadas una de otra, por lo general compartiendo solo el proceso de escucha de Oracle. PostgreSQL tiene el concepto de un cluster de base de datos. Un clúster de base de datos es una colección de bases de datos que se almacena en una ubicación común del sistema de archivos (el "área de datos"). Es posible tener varios clústeres de bases de datos, siempre que utilicen diferentes áreas de datos y diferentes puertos de comunicación.
Los procesos junto con los componentes del sistema de archivos se comparten en el clúster de la base de datos. Todos los datos necesarios para un clúster de base de datos se almacenan dentro del directorio de datos del clúster, comúnmente denominado PGDATA (después del nombre de la variable de entorno que se puede usar para definirlo). El directorio PGDATA contiene varios subdirectorios y archivos de configuración.
Los siguientes son algunos de los archivos de configuración del clúster:
  • postgresql.conf - Parámetro o archivo de configuración del servidor principal.
  • pg_hba.conf - Archivo de configuración de autenticación de cliente.
  • pg_ident.conf - Mapa de la cuenta del sistema operativo al archivo de la cuenta PostgreSQL.
Los subdirectorios de clúster:
  • base - Subdirectorio que contiene subdirectorios por base de datos
  • global - Subdirectorio que contiene tablas de todo el cluster
    • pg_auth - Archivo de autorización que contiene definiciones de usuario y rol.
    • pg_control - Archivo de control.
    • pg_database - Información de bases de datos dentro del clúster.
  • pg_clog - Subdirectorio que contiene datos de estado de confirmación de transacción
  • pg_multixact - Subdirectorio que contiene datos de estado de múltiples movimientos (usado para bloqueos de filas compartidos)
  • pg_subtrans - Subdirectorio que contiene datos de estado de subtransacción
  • pg_tblspc - Subdirectorio que contiene enlaces simbólicos a espacios de tabla
  • pg_twophase - Subdirectorio que contiene archivos de estado para transacciones preparadas
  • pg_xlog - Subdirectorio que contiene archivos WAL (Write Ahead Log)
De forma predeterminada, para cada base de datos en el clúster hay un subdirectorio dentro de PGDATA / base, que recibe el nombre del OID de la base de datos (identificador de objeto) en pg_database. Este subdirectorio es la ubicación predeterminada para los archivos de la base de datos; en particular, sus catálogos de sistema están almacenados allí. Cada tabla e índice se almacenan en un archivo separado, que recibe su nombre del número de archivo de la tabla o índice, que se puede encontrar en pg_class.relfilenode.

Varios componentes que los DBA de Oracle normalmente igualan a una base de datos se comparten entre bases de datos dentro de un cluster de PostgreSQL, incluido el archivo de parámetros, el archivo de control, los registros de rehacer, los espacios de tabla, las cuentas, los roles y los procesos en segundo plano.



Archivos de datos de espacios de tablas y objetos

PostgreSQL introdujo la administración del tablespace en la versión 8.0. La representación física de un espacio de tabla dentro de PostgreSQL es simple: es un directorio en el sistema de archivos, y la asignación se realiza a través de enlaces simbólicos.
Cuando se crea una base de datos, el espacio de tablas predeterminado es donde se almacenan por defecto todos los objetos de la base de datos. En Oracle esto sería similar al Sistema, al Usuario y a los espacios de tablas temporales. Si no se define ningún espacio de tabla predeterminado durante la creación, los archivos de datos entrarán en un subdirectorio de PGDATA / base. Preferiblemente, la ubicación de la información del catálogo del sistema y las estructuras de datos de la aplicación residirían en espacios de tablas gestionados por separado. Esto está disponible.
Al igual que en Oracle, la definición de una tabla PostgreSQL determina qué espacio de tablas reside el objeto. Sin embargo, no existe limitación de tamaño, excepto los límites físicos que el sistema operativo coloca en el dispositivo. Los datos de la tabla individual se almacenan dentro de un archivo dentro del tablespace (o directorio). El software de la base de datos dividirá la tabla entre múltiples archivos de datos en caso de que los datos de la tabla superen 1 GB.

Desde la versión 8.1, es posible dividir una tabla en espacios de tabla separados (o lo mismo). Esto se basa en la característica de herencia de tablas de PostgreSQL, que utiliza una capacidad del planificador de consultas denominada exclusión de restricciones.

No existe capacidad para separar columnas específicas (como LOB) en espacios de tabla definidos por separado. Sin embargo, además de los archivos de datos que representan la tabla (en múltiplos de 1 GB), hay una separación de archivos de datos para columnas dentro de una tabla que están TOAST. El sistema de almacenamiento PostgreSQL llamado TOAST (la técnica de almacenamiento de atributo de gran tamaño) almacena automáticamente valores mayores que una página de base de datos única en un área de almacenamiento secundaria por tabla. La técnica TOAST permite columnas de datos de hasta 1 GB de tamaño.

Al igual que en Oracle, la definición de índice determina en qué espacio de tabla reside. Por lo tanto, es posible obtener la ventaja de rendimiento de separar los discos de los datos de una tabla frente a su indexación, aliviando la contención de E / S durante la manipulación de datos.
En Oracle existen espacios de tablas temporales donde se utiliza la información de clasificación y el espacio de evaluación temporal necesarios para declaraciones distintas y similares. PostgreSQL no tiene este concepto de un tablespace temporal; sin embargo, requiere almacenamiento para poder realizar estas actividades también. Dentro del espacio de tabla "predeterminado" de la base de datos (definido en la creación de la base de datos), hay un directorio llamado pgsql_tmp. Este directorio contiene el almacenamiento temporal necesario para la evaluación. Los archivos que se crean dentro del directorio existen solo mientras se está ejecutando la instrucción SQL. Crecen muy rápido, y lo más probable es que no estén diseñados para la eficiencia del espacio sino más bien para la velocidad. Tenga en cuenta que la fragmentación del disco podría ser el resultado de esto, y debe haber suficiente espacio en el disco para admitir las consultas del usuario. Con el lanzamiento de 8.3, hay definiciones de espacios de tablas temporales usando el parámetro temp_tablespaces.roles y los procesos en segundo plano.

REDO y Archivado

PostgreSQL usa Write-Ahead Logging (WAL) como su enfoque para el registro de transacciones. El concepto central de WAL es que los cambios en los archivos de datos (donde residen las tablas y los índices) deben escribirse solo después de que esos cambios hayan sido registrados, es decir, cuando los registros de registro que describen los cambios hayan sido descargados al almacenamiento permanente. Si seguimos este procedimiento, no es necesario que limpiemos las páginas de datos en el disco en cada compromiso de transacción, porque sabemos que, en caso de falla, podremos recuperar la base de datos utilizando el registro: cualquier cambio que no se haya aplicado a las páginas de datos se pueden rehacer desde los registros de registro. (Esta es la recuperación de avance, también conocida como REDO).

PostgreSQL mantiene su (WAL) en el subdirectorio pg_xlog del directorio de datos del cluster.

WAL se introdujo en PostgreSQL en la versión 7.1. Para mantener la consistencia de la base de datos en caso de falla, las versiones anteriores forzaron todas las modificaciones de datos en el disco antes de que cada transacción se confirmara. Con WAL, solo debe descargarse un archivo de registro al disco, lo que mejora enormemente el rendimiento al tiempo que agrega capacidades como la Recuperación puntual y el archivo de transacciones.

Un sistema PostgreSQL teóricamente produce una secuencia indefinidamente larga de registros WAL. El sistema divide físicamente esta secuencia en archivos de segmentos WAL, que normalmente son de 16 MB cada uno. El sistema normalmente crea algunos archivos de segmento y luego los "recicla" al cambiar el nombre de los archivos de segmento que ya no se necesitan a números de segmento más altos. Si tuviera que realizar una lista del directorio pg_xlog, siempre habría un puñado de archivos cambiando de nombre a lo largo del tiempo.

Para agregar el archivo de los archivos WAL, existe un parámetro dentro del archivo de parámetros donde se agrega un comando para ejecutar el proceso de archivo. Una vez hecho esto, las copias de seguridad del sistema operativo "en línea" están disponibles ejecutando los comandos pg_start_backup y pg_stop_backup, que suspenden y reanudan la escritura en los archivos de datos mientras continúan escribiendo las transacciones en los archivos WAL y ejecutando el proceso de archivo.
La inclusión del archivo WAL y los comandos de respaldo en línea se agregaron en la versión 8.0.

Rollback o Undo

Es interesante cómo se utiliza la asignación dinámica de espacio en disco para el almacenamiento y procesamiento de registros dentro de las tablas. Los archivos que representan la tabla crecen a medida que la tabla crece. También crece con las transacciones que se realizan en su contra. En Oracle existe un concepto de rollback o deshacer segmentos que contienen la información para revertir una transacción. En PostgreSQL, los datos se almacenan dentro del archivo que representa la tabla. Por lo tanto, cuando se realizan eliminaciones y actualizaciones en una tabla, el archivo que representa el objeto contendrá los datos anteriores. Este espacio se reutiliza pero para forzar la recuperación del espacio usado, se debe ejecutar un proceso de mantenimiento llamado vacío.

Archivo de registro del servidor

Oracle tiene el archivo de registro de alerta. PostgreSQL tiene el archivo de registro del servidor. Una opción de configuración incluso tendría la información de conexión que normalmente vemos en listener.log de Oracle aparece en el registro del servidor de PostgreSQL. Los parámetros dentro del archivo de configuración del servidor (postgresql.conf) determinan el nivel, la ubicación y el nombre del archivo de registro.
Para ayudar con el mantenimiento del archivo de registro del servidor (crece rápidamente), existe una funcionalidad para girar el archivo de registro del servidor. Los parámetros se pueden configurar para determinar cuándo rotar el archivo según el tamaño o la antigüedad del archivo. La administración de los archivos antiguos se deja al administrador.

Aplicaciones

El comando initdb crea un nuevo clúster de base de datos PostgreSQL.
El comando psql inicia el front-end basado en terminal a la solicitud de comando de PostgreSQL o SQL. Las consultas y los comandos se pueden ejecutar de forma interactiva o mediante archivos. El símbolo del sistema psql tiene varias características atractivas:

  • Completa ayuda en línea para los comandos psql y la sintaxis SQL.
  • Historial de comandos y edición de línea.
  • Los comandos SQL pueden existir en múltiples líneas y se ejecutan solo después del punto y coma (;).
  • Se pueden ingresar varios comandos SQL separados por punto y coma en una sola línea.
  • Formato de salida flexible.
  • Múltiples comandos de descripción de objetos que son superiores a DESCRIBE de Oracle.

Dependiendo de las configuraciones de seguridad de los entornos, las conexiones se pueden establecer local o remotamente a través de TCP / IP. Debido a estas conexiones de seguridad separadas, las contraseñas pueden o no ser necesarias para conectarse.
El comando pg_ctl es una utilidad para mostrar el estado, iniciar, detener o reiniciar el servidor de base de datos PostgreSQL (postgres). Aunque el servidor se puede iniciar a través del ejecutable de postgres, pg_ctl encapsula tareas tales como redirigir la salida del registro, separarla adecuadamente del terminal y del grupo de procesos, y proporcionar opciones para el apagado controlado.

Los comandos pg_dump y pg_restore son utilidades diseñadas para exportar e importar los contenidos de una base de datos PostgreSQL. Los volcados pueden salir en formato de archivo de script o de archivo. El formato de archivo de script crea archivos de texto sin formato que contienen los comandos SQL necesarios para reconstruir la base de datos al estado en el que se encontraba en el momento en que se generó. El formato de archivo de archivo crea un archivo para ser utilizado con pg_restore para reconstruir la base de datos.
Los formatos de archivos de almacenamiento están diseñados para ser portátiles en todas las arquitecturas. Históricamente, cualquier tipo de actualización al software PostgreSQL requeriría un pg_dump de la base de datos antes de la actualización. Luego, un pg_restore después de la actualización. Ahora, para versiones menores (es decir, el tercer decimal - 8.2.x) las actualizaciones se pueden hacer en su lugar. Sin embargo, cambiar las versiones en el primer o segundo decimal aún requiere un pg_dump / pg_restore.

Existe una herramienta gráfica llamada pgAdmin III desarrollada por separado. Se distribuye con las versiones de Linux y Windows de PostgreSQL. La conexión a un servidor de base de datos se puede establecer de forma remota para realizar tareas administrativas. Debido a que la herramienta está diseñada para administrar todos los aspectos del entorno de la base de datos, la conexión a la base de datos debe realizarse a través de una cuenta de súper usuario.
La herramienta pgAdmin III tiene las siguientes características atractivas estándar:

  • Diseño intuitivo
  • Estructura de árbol para crear y modificar objetos de base de datos 
  • Revisión y almacenamiento de SQL al modificar o crear objetos


29 noviembre 2017

Oracle 12C, ¿Que es Multitenant?

Introducción a las bases de datos de contenedores (CDB) y bases de datos conectables (PDB)

Este artículo se va a centrar en repasar los conceptos básicos de as novedades que Oracle 12c ha introducido desde su liberación de la release 1. Oracle 12c R1 (12.1) introdujo la opción Multitenant. Este artículo proporciona una descripción general básica de la opción multiusuario, con enlaces a otros artículos más detallados sobre dicha funcionalidad, que serán elaborados más adelante.

Introducción

La opción Multitenant representa uno de los mayores cambios arquitectónicos en la historia de la base de datos Oracle. Con esta novedad se  presentaron los conceptos de la base de datos de contenedores (CDB) y la base de datos conectable (PDB).

¿Que entendemos por CDB?

CDB  es el acrónimo de Base de Datos de Contenedores, en apariencia esto parece muy similar a una base de datos Oracle convencional, ya que contiene la mayoría de las partes funcionales con las que ya estará familiarizado (archivos de control, archivos de datos, deshacer, archivos temporales, registros de rehacer, etc.) esto es:
  • Controlfiles
  • Datafiles
  • Undo files
  • Tempfiles

También alberga el diccionario de datos para aquellos objetos que son propiedad del contenedor raíz y aquellos que son visibles para todos los PDB.

¿Que entendemos por CDB?


PDB es el acrónimo de Base de datos conectable, dado que el CDB contiene la mayoría de las partes que funcionan para la base de datos, el PDB solo necesita contener información específica para sí misma. No necesita preocuparse por los archivos de control, rehacer registros y deshacer, etc. En su lugar, está compuesto de archivos de datos y archivos temporales para manejar sus propios objetos. Esto incluye su propio diccionario de datos, que contiene información sobre solo aquellos objetos que son específicos del PDB. Desde Oracle 12.2 en adelante, un PDB debería, tener un tablespace undo local.

Esta división del diccionario de datos entre objetos comunes, en el contenedor raíz, y objetos específicos de PDB, en el diccionario de datos del PDB, es muy importante, porque esta separación es lo que le da a la opción multiusuario su flexibilidad. Desde la perspectiva del PDB, el diccionario de datos es la unión de los diccionarios de datos raíz y PDB, por lo que internamente el PDB se parece mucho a una base de datos Oracle normal. Por ejemplo, las vistas DBA_% y ALL_% dentro del PDB aparecen igual que cualquier base de datos que no sea CDB.

Oracle Managed Files (OMF) y Multitenant

Oracle recomienda el uso de Oracle Managed Files (OMF) cuando se usa la arquitectura Multitenant, ya que simplifica varias funciones. Parece que el uso de OMF es obligatorio para algunas funcionalidades, como la funcionalidad de Contenedores de aplicaciones en Oracle 12.2.

Creación de bases de datos conectables (PDB)

Dado que la mayor parte de las piezas de trabajo ya están presentes en el contenedor raíz, la creación de un nuevo PDB es una tarea comparativamente rápida y sencilla. Al crear un PDP completamente nuevo, el PDB se crea como una copia de un PDB inicial, por lo que solo toma el tiempo que los archivos tarden en copiarse.

Creación

En lugar de crear un nuevo PDB desde la semilla, puede clonar desde un PDB ya existente.

Clonación
También es posible crear clones en un CDB remoto.

Clonación remota


Esto no solo permite que las bases de datos se muevan fácilmente, sino que también proporciona una forma alternativa de parchear y actualizar a versiones futuras. Aquí puede encontrar un ejemplo del uso de desenchufar / complemento para realizar un parche. Aquí se describe una discusión general del mecanismo de desconexión / complemento.
La conversión de una base de datos que no es de CDB a una base de datos conectable implica obtener una descripción de la base de datos que no es de CDB y usarla para conectarla a un CDB como un nuevo PDB. Este método se describe aquí.

Reubicar una base de datos conectable (PDB)

Desde Oracle 12.2 en adelante, es posible reubicar un AP, moviéndolo de un CDB a otro. Esto es significativamente más simple que hacer un unplug / plugin convencional.


Actualizar una base de datos conectable (PDB)

Desde Oracle 12.2 en adelante, es posible actualizar un PDB clonado desde el PDB de origen, siempre que solo se haya abierto en modo de solo lectura.



Base de datos proxy conectable (PDB)

Desde Oracle 12.2 en adelante, es posible crear un servidor proxy PDB, que es un esqueleto PDB que envía SQL a un PDB remoto para ser procesado. Esto le permite tener un punto final local para una base de datos remota.


Contenedores de aplicaciones

Oracle 12.2 presenta el concepto de contenedores de aplicaciones, que actúan como un contenedor mini-raíz. Se pueden usar para centralizar la configuración y las aplicaciones compartidas, que son utilizadas por sus PDB de aplicaciones dependientes.


Novedades en las vistas del diccionario de datos

La introducción de la opción multiusuario trae consigo una capa adicional de vistas de diccionario de datos, lo que permite generar informes a través del contenedor raíz y las bases de datos conectables (PDB). Ignorando las ediciones por el momento, las versiones anteriores tenían la siguiente jerarquía.

DBA_: todos los objetos en la base de datos.
|
--ALL_: Objetos accesibles para el usuario actual, incluidos los que posee el usuario actual.
  |
  --USER_: objetos propiedad del usuario actual.


Con Oracle 12c, se agrega una capa adicional a la jerarquía.

CDB_: todos los objetos en todos los contenedores * (root y todos los PDB).
|
--DBA_: todos los objetos en el contenedor actual (root o PDB).
  |
  --ALL_: objetos accesibles por el usuario actual en el contenedor actual (root o PDB), incluidos los que posee el usuario actual.
    |
    --USER_: objetos propiedad del usuario actual en el contenedor actual (root o PDB).


El resultado de las vistas CDB_ depende del contenedor desde el que se accede. Cuando se accede desde el contenedor raíz, de hecho presentan toda la información de todos los contenedores. Cuando se accede desde un AP, actúan efectivamente como las vistas DBA desde dentro del contenedor. Esto puede ser un poco confuso al principio.


27 noviembre 2017

Mejoras de auditoría (DBMS_AUDIT_MGMT) en Oracle Database 12c

La introducción de políticas de auditoría y la pista de auditoría unificada son las dos novedades, que aparecen en esta entrega de nuestra base de datos favorita. Que simplifican la configuración de la auditoría de bases de datos en Oracle 12c.  La nueva funcionalidad de auditoría también se puede usar para crear políticas de auditoría de muy sencillas a muy complicadas, pero no creo que sea la forma en que la mayoría de la gente querrá abordarla,  Una vez que hayas aprendido a andar, puedes empezar a correr y complicar tus políticas de auditoria, eso sí, bajo tu responsabilidad.

Si quieres saber más en profundidad acerca de la auditoria unificada en Oracle 12c, te recomiendo que sigas lo artículos de Joel Perez, Aman Sharma, Karan Dodwal y Sebastián D'Alessandro, en la technetwork de Oracle:

  • Oracle Database 12c: "Auditoria en 12c: Auditoría Unificada Parte I
  • Oracle Database 12c: "Auditoria en 12c: Auditoría Unificada Parte II
  • Oracle Database 12c: "Auditoria en 12c: Auditoría Unificada Parte III

Creando Políticas de Auditoría

Al igual que la auditoría estándar anterior, que mencionamos en mi anterior artículo, la auditoría unificada se puede utilizar para crear reglas de auditoría extremadamente complejas. Como la documentación de Oracle para administrar las políticas de auditoría es muy buena, en lugar de tratar repetirla aquí, solo mostraré algunos ejemplos sencillos para despertar la curiosidad del lector.

Es mejor crear una política de auditoría que contenga todas las auditorías necesarias para una sesión, en lugar de usar varias políticas pequeñas. El uso de múltiples políticas genera una mayor sobrecarga de inicio de sesión, un mayor consumo de UGA y una funcionalidad de verificación de auditoría interna menos eficiente.


Una política de auditoría se compone de varias cláusulas distintas, algunas de las cuales son opcionales.

Los ejemplos de los usos se dan en las secciones a continuación, pero aquí hay un resumen rápido de ellos.


  • privilege_audit_clause: se usa para especificar una lista de privilegios del sistema para auditar.
  • action_audit_clause: define las acciones que necesitan ser auditadas. Estas pueden ser standard_actions, como DELETE, o específicas del objeto, como DELETE ON schema.table. También pueden ser componentes_actividades que se dirigen a funciones específicas como Data Pump o SQL * Loader.
  • role_audit_clause: especifica una lista de roles. Todos los privilegios del sistema otorgados a través de esos roles son auditados.
  • When ... Evaluate per: permite definir una condición de auditoría para determinar cuándo se realizará esta. La condición se puede evaluar para cada sentencia SQL, sesión en a base de datos o instancia de base de datos, según el nivel de granularidad que requiera la condición.
  • CONTAINER: determina si una política de auditoría es específica para un PDB individual (CURRENT) o común a todos los AP (ALL).
Esto puede sonar un poco confuso, pero si alguna vez ha utilizado la auditoría de bases de datos en versiones anteriores, rápidamente se verá bastante familiar. Lo más importante que debe recordar es que en lugar de emitir los comandos AUDIT / NOAUDIT directamente, usted crea una política de auditoría que contiene las piezas relevantes, luego la habilita y deshabilita usando los comandos AUDIT / NOAUDIT.

Algunos de los siguientes ejemplos requieren estos tres usuarios de prueba.


En algunos casos, el contenido de la pista de auditoría unificada se ha purgado entre las pruebas para mantener el resultado simple y específico para la funcionalidad que se prueba.

Auditoría de privilegios


Como su nombre lo indica, la auditoría de privilegios le permite auditar el uso de los privilegios del sistema. La vista SYSTEM_PRIVILEGE_MAP identifica los privilegios del sistema que se pueden auditar.





Si queremos auditar la creación de tablas y secuencias por parte del usuario de ARTOS, podríamos hacer algo como lo siguiente.














Muestra la configuración de la política.










Conéctese con el usuario de ARTOS y cree algunos objetos.









Verifique la pista de auditoría. Si está en modo de escritura diferida (delayed-write), es posible que necesite vaciar la pista de auditoría antes de poder ver los registros de auditoría.

Deshabilitar la política y eliminarla.







Componente de Auditoría de Acciones

En lugar de auditar acciones en objetos específicos, en su lugar puede auditar acciones relevantes para funcionalidades o utilidades específicas, tales como Oracle Label Security (OLS), Real Application Security, Database Vault, Data Pump o SQL * Loader. Hay dos ejemplos de auditoría de componente_acción vinculados a continuación.

  • Auditoría de Operaciones de Data Pump
  • Auditoría de las cargas de ruta directa de SQL * Loader


Administración Unificada de la Pista de Auditoría

La administración de la auditoría unificada puede parecer un poco complicada al principio, pero hay algunas cosas que se deben tener en cuenta.

  • La auditoría unificada funciona de manera predeterminada, por lo que no necesita hacer nada para comenzar.
  • La configuración predeterminada es correcta. Probablemente solo deba centrarse en sus políticas de auditoría específicas.
  • Configurar un proceso de archivado y depuración necesitará algo de reflexión, pero probablemente solo lo haga una vez en la vida de su base de datos, así que no se asuste por este aspecto de la auditoría.

En los artículos referenciados más arriba encontrareis información en profundidad acerca de esta materia. 

Seguridad de las pistas de auditoria

El mantenimiento del seguimiento de auditoría y las políticas de auditoría se limita a aquellos usuarios a los que se les haya otorgado el rol AUDIT_ADMIN.

La función AUDIT_VIEWER se puede otorgar a los usuarios que necesitan ver la información de auditoría, pero no administrar el seguimiento de auditoría o las políticas de auditoría.


Bajo la auditoría unificada, los usuarios ya no pueden crear políticas de auditoría contra sus propios objetos. Para la compatibilidad con versiones anteriores, esto aún es posible para la auditoría tradicional. Esta es posiblemente una razón para alejarse de la auditoría en modo mixto.


Actualizaciones en 12.2


Una de las principales críticas de la auditoría unificada en 12.1 fue el rendimiento. En 12.2, la pista de auditoría unificada ahora reside en una tabla convencional llamada AUDSYS.AUD_$_UNIFIED. Cuando actualiza una base de datos, puede optar por migrar la información de auditoría existente a esta tabla utilizando TRANSFER_UNIDED_RECORDS en el DBMS_AUDIT_MGMT, que debería proporcionar un mejor rendimiento.

26 noviembre 2017

Mejoras de auditoría (DBMS_AUDIT_MGMT) en Oracle Database 11g Release 2

Oracle, para la release 11g R1 activó la auditoría por defecto por primera vez. Oracle 11g Release 2 ahora permite una mejor administración de la pista de auditoría utilizando el paquete DBMS_AUDIT_MGMT.

Mover la pista de auditoría de base de datos a un espacio de tabla diferente

El procedimiento SET_AUDIT_TRAIL_LOCATION te permite modificar la ubicación de la pista de auditoría de base de datos (normal / detallada). Aunque no permite la alteración de la pista de auditoría del sistema operativo,  la documentación sugiere que esto puede suceder en el futuro. 
Este procedimiento acepta dos parámetros.

  • AUDIT_TRAIL_TYPE: tipo de pista de auditoría que se va a mover.
  • AUDIT_TRAIL_LOCATION_VALUE: el espacio de tabla al que deben moverse las tablas de seguimiento de auditoría.

El parámetro AUDIT_TRAIL_TYPE se especifica utilizando una de estas constantes.

  • DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD: pista de auditoría estándar (AUD $).
  • DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD: pista de auditoría detallada (FGA_LOG $).
  • DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD: pistas de auditoría estándar y de grano fino.


Primero vemos la ubicación actual de las tablas de seguimiento de auditoría.

A continuación, creamos un nuevo tablespace para contener el seguimiento de auditoría.
Luego movemos la pista de auditoría estándar al nuevo espacio de tabla.
A continuación, movemos la pista de auditoría detallada.

Controlar el tamaño y la antigüedad de la pista de auditoría del sistema operativo

El procedimiento SET_AUDIT_TRAIL_PROPERTY le permite establecer el tamaño máximo y / o la edad de los archivos del registro de auditoría del sistema operativo. El procedimiento puede establecer parámetros para varios propósitos, pero restringiré la discusión solo a aquellos relevantes para esta sección. Se puede encontrar una lista completa de las constantes disponibles aquí.

El procedimiento acepta tres parámetros.
  • AUDIT_TRAIL_TYPE: el tipo de pista de auditoría a modificar (AUDIT_TRAIL_OS, AUDIT_TRAIL_XML o AUDIT_TRAIL_FILES).
  • AUDIT_TRAIL_PROPERTY: el nombre de la propiedad que se establecerá (OS_FILE_MAX_SIZE o OS_FILE_MAX_AGE).
  • AUDIT_TRAIL_PROPERTY_VALUE: el valor requerido para la propiedad.
Para verificar la configuración actual, consulte la vista DBA_AUDIT_MGMT_CONFIG_PARAMS.

Para estableder  el tamaño máximo de los archivos de auditoría del sistema operativo en 15,000 Kb, ejecuta el siguiente script:
Para establecer la edad máxima de los archivos de auditoría XML en 30 días, ejecuta el siguiente script.
El procedimiento CLEAR_AUDIT_TRAIL_PROPERTY se puede utilizar para eliminar las restricciones de tamaño y edad o restablecerlas a los valores predeterminados. Establecer el valor del parámetro USE_DEFAULT_VALUES en FALSE elimina las restricciones, mientras que establecerlo en TRUE devuelve la restricción al valor predeterminado.

Purga de registros de seguimiento de auditoría

Al igual que en versiones anteriores, puede eliminar manualmente registros de las tablas AUD $ y FGA_LOG $ y eliminar manualmente los archivos de auditoría del sistema de archivos, pero el paquete DBMS_AUDIT_MGMT le brinda algunos mecanismos nuevos y más seguros para mantener la pista de auditoría.

Inicializando la infraestructura de gestión

Para poder purgar la pista de auditoría de la base de datos, se debe realizar una inicialización única de la infraestructura de administración de auditoría. Esto se hace usando el procedimiento INIT_CLEANUP. El procedimiento acepta dos parámetros.
  • AUDIT_TRAIL_TYPE: la pista de auditoría a inicializar (constantes).
  • DEFAULT_CLEANUP_INTERVAL: El intervalo predeterminado en horas, después del cual el procedimiento de limpieza se debe volver a llamar (1-999).

El siguiente script SQL verifica la configuración de parámetros actual, inicializa la infraestructura de administración de auditoría para todas las pistas de auditoría con un intervalo predeterminado de 12 horas y vuelve a verificar la configuración.
Observa que el 'DB AUDIT TABLESPACE' para las pistas de auditoría de la base de datos no ha cambiado y que se ha establecido el 'INTERVALO DE LIMPIEZA POR DEFECTO' para las cuatro pistas de auditoría. El estado de inicialización actual de una pista de auditoría específica se puede verificar utilizando IS_CLEANUP_INITIALIZED.

Para desconfigurar la infraestructura de gestión de auditoría, ejecute el procedimiento DEINIT_CLEANUP.

Gestión de marca de tiempo

Lo siguiente a considerar antes de purgar la pista de auditoría es la cantidad de datos que desea depurar. El paquete DBMS_AUDIT_MGMT nos permite purgar todos los registros, o todos los registros anteriores a una marca de tiempo específica. La marca de tiempo en cuestión se especifica individualmente para cada pista de auditoría utilizando el procedimiento SET_LAST_ARCHIVE_TIMESTAMP, que acepta tres parámetros.
  • AUDIT_TRAIL_TYPE: el seguimiento de auditoría cuya marca de tiempo debe establecerse (constantes). Solo son válidos los registros de auditoría individuales, no las constantes que especifican los múltiplos.
  • LAST_ARCHIVE_TIME: se borrarán los registros o archivos anteriores a esta hora.
  • RAC_INSTANCE_NUMBER: opcionalmente especifique el nodo RAC para las pistas de auditoría del sistema operativo. Si no está configurado, asume la instancia actual.

Purga manual

El procedimiento CLEAN_AUDIT_TRAIL es el mecanismo básico para purgar manualmente el seguimiento de auditoría. Acepta dos parámetros.
  • AUDIT_TRAIL_TYPE: la pista de auditoría a purgar (constantes).
  • USE_LAST_ARCH_TIMESTAMP: establézcalo en FALSE para purgar todos los registros / archivos, o TRUE solo purgue los registros / archivos anteriores a la marca de tiempo especificada para la pista de auditoría.

Purga automatizada

El procedimiento CREATE_PURGE_JOB le permite programar un trabajo para llamar al procedimiento CLEAN_AUDIT_TRAIL. Al crear un trabajo de purga, puede especificar 4 parámetros.
  • AUDIT_TRAIL_TYPE: la pista de auditoría a purgar por el trabajo programado (constantes).
  • AUDIT_TRAIL_PURGE_INTERVAL: intervalo en horas entre purgas.
  • AUDIT_TRAIL_PURGE_NAME: un nombre para el trabajo de depuración.
  • USE_LAST_ARCH_TIMESTAMP: establézcalo en FALSE para purgar todos los registros / archivos, o TRUE solo purgue los registros / archivos anteriores a la marca de tiempo especificada para la pista de auditoría.



.