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.r1y versiones de Oracle Database 21c posteriores -
19.0.0.0.ru-2023-10.rur-2023-10.r1y 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 |
|---|---|---|---|---|
|
|
varchar2 |
Nulo |
Sí |
Un nombre de tabla |
|
|
Booleano |
FALSE |
No |
Un valor que indica si se debe forzar la creación de una vista |
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 |
|---|---|---|---|---|
|
|
varchar2 |
Nulo |
Sí |
Un nombre de tabla fija |
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