Administración de vistas RDS_X$ para instancias de bases de datos de Oracle - Amazon Relational Database Service

Administración de vistas RDS_X$ para instancias de bases de datos de Oracle

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 las siguientes versiones del motor de base de datos:

  • 21.0.0.0.ru-2023-10.rur-2023-10.r1 y versiones de Oracle Database 21c posteriores

  • 19.0.0.0.ru-2023-10.rur-2023-10.r1 y versiones de Oracle Database 19c posteriores

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$ aptas para su uso en las vistas RDS_X$

Para enumerar tablas X$ 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_X$

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

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_X$

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_X$

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

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