# Oracle

# Introducción

**Este plugin tiene como finalidad monitorizar bases de datos Oracle**, mediante consultas que extraerán información sobre datos que son claves para conocer el rendimiento y estado de la bases de datos, como son el número de conexiones, número de consultas , estado de los reinicios, ratio de fragmentación y cache. Estos datos se verán reflejados en PandoraFMS, en módulos que aportaran el valor estadístico, dentro de un agente que representará a cada base de datos.

Este plugin está desarrollado para usarse con Pandora FMS Discovery, por lo que a diferencia de otros plugins no genera agentes por XML, si no que todo lo descubierto se devuelve en la salida JSON del plugin.

# Prerrequisitos

Este plugin realiza conexiones remotas a las bases de datos a monitorizar, por lo que es necesario asegurar la conectividad entre el servidor de Pandora FMS y dichas bases de datos. Es necesario disponer de una configuración adecuada de la red y del cortafuegos para permitir la comunicación entre el servidor y las bases de datos remotas, con el fin de garantizar el funcionamiento eficaz del complemento.

## ES — Conexión

El plugin se conecta mediante `oracledb` (driver Python) usando el formato:

```
HOST:PORT/SID

```

O mediante un DSN completo:

```
dsn=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=sales1-srv)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))

```

El usuario de conexión debe tener al menos el privilegio `CREATE SESSION`:

```sql
GRANT CREATE SESSION TO pandora;

```

## ES — Grants por Módulo

Todos los módulos se activan mediante checkboxes en la configuración de Discovery. Otorga solo los permisos que necesites según los módulos que uses.

### 1. Conexiones (`checkConnections`)

```sql
-- v$session (contador de sesiones activas)
GRANT SELECT ON V_$SESSION TO pandora;

-- v$parameter (máximo de sesiones)
GRANT SELECT ON V_$PARAMETER TO pandora;

```

### 2. Uptime (`checkUptime`)

```sql
-- v$session (hora de inicio del proceso PMON)
GRANT SELECT ON V_$SESSION TO pandora;

```

### 3. Estadísticas de Queries (`queryStats`)

```sql
-- v$sqlstats (contadores de ejecución SQL)
GRANT SELECT ON V_$SQLSTATS TO pandora;

```

### 4. Tablespaces (`checkTablespaces`)

```sql
-- dba_tablespace_usage_metrics (Oracle 10g+)
GRANT SELECT ON DBA_TABLESPACE_USAGE_METRICS TO pandora;

-- dba_tablespaces (estado)
GRANT SELECT ON DBA_TABLESPACES TO pandora;

-- dba_data_files (cálculo de tamaño, fallback Oracle < 10g)
GRANT SELECT ON DBA_DATA_FILES TO pandora;

-- dba_free_space (cálculo de tamaño, fallback Oracle < 10g)
GRANT SELECT ON DBA_FREE_SPACE TO pandora;

```

### 5. Ratio de Fragmentación (`checkFragmentation`)

```sql
-- dba_tables (estadísticas de tablas para fragmentación)
GRANT SELECT ON DBA_TABLES TO pandora;

```

### 6. Estadísticas de Caché (`checkCache`)

```sql
-- v$librarycache
GRANT SELECT ON V_$LIBRARYCACHE TO pandora;

-- v$rowcache
GRANT SELECT ON V_$ROWCACHE TO pandora;

-- v$sysstat
GRANT SELECT ON V_$SYSSTAT TO pandora;

```

### 7. Multitenant / Monitorización de PDBs (`multitenant`)

```sql
-- v$pdbs (descubrimiento de PDBs)
GRANT SELECT ON V_$PDBS TO pandora;

```

Además, el usuario debe tener `CREATE SESSION` en **cada PDB** a monitorizar. Conéctate a cada PDB y ejecuta:

```sql
ALTER SESSION SET CONTAINER = <PDB_NAME>;
GRANT CREATE SESSION TO pandora;
-- Los grants granulares de PDB (v$session, dba_tablespaces, etc.)
-- deben otorgarse también dentro de cada PDB.

```

> **Nota:** Con multitenant activado, el plugin se conecta directamente a cada PDB usando `HOST:PORT/PDB_NAME`, por lo que el usuario debe existir y tener los permisos necesarios en todas las PDBs.

### 8. Consultas Personalizadas (`executeCustomQueries`)

Los permisos dependen completamente de las consultas definidas por el usuario. Otorga `SELECT` sobre cualquier tabla/vista adicional que referencien las custom queries.

---

## ES — Configuración Rápida (Todos los Módulos)

Para mayor comodidad, otorga `SELECT_CATALOG_ROLE` que cubre la mayoría de vistas `V$` y `DBA_`:

```sql
-- En CDB (base de datos contenedora)
CREATE USER pandora IDENTIFIED BY <password>;
GRANT CREATE SESSION TO pandora;
GRANT SELECT_CATALOG_ROLE TO pandora;

-- En cada PDB (si usas multitenant)
ALTER SESSION SET CONTAINER = <PDB_NAME>;
-- Si el usuario ya existe como common user del CDB:
GRANT CREATE SESSION TO pandora;
GRANT SELECT_CATALOG_ROLE TO pandora;

```

### Alternativa Granular Mínima

Si `SELECT_CATALOG_ROLE` es demasiado amplio, usa este bloque:

```sql
CREATE USER pandora IDENTIFIED BY <password>;
GRANT CREATE SESSION TO pandora;

-- Vistas de rendimiento dinámico
GRANT SELECT ON V_$SESSION TO pandora;
GRANT SELECT ON V_$SQLSTATS TO pandora;
GRANT SELECT ON V_$PARAMETER TO pandora;
GRANT SELECT ON V_$LIBRARYCACHE TO pandora;
GRANT SELECT ON V_$ROWCACHE TO pandora;
GRANT SELECT ON V_$SYSSTAT TO pandora;
GRANT SELECT ON V_$PDBS TO pandora;

-- Vistas DBA
GRANT SELECT ON DBA_TABLESPACES TO pandora;
GRANT SELECT ON DBA_TABLESPACE_USAGE_METRICS TO pandora;
GRANT SELECT ON DBA_DATA_FILES TO pandora;
GRANT SELECT ON DBA_FREE_SPACE TO pandora;
GRANT SELECT ON DBA_TABLES TO pandora;

-- Información de versión
GRANT SELECT ON PRODUCT_COMPONENT_VERSION TO pandora;

```

## ES — Tabla Resumen

<table id="bkmrk-token-m%C3%B3dulo-vista%2Ft"><thead><tr><th>Token Módulo</th><th>Vista/Tabla Oracle</th></tr></thead><tbody><tr><td>`checkConnections`</td><td>`V$SESSION`, `V$PARAMETER`</td></tr><tr><td>`checkUptime`</td><td>`V$SESSION`</td></tr><tr><td>`queryStats`</td><td>`V$SQLSTATS`</td></tr><tr><td>`checkTablespaces`</td><td>`DBA_TABLESPACE_USAGE_METRICS`, `DBA_TABLESPACES`, `DBA_DATA_FILES`*, `DBA_FREE_SPACE`*</td></tr><tr><td>`checkFragmentation`</td><td>`DBA_TABLES`</td></tr><tr><td>`checkCache`</td><td>`V$LIBRARYCACHE`, `V$ROWCACHE`, `V$SYSSTAT`</td></tr><tr><td>`multitenant`</td><td>`V$PDBS` + `CREATE SESSION` en cada PDB</td></tr><tr><td>`executeCustomQueries`</td><td>Depende de las queries del usuario</td></tr></tbody></table>

\* Solo necesario para el fallback de Oracle &lt;= 10g. Oracle 11g+ usa `DBA_TABLESPACE_USAGE_METRICS`.

---

# Parámetros y configuración

**Parámetros**

<table border="1" id="bkmrk---conf-ruta-al-archi" style="width: 95.5228%;"><tbody><tr><td style="width: 20.8762%;">--conf</td><td style="width: 79.1099%;">Ruta al archivo de configuración</td></tr><tr><td style="width: 20.8762%;">--target\_databases</td><td style="width: 79.1099%;">Ruta al archivo de configuración que contiene los targets de las bases de datos</td></tr><tr><td style="width: 20.8762%;">--target\_agents</td><td style="width: 79.1099%;">Ruta al archivo de configuración que contiene los targets de los agentes</td></tr><tr><td style="width: 20.8762%;">--custom\_queries</td><td style="width: 79.1099%;">Ruta al archivo de configuración que contiene las consultas personalizadas</td></tr></tbody></table>

**Archivo de configuración (--conf)**

```
[CONF]
agents_group_id = < ID del grupo en el que se crearán los agentes >
interval = < Intervalo de monitorización de los agentes en segundos >
user = < Usuario de conexión >
password = < Contraseña >
threads = < Número de hilos que se usaran para la creación de agentes >
modules_prefix = < Prefijo de módulos >
execute_custom_queries = < Activar con 1 para habilitar el uso de consultas personalizadas >
analyze_connections = < Activar con 1 para habilitar la monitorización de conexiones >
engine_uptime = < Activar con 1 para habilitar la monitorización del tiempo en ejecución >
query_stats = < Activar con 1 para habilitar la moitorización de estadísticas de consultas >
check_tablespaces = < Activar con 1 para habilitar la monitorización de estadísticas de tablespaces >
fragmentation_ratio = < Activar con 1 para habilitar la monitorización de estadísticas de ratio de fragmentación >
cache_stats = < Activar con 1 para habilitar la monitorización de estadísticas de cache >
thick_mode = < Activar con 1 para habilitar la conexión en thick mode >
multitenant = < Activar con 1 para habilitar la monitorizacion multitenant. Solo aplicable a arquitecturas multitenant de Oracle (CDB/PDB); en entornos que no sean CDB, simplemente emitirá una advertencia inofensiva>
agent_per_pdb = <Activar con 1 para habilitar la creacion de agente por cada PDB. Aplicable únicamente a arquitecturas multitenant (CDB/PDB) de Oracle. Si se marca esta casilla, se creará un agente para cada PDB de la instancia; de lo contrario, los módulos de cada PDB se incluirán en el agente principal de la instancia. >
client_path = < Ruta del cliente. Sólo necesario en caso de utilizar el thick mode >
entities_list = < Ruta donde se generará el fichero de entidades >
enable_entities_interval = < Ruta para activar el fichero de entidades (solo en modo multitenant >
entities_interval = < intervalo de reescaneo del fichero de entidades >

[THRESHOLDS]
< Patron regexp de coincidencia con nombre de módulos > = < Umbrales deseados en el modulo, separados por "|" >

```

<span style="text-decoration: underline;">Ejemplo</span>

```
[CONF]
agents_group_id = 10
interval = 300
user = sa 
password = HHgD85V@
threads = 1
modules_prefix = 
execute_custom_queries = 1
analyze_connections = 1
engine_uptime = 1
query_stats = 1
check_tablespaces = 1
fragmentation_ratio = 1
cache_stats = 1
thick_mode = 1
multitenant = 0
agent_per_pdb = 0
client_path = /usr/lib/oracle/21/client64/lib/
entities_list = /tmp/entities_oracle.txt
enable_entities_interval = 1
entities_interval = 48000

[THRESHOLDS]
^tablespace = min_warning 10|max_warning 20|min_critical 0|max_critical 10
fragmentation = min_warning 10

```

<p class="callout info">La instalacion estandar de instant client 19.8 se hace en la ruta /usr/lib/oracle/19.8/client64/lib </p>

**Listado de bases de datos objetivo (--target\_databases)**

El contenido del fichero será un listado de bases de datos objetivo, separando cada base de datos por comas o por líneas. El formato para una base de datos podrá ser cualquiera de los siguientes:

```
ip/sid
ip:puerto/sid 
ip:puerto/service_name

```

En caso de no indicarse el puerto, se usará el puerto 1521 TCP por defecto para la conexión al objetivo.

<span style="text-decoration: underline;">Ejemplo</span>

```
172.17.0.3:1521/FREEPDB1

```

Cada línea del archivo debe representar una base de datos de destino independiente utilizando uno de estos formatos. Este archivo se utiliza para especificar las bases de datos que el complemento debe supervisar.

También puede especificar una cadena DNS directamente.

Ejemplo server standalone:

```
dsn=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=sales1-srv)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))       

```

Ejemplo failover con dos servers

```
dsn=(DESCRIPTION=(FAILOVER=ON)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=sales1-srv)(PORT=1521) (CONNECT_TIMEOUT=5)(RETRY_COUNT=2))(ADDRESS=(PROTOCOL=TCP)(HOST=sales2-srv)(PORT=1521)(CONNECT_TIMEOUT=5)(RETRY_COUNT=2)))(CONNECT_DATA=(SID=ORCL)))

```

**Listado de agentes objetivo (--target\_agents)**

El contenido del fichero será un listado de bases de nombres de agentes, separando cada agente por comas o por líneas. Estos nombres de agentes se usarán para volcar la información de cada base de datos objetivo en el nombre de agente indicado correspondiente, en lugar de dejar que el plugin genere los nombres de agentes de forma automática.

La posición de cada nombre de agente en el listado debe coincidir con la posición de la base de datos objetivo en su propio listado, es decir, el nombre para la primera base de datos objetivo será el primer nombre de este listado, teniendo en cuenta que las líneas en blanco son ignoradas.

<span style="text-decoration: underline;">Ejemplo</span>

```
agente1,,agente3
agente4
agente5,agente6,agente7,,agente9

```

**Consultas personalizadas (`--custom_queries`)**

Se debe introducir un módulo por cada consulta personalizada que se pretenda monitorizar. Los módulos deben seguir una estructura, que es la siguiente:

```
check_begin      --> Etiqueta de apertura del módulo
name             --> Nombre del módulo
description      --> Descripción del módulo.
operation        --> Tipo de operación: value (devuelve un valor simple) | full (devuelve todas las filas como string).
datatype         --> Tipo de módulo: generic_data | generic_data_string | generic_proc.
min_warning      --> Configuración del umbral mínimo de warning
max_warning      --> Configuración del umbral máximo de warning
str_warning      --> Configuración de string de warning
warning_inverse  --> Activar el intervalo inverso con 1 para umbral de warning
min_critical     --> Configuración del umbral mínimo de critical
max_critical     --> Configuración del umbral máximo de critical
str_critical     --> Configuración de string de critical
critical_inverse --> Activar el intervalo inverso con 1 para umbral de crítico
module_interval  --> Este intervalo se calcula como un multiplicador del intervalo del agente.
crontab          --> Expresión cron de 5 campos (minuto, hora, día del mes, mes, día de la semana).
                    Solo se ejecuta la query cuando la fecha/hora actual coincide con la expresión.
                    Si no se especifica, la query se ejecuta en cada intervalo.
                    Formato: crontab <minuto> <hora> <día_mes> <mes> <día_semana>
                    Ejemplos:
                      * * * * *      → cada minuto (siempre)
                      0 9 * * 1-5    → de lunes a viernes a las 09:00
                      */15 * * * *   → cada 15 minutos
                      * 12-15 * * 1  → los lunes entre las 12:00 y 15:59
target           --> Consulta personalizada (solo se permiten SELECT).
target_scope     --> Scope de ejecución: cdb, pdb o todos (default: cdb).
                    - cdb: solo en la instancia de CDB
                    - pdb: solo en cada PDB descubierta (requiere multitenant activado)
                    - all: en todos (CDB y PDBs)
target_databases --> Agentes de bases de datos en los que se creará el módulo.
                    Si se quiere aplicar a todos los elementos, se puede especificar: All o no especificarse directamente.
check_end        --> Etiqueta de cierre del módulo

```

**Módulo básico (sin crontab, se ejecuta siempre)**

```
check_begin
name Select 1
description Number of invalid objects
operation value
datatype generic_data
min_warning 5
target SELECT 1 FROM dual
target_databases all
check_end

```

**Módulo contra una base de datos concreta**

```
check_begin
name NumeroConexiones
description Number of connections
operation value
datatype generic_data
min_warning 5
target SELECT COUNT(*) AS NumeroConexiones FROM v$session;
target_databases pandora
check_end

```

**Módulo con operación full**

```
check_begin
name NumeroRegistros.files_table
description Invalid objects (detail)
operation full
datatype generic_data
target SELECT COUNT(*) AS NumeroRegistros FROM files;
target_databases pandora
check_end

```

**Módulo con crontab (solo se ejecuta de lunes a viernes a las 09:00)**

```
check_begin
name informe_diario
description Daily report query
operation value
datatype generic_data_string
target SELECT COUNT(*) AS registros FROM log_diario WHERE fecha = TRUNC(SYSDATE);
target_databases all
crontab 0 9 * * 1-5
check_end

```

**Módulo con crontab (solo en horario laboral de 8:00 a 18:00)**

```
check_begin
name usuarios_activos_oficina
description Active users during office hours
operation value
datatype generic_data
target SELECT COUNT(*) FROM usuarios WHERE activo = 'S';
target_databases all
crontab * 8-17 * * 1-5
check_end

```

**Módulo con crontab cada 30 minutos y scope PDB**

```
check_begin
name sesiones_pdb
description Active sessions per PDB
operation value
datatype generic_data
target SELECT COUNT(*) FROM v$session WHERE status = 'ACTIVE';
target_databases all
target_scope pdb
crontab */30 * * * *
check_end

```

**Funcionamiento del filtro por crontab**

1. Al inicio de cada ejecución del plugin, se evalúan todas las custom queries.
2. Las queries que **no tienen** el campo `crontab` se ejecutan siempre (comportamiento clásico, retrocompatible).
3. Las queries que **sí tienen** `crontab` solo se incluyen si la fecha/hora actual coincide con la expresión cron.
4. Las queries descartadas por crontab no generan conexiones a base de datos ni consultas SQL.
5. El filtro se aplica una sola vez antes de lanzar los hilos de monitorización.

**Formato de la expresión cron**

La expresión sigue el formato estándar de 5 campos separados por espacios:

<table id="bkmrk-campo-valores-permit"><thead><tr><th>Campo</th><th>Valores permitidos</th></tr></thead><tbody><tr><td>Minuto</td><td>0-59</td></tr><tr><td>Hora</td><td>0-23</td></tr><tr><td>Día del mes</td><td>1-31</td></tr><tr><td>Mes</td><td>1-12</td></tr><tr><td>Día semana</td><td>0-7 (0 y 7 = domingo, 1 = lunes)</td></tr></tbody></table>

Cada campo admite los siguientes formatos:

- `*` — cualquier valor
- `N` — valor exacto (ej: `5`)
- `N-M` — rango (ej: `9-17`)
- `*/N` — cada N unidades (ej: `*/15` = cada 15 minutos)
- `N-M/N` — rango con paso (ej: `0-30/10` = 0, 10, 20, 30)
- `A,B,C` — lista de valores separados por comas

---

# Ejecución manual

El formato de la ejecución del plugin es el siguiente:

```shell
./pandora_oracle \
--conf < ruta al fichero de configuración > \
--target_databases < ruta al fichero de configuración que contiene las bases de datos objetivo > \
[ --target_agents < ruta al fichero de configuración de agentes > ] \
[ --custom_queries < ruta al fichero de configuración que contiene las consultas personalizas > ]
```

Por ejemplo:

```shell
./pandora_oracle \
--conf /usr/share/pandora_server/util/plugin/oracle.conf \
--target_databases /usr/share/pandora_server/util/plugin/targets.conf \
--target_agents /usr/share/pandora_server/util/plugin/target_agents.conf \
--custom_queries /usr/share/pandora_server/util/plugin/custom_queries.conf
```

# Discovery

Este plugin puede integrarse con el *Discovery* de Pandora FMS.

Para ello se debe cargar el paquete ".disco" que puede descargar desde la librería de Pandora FMS:

[https://pandorafms.com/library/oracle-discovery/](https://pandorafms.com/library/oracle-discovery/)

[![image-1687944670019.png](https://pandorafms.com/guides/public/uploads/images/gallery/2023-06/scaled-1680-/image-1687944670019.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2023-06/image-1687944670019.png)

Una vez cargado, se podrán monitorizar entornos de Oracle creando tareas de *Discovery* desde la sección *Management &gt; Discovery &gt; Applications.*

[![image-1687944766442.png](https://pandorafms.com/guides/public/uploads/images/gallery/2023-06/scaled-1680-/image-1687944766442.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2023-06/image-1687944766442.png)

Para cada tarea se solicitarán los siguientes datos mínimos:

- **Oracle target string**: Lista de objetivos Oracle a monitorizar por la tarea. Será una lista separada por comas o por líneas. Cada base de datos objetivo se podrá definir con el formato IP:PUERTO/SID o IP/SID.   
      
    También puede especificar una cadena DNS directamente.
    
    Ejemplo server standalone:
    
    ```
    dsn=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=sales1-srv)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))       
    ```
    
    Ejemplo failover con dos servers :
    
    ```
    dsn=(DESCRIPTION=(FAILOVER=ON)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=sales1-srv)(PORT=1521) (CONNECT_TIMEOUT=5)(RETRY_COUNT=2))(ADDRESS=(PROTOCOL=TCP)(HOST=sales2-srv)(PORT=1521)(CONNECT_TIMEOUT=5)(RETRY_COUNT=2)))(CONNECT_DATA=(SID=ORCL)))
    ```
- **User**: Usuario de conexión a las bases de datos objetivo.
- **Password**: Contraseña del usuario indicado.
- **Thick mode**: Para habilitar el "thick mode". Solo es necesario este tipo de conexion en bases de datos oracle con versión 11 o anteriores
- **Client path:** Ruta del cliente de oracle. Solo es necesario en caso de habilitar el "thick mode". La instalacion estandar de instant client 19.8 se hace en la ruta /usr/lib/oracle/19.8/client64/lib.
- **Multitenant: Discover and monitor PDBs within a CDB**: Solo aplicable a arquitecturas multitenant de Oracle (CDB/PDB); en entornos que no sean CBD, simplemente emitirá un warning.
- **Create agent per PDB:** Solo aplicable a arquitecturas multitenant (CDB/PDB) de Oracle. Si está marcada, se creará un agente por cada PDB en la instancia; de lo contrario, los módulos de cada PDB se incluirán en el agente principal de la instancia.
- **Enable entities file re-scan interval:** Activar intervalo de generacion de fichero de entidades, para monitorización Multitenant.
- **Re-scan entities file interval:** Intervalo de generación de fichero de entidades.

[![Captura desde 2026-07-01 13-26-54.png](https://pandorafms.com/guides/public/uploads/images/gallery/2026-07/scaled-1680-/captura-desde-2026-07-01-13-26-54.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2026-07/captura-desde-2026-07-01-13-26-54.png)

También se podrá ajustar la configuración de la tarea para personalizar la monitorización deseada:

- **Max threads**: Para optimizar el tiempo de ejecución, se podrán configurar múltiples hilos para monitorizar los agentes de la tarea. Hay que tener en cuenta que configurar múltiples hilos puede aumentar el uso de CPU de la tarea.
- **Target agent**: Lista de agentes objetivo para los objetivos Oracle a monitorizar. Es decir, los nombres con los que se generarán los agentes de cada objetivo definido en la tarea. Será una lista separada por comas o por líneas. La posición de los nombres en la lista deberá coincidir con la posición de los objetivos Oracle en su lista, es decir, el primer nombre se usará para el primer objetivo y así sucesivamente. Si la lista se separa por líneas, las líneas en blanco se ignorarán. Si no se especifica un nombre de agente para un objetivo se usará su IP o FQDN como nombre del agente.
- **Custom module prefix**: Texto incluido como prefijo para los todos los nombres de módulos generados. Es útil para localizar los módulos generados por la tarea o distinguirlos de otros.
- **Check engine uptime**: Si se activa monitorizará el uptime de los objetivos.
- **Retrieve query statistics**: Si se activa monitorizará las estadísticas de consultas.
- **Analyze connections**: Si se activa monitorizará las conexiones.
- **Calculate fragmentation ratio**: Si se activa monitorizará el ratio de fragmentación.
- **Monitor tablespaces:** Si se activa monitorizará los tablespaces.
- **Retrieve cache statistics:** Si se activa monitorizará las estadísticas de caché.

[![Captura desde 2026-01-14 18-31-20.png](https://pandorafms.com/guides/public/uploads/images/gallery/2026-01/scaled-1680-/captura-desde-2026-01-14-18-31-20.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2026-01/captura-desde-2026-01-14-18-31-20.png)

- **Execute custom queries**: Si se activa permitirá ejecutar consultas personalizadas a cada objetivo Oracle.
- **Custom queries**: Bloque de configuración para definir las consultas personalizadas que se ejecutarán. Cada consulta generará un nuevo módulo para cada agente de la tarea.
- **Define tresholds:** Aqui se pueden definir los umbrales para los módulos generados (excepto los generados por consultas personalizadas). El formato es una definición de umbrales por línea y es el siguiente:  
      
    ```
    < Patron regexp de coincidencia con nombre de módulos > = < Umbrales deseados en el modulo, separados por "|" >
    ```
    
    Por ejemplo:  
      
    ```
    ^tablespace = min_warning 10|max_warning 20|min_critical 0|max_critical 10
    ```

[![Captura desde 2026-01-14 18-27-30.png](https://pandorafms.com/guides/public/uploads/images/gallery/2026-01/scaled-1680-/O8Ucaptura-desde-2026-01-14-18-27-30.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2026-01/O8Ucaptura-desde-2026-01-14-18-27-30.png)

Las tareas que se completen exitosamente dispondrán de un sumario de ejecución con la siguiente información:

- **Total agents**: Total de agentes generados por la tarea.
- **Targets up**: Total de objetivos a los que ha sido posible conectar.
- **Targets down**: Total de objetivos a los que no ha sido posible conectar.

[![image-1684831085871.png](https://pandorafms.com/guides/public/uploads/images/gallery/2023-05/scaled-1680-/image-1684831085871.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2023-05/image-1684831085871.png)

  
Las tareas que no se completen exitosamente dispondrán de un sumario de ejecución registrando los errores producidos.

# Agentes y módulos generados por el plugin

El plugin creará un agente por cada base de datos objetivo. Ese agente contendrá los siguientes módulos

Si esta activado **engine\_uptime**:

<table border="1" id="bkmrk-restart_detection-pa"><tbody><tr><td>restart\\\_detection</td><td>\*\*Será 0 si se ha detectado un reinicio inesperado, y 1 de no ser este el caso.\*\* Cuando un servidor se reinicia inesperadamente, puede haber una interrupción en el acceso a la base de datos y potencialmente se pueden perder transacciones o datos no guardados correctamente.</td></tr></tbody></table>

Si esta activado **query\_stats**:

<table border="1" id="bkmrk-queries-monitorizar-"><tbody><tr><td>queries: select</td><td>\*\*Número de consultas SELECT.\*\* Las consultas SELECT se utilizan para recuperar datos de la base de datos. Monitorizar las consultas SELECT te permite evaluar la eficiencia de las consultas y la optimización de los índices. Al identificar consultas SELECT lentas o ineficientes, puedes tomar medidas para mejorar su rendimiento, como añadir índices adecuados, optimizar las consultas o ajustar la configuración del servidor.</td></tr><tr><td>queriers: update</td><td>\*\*Número de consultas UPDATE.\*\* Las consultas UPDATE se utilizan para modificar los datos existentes en la base de datos. Monitorizar las consultas UPDATE es importante para evaluar la frecuencia y la eficiencia de las actualizaciones de datos. Puedes identificar consultas UPDATE que afectan a un gran número de filas o que tienen un impacto significativo en el rendimiento del servidor. Esto te permite optimizar las consultas, revisar la estructura de las tablas o tomar medidas para reducir la carga generada por las actualizaciones.</td></tr><tr><td>queries: delete </td><td>\*\*Número de consultas DELETE.\*\* Las consultas DELETE se utilizan para eliminar datos de la base de datos. Monitorizar las consultas DELETE es útil para evaluar la frecuencia y la eficiencia de las eliminaciones de datos. Puedes identificar consultas DELETE que afectan a un gran número de filas o que tienen un impacto significativo en el rendimiento del servidor. Esto te permite optimizar las consultas, revisar la estructura de las tablas o tomar medidas para reducir la carga generada por las eliminaciones.</td></tr><tr><td>queries: insert</td><td>\*\*Número de consultas INSERT.\*\* Las consultas INSERT se utilizan para insertar nuevos datos en la base de datos. Monitorizar las consultas INSERT te permite evaluar la frecuencia y la eficiencia de las inserciones de datos. Puedes identificar consultas INSERT que están generando una alta carga en el servidor o que podrían estar causando problemas de rendimiento. Esto te permite optimizar las consultas, revisar la estructura de las tablas o considerar estrategias de inserción diferida para mejorar el rendimiento en entornos de alta concurrencia.</td></tr></tbody></table>

Si esta activado **analyze\_connections**:

<table border="1" id="bkmrk-current-connections-" style="width: 809px;"><tbody><tr><td style="width: 78px;">session usage</td><td style="width: 731px;">\*\*Número de conexiones actuales respecto al total de conexiones máximas.\*\* La monitorización del uso de sesiones en SQL Server es importante para optimizar el rendimiento, identificar problemas de bloqueo, mejorar la seguridad y auditoría, y planificar eficientemente los recursos del servidor.</td></tr></tbody></table>

Si esta activado **cache\_stats**:

<table border="1" id="bkmrk-query-cache-enabled-" style="height: 87px; width: 813px;"><tbody><tr style="height: 29px;"><td style="height: 29px; width: 87.9861px;">cache hit ratio (dictionary)</td><td style="height: 29px; width: 725px;">\*\*El ratio de cache del diccionario.\*\* El "Cache Hit Ratio (Dictionary)" se refiere a la proporción de solicitudes de acceso a los datos del diccionario de Oracle que se resuelven utilizando datos almacenados en la caché en comparación con las solicitudes que requieren acceso al disco. El diccionario de Oracle contiene información sobre la estructura de la base de datos, los objetos, los metadatos y otros detalles importantes. Un alto ratio de aciertos (hit ratio) indica que la mayoría de las solicitudes de acceso al diccionario se resuelven utilizando datos en la caché, lo que mejora el rendimiento del sistema al evitar acceso al disco.</td></tr><tr style="height: 29px;"><td style="height: 29px; width: 87.9861px;">cache hit ratio (library)</td><td style="height: 29px; width: 725px;">\*\*El ratio de cache de la librería.\*\* El "Cache Hit Ratio (Library)" se refiere a la proporción de solicitudes de acceso a los procedimientos, funciones y paquetes de Oracle almacenados en la caché de la biblioteca compartida. La caché de la biblioteca compartida almacena el código compilado de los programas y consultas SQL ejecutadas con frecuencia. Un alto ratio de aciertos indica que la mayoría de las solicitudes se resuelven utilizando código almacenado en la caché, lo que evita la necesidad de recompilar y mejora el rendimiento al reducir el tiempo de ejecución.</td></tr><tr style="height: 29px;"><td style="height: 29px; width: 87.9861px;">cache hit ratio (buffer)</td><td style="height: 29px; width: 725px;">\*\*El ratio de cache del buffer.\*\* El "Cache Hit Ratio (Buffer)" se refiere a la proporción de solicitudes de acceso a los bloques de datos almacenados en el caché del buffer de Oracle que se resuelven utilizando datos en la caché en comparación con las solicitudes que requieren acceso al disco. El caché del buffer almacena los bloques de datos que se leen o modifican con frecuencia. Un alto ratio de aciertos indica que la mayoría de las solicitudes de acceso a los datos se resuelven utilizando bloques almacenados en la caché del buffer, lo que reduce la necesidad de acceder al disco y mejora el rendimiento general del sistema.</td></tr></tbody></table>

Si esta activado **check\_tablespaces**:

<table border="1" id="bkmrk-%C2%A0-%C2%A0-%C2%A0-%C2%A0" style="border-collapse: collapse; width: 100%; height: 58px;"><tbody><tr style="height: 29px;"><td style="width: 50%; height: 29px;">tablespace &lt;nombre tabla&gt; free</td><td style="width: 50%; height: 29px;">\*\*Porcentage de uso en GB.\*\* Es importante monitorizar el "tablespace free" en Oracle para tener un seguimiento de la cantidad de espacio disponible en los tablespaces. Esto permite gestionar de manera proactiva el crecimiento del espacio de almacenamiento y evitar problemas de espacio insuficiente que puedan afectar la funcionalidad de la base de datos. Al monitorear el tablespace free, se pueden tomar acciones como agregar más espacio de almacenamiento o realizar ajustes en las configuraciones para garantizar que haya suficiente espacio disponible.</td></tr><tr style="height: 29px;"><td style="width: 50%; height: 29px;">tablespace &lt;nombre tabla&gt; status</td><td style="width: 50%; height: 29px;">\*\*Estado de la tabla, 1 si esta online y 0 de no ser el caso.\*\* La monitorización del "tablespace status" en Oracle es fundamental para evaluar la salud y el estado de los tablespaces. Proporciona información sobre la integridad estructural de los tablespaces, incluyendo la existencia de errores o problemas de corrupción. Al monitorear el tablespace status, se pueden detectar problemas tempranamente y tomar medidas para solucionarlos, como restaurar desde backups o realizar tareas de recuperación. Esto garantiza la continuidad y la estabilidad de la base de datos, evitando la pérdida de datos o el deterioro del rendimiento debido a problemas en los tablespaces.</td></tr></tbody></table>

Si esta activado **fragmentation\_ratio**:

<table border="1" id="bkmrk-fragmentation-ratio-" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 50%;">fragmentation ratio</td><td style="width: 50%;">\*\*El ratio de fragmentación.\*\* El Fragmentation Ratio en Oracle Database es un valor que indica la cantidad de espacio desperdiciado debido a la fragmentación en una estructura de datos. Un Fragmentation Ratio alto indica una mayor fragmentación y un mayor desperdicio de espacio, lo que puede afectar el rendimiento del sistema.</td></tr></tbody></table>

El plugin también creará un **módulo por cada consulta personalizada** definida en el fichero de configuración.

---

## Monitorización Multitenant (CDB/PDB)

Si está activado **multitenant** (1 — habilitado, 0 — deshabilitado; por defecto: 0), el plugin descubre las Pluggable Databases (PDBs) dentro de la Container Database (CDB) y recopila las mismas métricas de rendimiento para cada PDB (uptime, query stats, cache hit ratio, tablespaces, conexiones, fragmentación). Solo aplica a arquitecturas Oracle multitenant (CDB/PDB); en entornos non-CDB simplemente se emitirá un warning inofensivo.

El comportamiento depende del token **agent\_per\_pdb**:

### agent\_per\_pdb = 0 desactivado

Todos los módulos de las PDB se agregan al agente principal de la instancia CDB. Los nombres de módulo tendrán el prefijo `PDB <nombre>`, por ejemplo:

<table border="1" id="bkmrk-pdb-app1-restart_det"><tbody><tr><td>PDB APP1 restart\_detection</td><td>Detección de reinicio para la PDB APP1.</td></tr><tr><td>PDB APP1 queries: select</td><td>Consultas SELECT en la PDB APP1.</td></tr><tr><td>PDB APP1 cache hit ratio (buffer)</td><td>Ratio de cache del buffer en la PDB APP1.</td></tr><tr><td>PDB APP1 tablespace USERS free</td><td>Espacio libre del tablespace USERS en la PDB APP1.</td></tr></tbody></table>

### agent\_per\_pdb activado

El plugin crea un **agente independiente por cada PDB** descubierta, con nombre `<agente_principal> - PDB <nombre>` y dirección `host:port/pdb_name`. Cada agente PDB contiene:

- Un módulo de conexión (`Oracle PDB <nombre> connection`)
- Todos los módulos de estadísticas aplicables (uptime, queries, cache, tablespaces, conexiones, fragmentación), igual que el agente principal del CDB
- Los thresholds personalizados se aplican también a los módulos de cada agente PDB

Las PDBs que no estén en modo `READ WRITE` se omiten con un warning.

**Nota:** `agent_per_pdb` solo tiene efecto si el token `multitenant esta activado`.