

# Realización de tareas comunes del sistema para instancias de base de datos de Oracle
<a name="Appendix.Oracle.CommonDBATasks.System"></a>

A continuación, puede encontrar cómo realizar ciertas tareas comunes de DBA relacionadas con el sistema en las instancias de base de datos de Amazon RDS que ejecutan Oracle. Para ofrecer una experiencia de servicio administrado, Amazon RDS no proporciona acceso mediante shell a las instancias de bases de datos y restringe el acceso a ciertos procedimientos y tablas del sistema que requieren privilegios avanzados. 

**Topics**
+ [Desconexión de una sesión](Appendix.Oracle.CommonDBATasks.DisconnectingSession.md)
+ [Terminación de una sesión](Appendix.Oracle.CommonDBATasks.KillingSession.md)
+ [Cancelación de una instrucción SQL en una sesión](Appendix.Oracle.CommonDBATasks.CancellingSQL.md)
+ [Activación y desactivación de sesiones restringidas](Appendix.Oracle.CommonDBATasks.RestrictedSession.md)
+ [Vaciado del grupo compartido](Appendix.Oracle.CommonDBATasks.FlushingSharedPool.md)
+ [Concesión de privilegios SELECT o EXECUTE para objetos SYS](Appendix.Oracle.CommonDBATasks.TransferPrivileges.md)
+ [Revocación de privilegios SELECT o EXECUTE para objetos SYS](Appendix.Oracle.CommonDBATasks.RevokePrivileges.md)
+ [Administración de vistas RDS\$1X\$1 para instancias de bases de datos de Oracle](Appendix.Oracle.CommonDBATasks.X-dollar.md)
+ [Concesión de privilegios a usuarios no maestros](Appendix.Oracle.CommonDBATasks.PermissionsNonMasters.md)
+ [Creación de funciones personalizadas para comprobar contraseñas](Appendix.Oracle.CommonDBATasks.CustomPassword.md)
+ [Configuración de un servidor DNS personalizado](#Appendix.Oracle.CommonDBATasks.CustomDNS)
+ [Establecer y anular eventos de diagnóstico del sistema](Appendix.Oracle.CommonDBATasks.SystemEvents.md)

# Desconexión de una sesión
<a name="Appendix.Oracle.CommonDBATasks.DisconnectingSession"></a>

Utilice el procedimiento de Amazon RDS para desconectar la sesión actual mediante la finalización del proceso del servidor dedicad `rdsadmin.rdsadmin_util.disconnect`. El procedimiento `disconnect` tiene los siguientes parámetros. 


****  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `sid`  |  número  |  —  |  Sí  |  El identificador de sesión.  | 
|  `serial`  |  número  |  —  |  Sí  |  El número de serie de la sesión.  | 
|  `method`  |  varchar  |  'IMMEDIATE'  |  No  |  Los valores válidos son `'IMMEDIATE'` o `'POST_TRANSACTION'`.  | 

En el siguiente ejemplo se desconecta una sesión.

```
begin
    rdsadmin.rdsadmin_util.disconnect(
        sid    => sid, 
        serial => serial_number);
end;
/
```

Para obtener el identificador de la sesión y el número serie de la sesión, consulte la vista `V$SESSION`. En el siguiente ejemplo se obtienen todas las sesiones del usuario `AWSUSER`.

```
SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE USERNAME = 'AWSUSER';
```

La base de datos debe estar abierta para utilizar este método. Para obtener más información acerca de cómo desconectar una sesión, consulte [ALTER SYSTEM](http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_2014.htm#SQLRF53166) en la documentación de Oracle. 

# Terminación de una sesión
<a name="Appendix.Oracle.CommonDBATasks.KillingSession"></a>

Para terminar una sesión, utilice el procedimiento de Amazon RDS `rdsadmin.rdsadmin_util.kill`. El procedimiento `kill` tiene los siguientes parámetros.


****  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `sid`  |  número  |  —  |  Sí  |  El identificador de sesión.  | 
|  `serial`  |  número  |  —  |  Sí  |  El número de serie de la sesión.  | 
|  `method`  |  varchar  |  null  |  No  |  Los valores válidos son `'IMMEDIATE'` o `'PROCESS'`. Si especifica `IMMEDIATE`, tiene el mismo efecto que ejecutar la siguiente instrucción: <pre>ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE</pre> Si especifica `PROCESS`, termina los procesos asociados a una sesión. Solo debe especificar `PROCESS` si no consigue terminar la sesión mediante el uso de `IMMEDIATE`.  | 

Para obtener el identificador de la sesión y el número serie de la sesión, consulte la vista `V$SESSION`. En el siguiente ejemplo se obtienen todas las sesiones del usuario *AWSUSER*..

```
SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE USERNAME = 'AWSUSER';
```

En el ejemplo siguiente se termina una sesión.

```
BEGIN
    rdsadmin.rdsadmin_util.kill(
        sid    => sid, 
        serial => serial_number,
        method => 'IMMEDIATE');
END;
/
```

En el siguiente ejemplo, se terminan los procesos asociados a una sesión.

```
BEGIN
    rdsadmin.rdsadmin_util.kill(
        sid    => sid, 
        serial => serial_number,
        method => 'PROCESS');
END;
/
```

# Cancelación de una instrucción SQL en una sesión
<a name="Appendix.Oracle.CommonDBATasks.CancellingSQL"></a>

Utilice el procedimiento de Amazon RDS para cancelar una instrucción SQL en una sesió `rdsadmin.rdsadmin_util.cancel`.

**nota**  
Este procedimiento se admite para Oracle Database 19c (19.0.0) y todas las versiones principales y secundarias posteriores de RDS for Oracle.

El procedimiento `cancel` tiene los siguientes parámetros. 


****  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `sid`  |  número  |  —  |  Sí  |  El identificador de sesión.  | 
|  `serial`  |  número  |  —  |  Sí  |  El número de serie de la sesión.  | 
|  `sql_id`  |  varchar2  |  null  |  No  |  El identificador SQL de la instrucción SQL.   | 

En el siguiente ejemplo se cancela una instrucción SQL en una sesión.

```
begin
    rdsadmin.rdsadmin_util.cancel(
        sid    => sid, 
        serial => serial_number,
        sql_id => sql_id);
end;
/
```

Para obtener el identificador de la sesión, el número de serie de la sesión y el identificador SQL de una instrucción SQL, consulte la vista `V$SESSION`. En el siguiente ejemplo se obtienen todas las sesiones e identificadores SQL del usuario `AWSUSER`.

```
select SID, SERIAL#, SQL_ID, STATUS from V$SESSION where USERNAME = 'AWSUSER';
```

# Activación y desactivación de sesiones restringidas
<a name="Appendix.Oracle.CommonDBATasks.RestrictedSession"></a>

Utilice el procedimiento de Amazon RDS para activar y desactivar las sesiones restringida `rdsadmin.rdsadmin_util.restricted_session`. El procedimiento `restricted_session` tiene los siguientes parámetros. 


****  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Sí | Descripción | 
| --- | --- | --- | --- | --- | 
|  `p_enable`  |  booleano  |  true  |  No  |  Establézcalo en `true` para activar las sesiones restringidas y en `false` para desactivarlas.   | 

En el siguiente ejemplo se muestra cómo activar y desactivar las sesiones restringidas. 

```
/* Verify that the database is currently unrestricted. */

SELECT LOGINS FROM V$INSTANCE;
 
LOGINS
-------
ALLOWED

/* Enable restricted sessions */

EXEC rdsadmin.rdsadmin_util.restricted_session(p_enable => true);
 

/* Verify that the database is now restricted. */

SELECT LOGINS FROM V$INSTANCE;
 
LOGINS
----------
RESTRICTED
 

/* Disable restricted sessions */

EXEC rdsadmin.rdsadmin_util.restricted_session(p_enable => false);
 

/* Verify that the database is now unrestricted again. */

SELECT LOGINS FROM V$INSTANCE;
 
LOGINS
-------
ALLOWED
```

# Vaciado del grupo compartido
<a name="Appendix.Oracle.CommonDBATasks.FlushingSharedPool"></a>

Utilice el procedimiento de Amazon RDS para vaciar el grupo compartid `rdsadmin.rdsadmin_util.flush_shared_pool`. El procedimiento `flush_shared_pool` no tiene ningún parámetro. 

En el siguiente ejemplo se vacía el grupo compartido.

```
EXEC rdsadmin.rdsadmin_util.flush_shared_pool;
```

## Vaciado de la caché de búfer
<a name="Appendix.Oracle.CommonDBATasks.FlushingBufferCache"></a>

Utilice el procedimiento de Amazon RDS para vaciar la caché del búfe `rdsadmin.rdsadmin_util.flush_buffer_cache`. El procedimiento `flush_buffer_cache` no tiene ningún parámetro. 

En el siguiente ejemplo se vacía la caché de búfer.

```
EXEC rdsadmin.rdsadmin_util.flush_buffer_cache;
```

## Vaciado de la caché flash inteligente de la base de datos
<a name="Appendix.Oracle.CommonDBATasks.flushing-shared-pool"></a>

Para vaciar la caché flash inteligente de la base de datos, utilice el procedimiento `rdsadmin.rdsadmin_util.flush_flash_cache` de Amazon RDS. El procedimiento `flush_flash_cache` no tiene ningún parámetro. En el siguiente ejemplo se vacía la caché flash inteligente de la base de datos.

```
EXEC rdsadmin.rdsadmin_util.flush_flash_cache;
```

Para obtener más información acerca del uso de la caché flash inteligente de la base de datos con RDS para Oracle, consulte [Almacenamiento de datos temporales en un almacén de instancias de RDS para Oracle](CHAP_Oracle.advanced-features.instance-store.md).

# Concesión de privilegios SELECT o EXECUTE para objetos SYS
<a name="Appendix.Oracle.CommonDBATasks.TransferPrivileges"></a>

Por lo general, para transferir privilegios se utilizan los roles, que pueden contener muchos objetos. Utilice el procedimiento de Amazon RDS para conceder privilegios a un solo objet `rdsadmin.rdsadmin_util.grant_sys_object`. El procedimiento solo concede los privilegios que ya haya obtenido el usuario maestro mediante un rol o una concesión directa. 

El procedimiento `grant_sys_object` tiene los siguientes parámetros. 

**importante**  
Para todos los valores de parámetros, utilice mayúsculas a no ser que haya creado el usuario con un identificador que distingue entre mayúsculas y minúsculas. Por ejemplo, si ejecuta `CREATE USER myuser` o `CREATE USER MYUSER`, el diccionario de datos almacena `MYUSER`. Sin embargo, si utiliza comillas dobles en `CREATE USER "MyUser"`, el diccionario de datos almacena `MyUser`.


****  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `p_obj_name`  |  varchar2  |  —  |  Sí  |  El nombre del objeto para el que se van a conceder privilegios. El objeto puede ser un directorio, una función, un paquete, un procedimiento, una secuencia, una tabla o una vista. Los nombres de los objetos deben escribirse exactamente como aparecen en `DBA_OBJECTS`. La mayoría de los objetos del sistema están definidos en mayúsculas, por lo que recomendamos que lo intente como primera opción.   | 
|  `p_grantee`  |  varchar2  |  —  |  Sí  |  El nombre del objeto al que se van a conceder privilegios. El objeto puede ser un esquema o un rol.   | 
|  `p_privilege`  |  varchar2  |  null  |  Sí  |  —  | 
|  `p_grant_option`  |  booleano  |  false  |  No  |  Establézcalo en `true` para usar la opción de concesión (WITH GRANT OPTION).  | 

En el siguiente ejemplo se le concede el privilegio SELECT sobre el objeto `V_$SESSION` al usuario `USER1`.

```
begin
    rdsadmin.rdsadmin_util.grant_sys_object(
        p_obj_name  => 'V_$SESSION',
        p_grantee   => 'USER1',
        p_privilege => 'SELECT');
end;
/
```

En el siguiente ejemplo se le concede el privilegio SELECT sobre el objeto `V_$SESSION` al usuario `USER1` con la opción de concesión.

```
begin
    rdsadmin.rdsadmin_util.grant_sys_object(
        p_obj_name     => 'V_$SESSION',
        p_grantee      => 'USER1',
        p_privilege    => 'SELECT',
        p_grant_option => true);
end;
/
```

Para poder conceder privilegios sobre un objeto, una cuenta debe haber obtenido los privilegios directamente con la opción de concesión o a través de un rol concedido utilizando `with admin option`. En el caso más común, es posible que desee conceder `SELECT` para una vista de DBA que se haya concedido al rol `SELECT_CATALOG_ROLE`. Si a su usuario no se le ha concedido ese rol directamente utilizando `with admin option`, no podrá transferir el privilegio. Si tiene el privilegio de DBA, puede conceder el rol directamente a otro usuario. 

En el siguiente ejemplo se conceden `SELECT_CATALOG_ROLE` y `EXECUTE_CATALOG_ROLE` a `USER1`. Dado que se utiliza `with admin option`, `USER1` ahora puede conceder acceso a los objetos SYS que se hayan concedido a `SELECT_CATALOG_ROLE`. 

```
GRANT SELECT_CATALOG_ROLE TO USER1 WITH ADMIN OPTION; 
GRANT EXECUTE_CATALOG_ROLE to USER1 WITH ADMIN OPTION;
```

No es necesario volver a conceder los objetos que ya se han concedido a `PUBLIC`. Si utiliza el procedimiento `grant_sys_object` para volver a conceder acceso, la llamada al procedimiento se realiza correctamente. 

# Revocación de privilegios SELECT o EXECUTE para objetos SYS
<a name="Appendix.Oracle.CommonDBATasks.RevokePrivileges"></a>

Utilice el procedimiento de Amazon RDS para revocar privilegios a un solo objet `rdsadmin.rdsadmin_util.revoke_sys_object`. El procedimiento solo revoca los privilegios que ya haya obtenido la cuenta maestra mediante un rol o una concesión directa. 

El procedimiento `revoke_sys_object` tiene los siguientes parámetros. 


****  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `p_obj_name`  |  varchar2  |  —  |  Sí  |  El nombre del objeto para el que se van a revocar privilegios. El objeto puede ser un directorio, una función, un paquete, un procedimiento, una secuencia, una tabla o una vista. Los nombres de los objetos deben escribirse exactamente como aparecen en `DBA_OBJECTS`. La mayoría de los objetos del sistema están definidos en mayúsculas, por lo que recomendamos que pruebe así primero.   | 
|  `p_revokee`  |  varchar2  |  —  |  Sí  |  El nombre del objeto para el que se van a revocar privilegios. El objeto puede ser un esquema o un rol.   | 
|  `p_privilege`  |  varchar2  |  null  |  Sí  |  —  | 

En el siguiente ejemplo se le revoca el privilegio SELECT sobre el objeto `V_$SESSION` desde un usuario `USER1`.

```
begin
    rdsadmin.rdsadmin_util.revoke_sys_object(
        p_obj_name  => 'V_$SESSION',
        p_revokee   => 'USER1',
        p_privilege => 'SELECT');
end;
/
```

# Administración de vistas RDS\$1X\$1 para instancias de bases de datos de Oracle
<a name="Appendix.Oracle.CommonDBATasks.X-dollar"></a>

Puede que necesite acceder a las tablas fijas `SYS.X$`, a las que solo se puede acceder mediante `SYS`. Para crear vistas `SYS.RDS_X$` en las tablas `X$` aptas, utilice los procedimientos del paquete `rdsadmin.rdsadmin_util`. A su usuario maestro se le concede automáticamente el privilegio `SELECT … WITH GRANT OPTION` sobre las vistas `RDS_X$`. 

Los procedimientos `rdsadmin.rdsadmin_util` están disponibles en los siguientes casos:
+ Instancias de bases de datos existentes que nunca se han actualizado y utilizan las siguientes versiones:
  + `21.0.0.0.ru-2023-10.rur-2023-10.r1` y versiones de 21c posteriores
  + `19.0.0.0.ru-2023-10.rur-2023-10.r1` y versiones de 19c posteriores
+ Cualquier instancia de base de datos nueva que cree
+ Cualquier instancia de base de datos existente que haya actualizado

**importante**  
Internamente, el paquete `rdsadmin.rdsadmin_util` crea vistas en las tablas `X$`. Las tablas `X$` son objetos internos del sistema que no se describen en la documentación de Oracle Database. Se recomienda probar vistas específicas en la base de datos que utilice fuera de producción y que solo cree vistas en la base de datos de producción sirviéndose de la orientación de Oracle Support.

## Enumeración de tablas fijas X\$1 aptas para su uso en las vistas RDS\$1X\$1
<a name="Appendix.Oracle.CommonDBATasks.list-allowed-X-dollar"></a>

Para enumerar tablas X\$1 aptas para su uso en vistas `RDS_X$`, utilice el procedimiento de RDS `rdsadmin.rdsadmin_util.list_allowed_sys_x$_views`. Este procedimiento no acepta parámetros. En las siguientes instrucciones se enumeran todas las tablas `X$` aptas (se incluye un ejemplo de resultados).

```
SQL> SET SERVEROUTPUT ON
SQL> SELECT * FROM TABLE(rdsadmin.rdsadmin_util.list_allowed_sys_x$_views);

'X$BH'
'X$K2GTE'
'X$KCBWBPD'
'X$KCBWDS'
'X$KGLLK'
'X$KGLOB'
'X$KGLPN'
'X$KSLHOT'
'X$KSMSP'
'X$KSPPCV'
'X$KSPPI'
'X$KSPPSV'
'X$KSQEQ'
'X$KSQRS'
'X$KTUXE'
'X$KQRFP'
```

La lista de tablas `X$` aptas puede cambiar con el tiempo. Para asegurarse de que su lista de tablas fijas `X$` aptas esté actualizada, vuelva a ejecutar `list_allowed_sys_x$_views` periódicamente.

## Creación de vistas SYS.RDS\$1X\$1
<a name="Appendix.Oracle.CommonDBATasks.create-X-dollar"></a>

Para crear una vista `RDS_X$` en una tabla `X$` apta, utilice el procedimiento de RDS `rdsadmin.rdsadmin_util.create_sys_x$_view`. Solo puede crear vistas para las tablas que figuren en la salida de `rdsadmin.rdsadmin_util.list_allowed_sys_x$_views`. El procedimiento `create_sys_x$_view` acepta los siguientes parámetros.


****  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `p_x$_tbl`  |  varchar2  |  Nulo  |  Sí  |  Un nombre de tabla `X$` válido. El valor debe ser una de las tablas `X$` notificadas por `list_allowed_sys_x$_views`.  | 
|  `p_force_creation`  |  Booleano  | FALSE |  No  |  Un valor que indica si se debe forzar la creación de una vista `RDS_X$` que ya exista para una tabla `X$`. De forma predeterminada, RDS no creará una vista si ya existe. Para forzar la creación, defina este parámetro como `TRUE`.  | 

En el siguiente ejemplo se crea una vista `SYS.RDS_X$KGLOB` de la tabla `X$KGLOB`. El formato del nombre de la vista es `RDS_X$tablename`.

```
SQL> SET SERVEROUTPUT ON
SQL> EXEC rdsadmin.rdsadmin_util.create_sys_x$_view('X$KGLOB');

PL/SQL procedure successfully completed.
```

La siguiente consulta del diccionario de datos muestra la vista `SYS.RDS_X$KGLOB` y su estado. A su usuario maestro se le concede automáticamente el privilegio `SELECT ... WITH GRANT OPTION` sobre esta vista.

```
SQL> SET SERVEROUTPUT ON
SQL> COL OWNER FORMAT A30 
SQL> COL OBJECT_NAME FORMAT A30
SQL> COL STATUS FORMAT A30
SQL> SET LINESIZE 200
SQL> SELECT OWNER, OBJECT_NAME, STATUS 
FROM DBA_OBJECTS 
WHERE OWNER = 'SYS' AND OBJECT_NAME = 'RDS_X$KGLOB';

OWNER                          OBJECT_NAME                    STATUS
------------------------------ ------------------------------ ------------------------------
SYS                            RDS_X$KGLOB                    VALID
```

**importante**  
No se garantiza que las tablas `X$` permanezcan iguales antes y después de una actualización. RDS para Oracle elimina y vuelve a crear las vistas `RDS_X$` de las tablas `X$` durante una actualización del motor. A continuación, concede el privilegio `SELECT ... WITH GRANT OPTION` al usuario maestro. Tras una actualización, conceda los privilegios necesarios a los usuarios de la base de datos en las vistas `RDS_X$` correspondientes.

## Enumeración de vistas SYS.RDS\$1X\$1
<a name="Appendix.Oracle.CommonDBATasks.list-created-X-dollar"></a>

Para enumerar las vistas `RDS_X$` existentes, utilice el procedimiento de RDS `rdsadmin.rdsadmin_util.list_created_sys_x$_views`. El procedimiento muestra solo las vistas que se crearon mediante el procedimiento `create_sys_x$_view`. En el siguiente ejemplo, se enumeran las tablas `X$` que tienen las vistas `RDS_X$` correspondientes (se incluye un ejemplo de salida).

```
SQL> SET SERVEROUTPUT ON
SQL> COL XD_TBL_NAME FORMAT A30
SQL> COL STATUS FORMAT A30
SQL> SET LINESIZE 200
SQL> SELECT * FROM TABLE(rdsadmin.rdsadmin_util.list_created_sys_x$_views);

XD_TBL_NAME                    STATUS
------------------------------ ------------------------------
X$BH                           VALID
X$K2GTE                        VALID
X$KCBWBPD                      VALID

3 rows selected.
```

## Eliminación de vistas RDS\$1X\$1
<a name="Appendix.Oracle.CommonDBATasks.drop-X-dollar"></a>

Para eliminar una vista `SYS.RDS_X$`, utilice el procedimiento de RDS `rdsadmin.rdsadmin_util.drop_sys_x$_view`. Solo puede eliminar vistas que figuren en la salida de `rdsadmin.rdsadmin_util.list_allowed_sys_x$_views`. El procedimiento `drop_sys_x$_view` acepta el siguiente parámetro.


****  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `p_x$_tbl`  |  varchar2  |  Nulo  |  Sí  |  Un nombre de tabla fija `X$` válido. El valor debe ser una de las tablas fijas `X$` notificadas por `list_created_sys_x$_views`.  | 

En el siguiente ejemplo se elimina una vista `RDS_X$KGLOB`, que se creó en la tabla `X$KGLOB`.

```
SQL> SET SERVEROUTPUT ON
SQL> EXEC rdsadmin.rdsadmin_util.drop_sys_x$_view('X$KGLOB');

PL/SQL procedure successfully completed.
```

El siguiente ejemplo muestra que la vista `SYS.RDS_X$KGLOB` se ha eliminado (se incluye un ejemplo de salida).

```
SQL> SET SERVEROUTPUT ON
SQL> COL OWNER FORMAT A30 
SQL> COL OBJECT_NAME FORMAT A30
SQL> COL STATUS FORMAT A30
SQL> SET LINESIZE 200
SQL> SELECT OWNER, OBJECT_NAME, STATUS 
FROM DBA_OBJECTS 
WHERE OWNER = 'SYS' AND OBJECT_NAME = 'RDS_X$KGLOB';

no rows selected
```

# Concesión de privilegios a usuarios no maestros
<a name="Appendix.Oracle.CommonDBATasks.PermissionsNonMasters"></a>

Puede conceder privilegios SELECT para muchos objetos del esquema `SYS` utilizando el rol `SELECT_CATALOG_ROLE`. El rol `SELECT_CATALOG_ROLE` concede a los usuarios privilegios `SELECT` para las vistas del diccionario de datos. En el siguiente ejemplo se concede el rol `SELECT_CATALOG_ROLE` a un usuario denominado `user1`. 

```
GRANT SELECT_CATALOG_ROLE TO user1;
```

Puede conceder privilegios `EXECUTE` para muchos objetos del esquema `SYS` utilizando el rol `EXECUTE_CATALOG_ROLE`. El rol `EXECUTE_CATALOG_ROLE` concede a los usuarios privilegios `EXECUTE` para los paquetes y los procedimientos del diccionario de datos. En el siguiente ejemplo se concede el rol `EXECUTE_CATALOG_ROLE` a un usuario denominado *user1*. 

```
GRANT EXECUTE_CATALOG_ROLE TO user1;
```

En el siguiente ejemplo se obtienen los permisos que conceden los roles `SELECT_CATALOG_ROLE` y `EXECUTE_CATALOG_ROLE`. 

```
  SELECT * 
    FROM ROLE_TAB_PRIVS  
   WHERE ROLE IN ('SELECT_CATALOG_ROLE','EXECUTE_CATALOG_ROLE') 
ORDER BY ROLE, TABLE_NAME ASC;
```

En el siguiente ejemplo se crea un usuario no maestro denominado `user1`, se le concede el privilegio `CREATE SESSION` y el privilegio `SELECT` para una base de datos denominada *sh.sales*.

```
CREATE USER user1 IDENTIFIED BY PASSWORD;
GRANT CREATE SESSION TO user1;
GRANT SELECT ON sh.sales TO user1;
```

# Creación de funciones personalizadas para comprobar contraseñas
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword"></a>

Puede crear una función personalizada de verificación de contraseñas de las siguientes maneras.
+ Para usar la lógica de verificación estándar y guardar la función en el esquema `SYS`, utilice el procedimiento `create_verify_function`. 
+ Para usar la lógica de verificación personalizada y evitar guardar la función en el esquema `SYS`, utilice el procedimiento `create_passthrough_verify_fcn`. 

# El procedimiento create\$1verify\$1function
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword.Standard"></a>

Puede crear una función personalizada para comprobar las contraseñas mediante el procedimiento de Amazon RDS `rdsadmin.rdsadmin_password_verify.create_verify_function`. El procedimiento `create_verify_function` admite todas las versiones de RDS para Oracle.

El procedimiento `create_verify_function` tiene los siguientes parámetros. 


****  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `p_verify_function_name`  |  varchar2  |  —  |  Sí  |  El nombre de la función personalizada. Esta función se crea automáticamente en el esquema SYS. Esta función se asigna a los perfiles de usuario.   | 
|  `p_min_length`  |  número  |  8  |  No  |  El número mínimo necesario de caracteres.  | 
|  `p_max_length`  |  número  |  256  |  No  |  El número máximo de caracteres permitido.  | 
|  `p_min_letters`  |  número  |  1  |  No  |  El número mínimo necesario de letras.  | 
|  `p_min_uppercase`  |  número  |  0  |  No  |  El número mínimo necesario de letras mayúsculas.  | 
|  `p_min_lowercase`  |  número  |  0  |  No  |  El número mínimo necesario de letras minúsculas.  | 
|  `p_min_digits`  |  número  |  1  |  No  |  El número mínimo necesario de dígitos.  | 
|  `p_min_special`  |  número  |  0  |  No  |  El número mínimo necesario de caracteres especiales.  | 
|  `p_min_different_chars`  |  número  |  3  |  No  |  El número mínimo de caracteres diferentes necesarios entre la contraseña antigua y la nueva.  | 
|  `p_disallow_username`  |  booleano  |  true  |  No  |  Establezca esta opción en `true` para no permitir el nombre de usuario en la contraseña.  | 
|  `p_disallow_reverse`  |  booleano  |  true  |  No  |  Establézcalo en `true` para impedir que se use el nombre de usuario a la inversa en la contraseña.  | 
|  `p_disallow_db_name`  |  booleano  |  true  |  No  |  Establézcalo en `true` para impedir que se use el nombre de la base de datos o del servidor en la contraseña.  | 
|  `p_disallow_simple_strings`  |  booleano  |  true  |  No  |  Establézcalo en `true` para impedir que se usen cadenas sencillas en la contraseña.  | 
|  `p_disallow_whitespace`  |  booleano  |  false  |  No  |  Establézcalo en `true` para impedir que se usen caracteres de espacio en blanco en la contraseña.  | 
|  `p_disallow_at_sign`  |  booleano  |  false  |  No  |  Establézcalo en `true` para impedir que se use el carácter @ en la contraseña.  | 

Puede crear distintas funciones de verificación de contraseñas.

El nombre de la función personalizada está sujeto a ciertas restricciones. Su función personalizada no puede tener el mismo nombre que un objeto de sistema existente. El nombre no puede tener más de 30 caracteres de longitud. Asimismo, el nombre debe incluir una de las siguientes cadenas: `PASSWORD`, `VERIFY`, `COMPLEXITY`, `ENFORCE` o `STRENGTH`. 

El siguiente ejemplo crea una función con el nombre `CUSTOM_PASSWORD_FUNCTION`. La función requiere que una contraseña tenga al menos 12 caracteres, 2 caracteres en mayúsculas, 1 dígito y 1 carácter especial, y que la contraseña no incluya el carácter @. 

```
begin
    rdsadmin.rdsadmin_password_verify.create_verify_function(
        p_verify_function_name => 'CUSTOM_PASSWORD_FUNCTION', 
        p_min_length           => 12, 
        p_min_uppercase        => 2, 
        p_min_digits           => 1, 
        p_min_special          => 1,
        p_disallow_at_sign     => true);
end;
/
```

Para ver el texto de la función de verificación, realice una consulta de `DBA_SOURCE`. En el siguiente ejemplo se obtiene el texto de una función de contraseña personalizada llamada `CUSTOM_PASSWORD_FUNCTION`. 

```
COL TEXT FORMAT a150

  SELECT TEXT 
    FROM DBA_SOURCE 
   WHERE OWNER = 'SYS' 
     AND NAME = 'CUSTOM_PASSWORD_FUNCTION' 
ORDER BY LINE;
```

Para asociar la función de verificación a un perfil de usuario, utilice `ALTER PROFILE`. En el siguiente ejemplo se asocia una función de verificación PL/SQL llamada `CUSTOM_PASSWORD_FUNCTION` al perfil de usuario `DEFAULT`. `PASSWORD_VERIFY_FUNCTION` es el nombre del recurso del perfil de Oracle. 

```
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION CUSTOM_PASSWORD_FUNCTION;
```

Para ver qué perfiles de usuario están asociados a qué función de verificación, consulte `DBA_PROFILES`. En el siguiente ejemplo se obtienen los perfiles asociados a la función de verificación personalizada llamada `CUSTOM_PASSWORD_FUNCTION`. 

```
SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD_VERIFY_FUNCTION' AND LIMIT = 'CUSTOM_PASSWORD_FUNCTION';


PROFILE                    RESOURCE_NAME                     RESOURCE  LIMIT
-------------------------  --------------------------------  --------  ------------------------
DEFAULT                    PASSWORD_VERIFY_FUNCTION          PASSWORD  CUSTOM_PASSWORD_FUNCTION
```

En el siguiente ejemplo se obtienen todos los perfiles y las funciones de verificación de contraseñas a las que están asociados. 

```
SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD_VERIFY_FUNCTION';

PROFILE                    RESOURCE_NAME                     RESOURCE  LIMIT
-------------------------  --------------------------------  --------  ------------------------
DEFAULT                    PASSWORD_VERIFY_FUNCTION          PASSWORD  CUSTOM_PASSWORD_FUNCTION
RDSADMIN                   PASSWORD_VERIFY_FUNCTION          PASSWORD  NULL
```

# El procedimiento create\$1passthrough\$1verify\$1fcn
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword.Custom"></a>

El procedimiento `create_passthrough_verify_fcn` admite todas las versiones de RDS para Oracle.

Puede crear una función personalizada para comprobar las contraseñas mediante el procedimiento de Amazon RDS `rdsadmin.rdsadmin_password_verify.create_passthrough_verify_fcn`. El procedimiento `create_passthrough_verify_fcn` tiene los siguientes parámetros. 


****  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `p_verify_function_name`  |  varchar2  |  —  |  Sí  |  El nombre de la función de verificación personalizada. Es una función contenedora que se crea automáticamente en el esquema SYS y no contiene ninguna lógica de verificación. Esta función se asigna a los perfiles de usuario.   | 
|  `p_target_owner`  |  varchar2  |  —  |  Sí  |  El propietario del esquema de la función de verificación personalizada.  | 
|  `p_target_function_name`  |  varchar2  |  —  |  Sí  |  El nombre de la función personalizada existente que contiene la lógica de verificación. La función personalizada debe devolver un valor booleano. La función debe devolver `true` si la contraseña es válida y `false` si la contraseña no es válida.   | 

En el siguiente ejemplo se crea una función de verificación de contraseñas que utiliza la lógica de la función `PASSWORD_LOGIC_EXTRA_STRONG`. 

```
begin
    rdsadmin.rdsadmin_password_verify.create_passthrough_verify_fcn(
        p_verify_function_name => 'CUSTOM_PASSWORD_FUNCTION', 
        p_target_owner         => 'TEST_USER',
        p_target_function_name => 'PASSWORD_LOGIC_EXTRA_STRONG');
end;
/
```

Para asociar la función de verificación a un perfil de usuario, utilice `alter profile`. En el siguiente ejemplo se asocia la función de verificación al perfil de usuario `DEFAULT`. 

```
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION CUSTOM_PASSWORD_FUNCTION;
```

## Configuración de un servidor DNS personalizado
<a name="Appendix.Oracle.CommonDBATasks.CustomDNS"></a>

Amazon RDS admite el acceso de red saliente en las instancias de bases de datos que ejecutan Oracle. Para obtener más información acerca del acceso de red saliente, incluidos los requisitos previos, consulte [Configuración del acceso UTL\$1HTTP mediante certificados y un wallet de Oracle.](Oracle.Concepts.ONA.md). 

Amazon RDS Oracle permite realizar la resolución del servicio de nombres de dominio (DNS) desde un servidor DNS personalizado propiedad del cliente. Solo es posible resolver nombres de dominio completos desde una instancia de base de datos de Amazon RDS a través de un servidor DNS personalizado. 

Después de configurar un servidor de nombres DNS personalizado, se tardan hasta 30 minutos en propagar los cambios a la instancia de base de datos. Una vez que se propaguen los cambios a la instancia de base de datos, todo el tráfico de red saliente que requiera una búsqueda de DNS consultará el servidor DNS personalizado a través del puerto 53. 

Para configurar un servidor DNS personalizado para su instancia de base de datos de Amazon RDS for Oracle, haga lo siguiente: 
+ Desde el conjunto de opciones de DHCP asociado a la nube virtual privada (VPC), establezca la opción `domain-name-servers` en la dirección IP del servidor de nombres DNS. Para obtener más información, consulte [Conjuntos de opciones de DHCP](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html). 
**nota**  
La opción `domain-name-servers` acepta hasta cuatro valores, pero la instancia de base de datos de Amazon RDS solo utiliza el primer valor. 
+ Asegúrese de que el servidor DNS puede resolver todas las consultas de búsqueda, incluidos los nombres de DNS públicos, los nombres de DNS privados de Amazon EC2 y los nombres de DNS específicos del cliente. Si el tráfico de red saliente contiene búsquedas de DNS que el servidor DNS no puede resolver, este debe tener configurados los proveedores de DNS correspondientes. 
+ Configure el servidor DNS para que genere respuestas de protocolo de datagramas de usuario (UDP) de 512 bytes como máximo. 
+ Configure el servidor DNS para que genere respuestas de protocolo de control de transmisión (TCP) de 1024 bytes como máximo. 
+ Configure el servidor DNS para que permita el tráfico entrante desde las instancias de bases de datos de Amazon RDS a través del puerto 53. Si el servidor DNS está en una Amazon VPC, la VPC debe tener un grupo de seguridad que contenga reglas entrantes que permitan el tráfico UDP y TCP en el puerto 53. Si el servidor DNS no está en una Amazon VPC, debe tener lista de permitidos de firewall apropiada para permitir el tráfico entrante UDP y TCP en el puerto 53.

  Para obtener más información, consulte [Grupos de seguridad de su VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) y [Adición, eliminación y actualización de reglas](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#AddRemoveRules). 
+ Configure la VPC de la instancia de base de datos de Amazon RDS para que permita el tráfico saliente a través del puerto 53. La VPC debe tener un grupo de seguridad que contenga reglas salientes que permitan el tráfico UDP y TCP en el puerto 53. 

  Para obtener más información, consulte [Grupos de seguridad de su VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) y [Adición, eliminación y actualización de reglas](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#AddRemoveRules). 
+ La ruta de direccionamiento entre la instancia de base de datos de Amazon RDS y el servidor DNS debe configurarse correctamente para permitir el tráfico de DNS. 
  + Si la instancia de base de datos de Amazon RDS y el servidor DNS no están en la misma VPC, debe establecerse una interconexión entre ellos. Para obtener más información, consulte [¿Qué es un emparejamiento de VPC?](https://docs.aws.amazon.com/vpc/latest/peering/Welcome.html) 

# 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.
```