

# Establecer y anular eventos de diagnóstico del sistema
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents"></a>

Para establecer y anular eventos de diagnóstico a nivel de sesión, puede utilizar la instrucción de Oracle SQL `ALTER SESSION SET EVENTS`. Sin embargo, para establecer eventos a nivel del sistema no puede utilizar Oracle SQL. En vez de eso, utilice los procedimientos de evento de sistema que hay en el paquete `rdsadmin.rdsadmin_util`. Los procedimientos de evento de sistema están disponibles en las siguientes versiones del motor:
+ Todas las versiones de Oracle Database 21c
+ 19.0.0.0.ru-2020-10.rur-2020-10.r1 Oracle Database 19c y versiones posteriores

  Para obtener más información, consulte la sección sobre la [versión 19.0.0.0.ru-2020-10.rur-2020-10.r1](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes/oracle-version-19-0.html#oracle-version-RU-RUR.19.0.0.0.ru-2020-10.rur-2020-10.r1) en las *notas de la versión de Amazon RDS para Oracle*.

**importante**  
Internamente, con el paquete `rdsadmin.rdsadmin_util` se establecen eventos mediante el uso de la instrucción `ALTER SYSTEM SET EVENTS`. Esta instrucción `ALTER SYSTEM` no figura en la Documentación de la base de datos de Oracle. Algunos eventos de diagnóstico del sistema pueden generar grandes cantidades de información de seguimiento, provocar contención o afectar la disponibilidad de la base de datos. Se recomienda probar eventos de diagnóstico concretos en la base de datos que no utilice para producir y que solo establezca eventos en la base de datos de producción sirviéndose de la orientación de Oracle Support.

## Hacer una lista de los eventos de diagnóstico del sistema permitidos
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.listing"></a>

Para hacer una lista de los eventos de sistema que puede establecer, utilice el procedimiento de Amazon RDS `rdsadmin.rdsadmin_util.list_allowed_system_events`. Este procedimiento no acepta parámetros.

En el ejemplo siguiente se hace una lista de todos los eventos de sistema que puede establecer.

```
SET SERVEROUTPUT ON
EXEC rdsadmin.rdsadmin_util.list_allowed_system_events;
```

En la siguiente salida de ejemplo se muestran los números de eventos y sus descripciones. Utilice el procedimiento `set_system_event` de Amazon RDS para establecer estos eventos y el procedimiento `unset_system_event` de Amazon RDS para anularlos.

```
604   - error occurred at recursive SQL level
942   - table or view does not exist
1401  - inserted value too large for column
1403  - no data found
1410  - invalid ROWID
1422  - exact fetch returns more than requested number of rows
1426  - numeric overflow
1427  - single-row subquery returns more than one row
1476  - divisor is equal to zero
1483  - invalid length for DATE or NUMBER bind variable
1489  - result of string concatenation is too long
1652  - unable to extend temp segment by  in tablespace
1858  - a non-numeric character was found where a numeric was expected
4031  - unable to allocate  bytes of shared memory ("","","","")
6502  - PL/SQL: numeric or value error
10027 - Specify Deadlock Trace Information to be Dumped
10046 - enable SQL statement timing
10053 - CBO Enable optimizer trace
10173 - Dynamic Sampling time-out error
10442 - enable trace of kst for ORA-01555 diagnostics
12008 - error in materialized view refresh path
12012 - error on auto execute of job
12504 - TNS:listener was not given the SERVICE_NAME in CONNECT_DATA
14400 - inserted partition key does not map to any partition
31693 - Table data object  failed to load/unload and is being skipped due to error:
```

**nota**  
La lista de eventos de sistema permitidos puede cambiar con el tiempo. Para confirmar que tiene la lista más reciente de eventos aptos, use `rdsadmin.rdsadmin_util.list_allowed_system_events`.

## Establecimiento de eventos de diagnóstico del sistema
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.setting"></a>

Para establecer un evento de sistema, utilice el procedimiento de Amazon RDS `rdsadmin.rdsadmin_util.set_system_event`. Solo puede establecer eventos que figuren en la salida de `rdsadmin.rdsadmin_util.list_allowed_system_events`. El procedimiento `set_system_event` acepta los siguientes parámetros.


****  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `p_event`  |  número  |  —  |  Sí  |  El número de evento de sistema. El valor debe ser uno de los números de evento que se informaron mediante `list_allowed_system_events`.  | 
|  `p_level`  |  número  |  —  |  Sí  |  El nivel del evento. Consulte la Documentación de la base de datos de Oracle u Oracle Support para obtener las descripciones de diferentes valores de niveles.  | 

Con el procedimiento `set_system_event` se construyen y se ejecutan las instrucciones `ALTER SYSTEM SET EVENTS` requeridas de acuerdo con los siguientes principios:
+ El tipo de evento (`context` o `errorstack`) se determina automáticamente.
+ Con una instrucción `ALTER SYSTEM SET EVENTS 'event LEVEL event_level'` se establecen los eventos de contexto. Esta notación es equivalente a `ALTER SYSTEM SET EVENTS 'event TRACE NAME CONTEXT FOREVER, LEVEL event_level'`.
+ Con una instrucción `ALTER SYSTEM SET EVENTS 'event ERRORSTACK (event_level)'` se establecen los eventos de pila de errores. Esta notación es equivalente a `ALTER SYSTEM SET EVENTS 'event TRACE NAME ERRORSTACK LEVEL event_level'`.

En el ejemplo siguiente se establece el evento 942 a nivel 3 y el evento 10442 a nivel 10. Se incluye la salida de muestra.

```
SQL> SET SERVEROUTPUT ON
SQL> EXEC rdsadmin.rdsadmin_util.set_system_event(942,3);
Setting system event 942 with: alter system set events '942 errorstack (3)'

PL/SQL procedure successfully completed.

SQL> EXEC rdsadmin.rdsadmin_util.set_system_event(10442,10);
Setting system event 10442 with: alter system set events '10442 level 10'

PL/SQL procedure successfully completed.
```

## Hacer una lista de los eventos de diagnóstico del sistema establecidos
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.listing-set"></a>

Para hacer una lista de los eventos del sistema establecidos, utilice el procedimiento de Amazon RDS `rdsadmin.rdsadmin_util.list_set_system_events`. Con este procedimiento se informan solo los eventos establecidos a nivel del sistema por `set_system_event`.

En el ejemplo siguiente se hace una lista de los eventos de sistema activos.

```
SET SERVEROUTPUT ON
EXEC rdsadmin.rdsadmin_util.list_set_system_events;
```

En la siguiente salida de ejemplo se muestran la lista de eventos, el tipo de evento, el nivel a que los eventos están configurados actualmente y la hora a que se estableció el evento.

```
942 errorstack (3) - set at 2020-11-03 11:42:27
10442 level 10 - set at 2020-11-03 11:42:41

PL/SQL procedure successfully completed.
```

## Anular eventos de diagnóstico del sistema
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.unsetting"></a>

Para anular un evento de sistema, utilice el procedimiento de Amazon RDS `rdsadmin.rdsadmin_util.unset_system_event`. Solo puede anular eventos que figuren en la salida de `rdsadmin.rdsadmin_util.list_allowed_system_events`. El procedimiento `unset_system_event` acepta el siguiente parámetro.


****  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `p_event`  |  número  |  —  |  Sí  |  El número de evento de sistema. El valor debe ser uno de los números de evento que se informaron mediante `list_allowed_system_events`.  | 

En el ejemplo siguiente se anulan los eventos 942 y 10442. Se incluye la salida de muestra.

```
SQL> SET SERVEROUTPUT ON
SQL> EXEC rdsadmin.rdsadmin_util.unset_system_event(942);
Unsetting system event 942 with: alter system set events '942 off'

PL/SQL procedure successfully completed.

SQL> EXEC rdsadmin.rdsadmin_util.unset_system_event(10442);
Unsetting system event 10442 with: alter system set events '10442 off'

PL/SQL procedure successfully completed.
```