Gerenciar visualizações RDS_X$ para instâncias de banco de dados Oracle - Amazon Relational Database Service

Gerenciar visualizações RDS_X$ para instâncias de banco de dados Oracle

Talvez seja necessário acessar tabelas SYS.X$ fixas, que só podem ser acessadas por SYS. Para criar visualizações SYS.RDS_X$ em tabelas X$ elegíveis, use os procedimentos no pacote rdsadmin.rdsadmin_util. O usuário principal recebe automaticamente o privilégio SELECT … WITH GRANT OPTION nas visualizações RDS_X$.

Os procedimentos rdsadmin.rdsadmin_util estão disponíveis nas seguintes versões do banco de dados:

  • 21.0.0.0.ru-2023-10.rur-2023-10.r1 e versões posteriores do Oracle Database 21c

  • 19.0.0.0.ru-2023-10.rur-2023-10.r1 e versões posteriores do Oracle Database 19c

Importante

Internamente, o pacote rdsadmin.rdsadmin_util cria visualizações em tabelas X$. As tabelas X$ são objetos internos do sistema que não estão descritos na documentação do Oracle Database. Recomendamos testar visualizações específicas no banco de dados que não é de produção e somente criar visualizações no banco de dados de produção com a orientação do Oracle Support.

Listar tabelas fixas X$ elegíveis para uso em visualizações RDS_X$

Para listar tabelas X$ que são elegíveis para uso em visualizações RDS_X$, use o procedimento rdsadmin.rdsadmin_util.list_allowed_sys_x$_views do RDS. Este procedimento não aceita parâmetros. As declarações a seguir listam todas as tabelas X$ elegíveis (exemplo de saída incluído).

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'

A lista das tabelas X$ elegíveis pode mudar ao longo do tempo. Para garantir que a lista de tabelas fixas X$ elegíveis esteja atualizada, execute list_allowed_sys_x$_views periodicamente.

Criar visualizações SYS.RDS_X$

Para criar uma visualização RDS_X$ em uma tabela X$ elegível, use o procedimento rdsadmin.rdsadmin_util.create_sys_x$_view do RDS. É possível criar visualizações apenas para as tabelas listadas na saída de rdsadmin.rdsadmin_util.list_allowed_sys_x$_views. O procedimento create_sys_x$_view tem os parâmetros a seguir.

Nome do parâmetro Tipo de dados Padrão Obrigatório Descrição

p_x$_tbl

varchar2

Null

Sim

O nome de uma tabela X$ válida. O valor deve ser uma das tabelas X$ relatadas por list_allowed_sys_x$_views.

p_force_creation

Booleano

FALSE

Não

Um valor que indica se é necessário forçar a criação de uma visualização RDS_X$ que já existe para uma tabela X$. Por padrão, o RDS não criará uma visualização se ela já existir. Para forçar a criação, defina esse parâmetro como TRUE.

O exemplo a seguir cria a visualização SYS.RDS_X$KGLOB na tabela X$KGLOB. O formato do nome da visualização é RDS_X$tablename.

SQL> SET SERVEROUTPUT ON SQL> EXEC rdsadmin.rdsadmin_util.create_sys_x$_view('X$KGLOB'); PL/SQL procedure successfully completed.

A consulta do dicionário de dados a seguir lista a visualização SYS.RDS_X$KGLOB e mostra o status. O usuário principal recebe automaticamente o privilégio SELECT ... WITH GRANT OPTION nessa visualização.

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

Não é garantido que as tabelas X$ permaneçam as mesmas antes e depois de uma atualização. O RDS para Oracle descarta e recria as visualizações RDS_X$ nas tabelas X$ durante uma atualização do mecanismo. Depois, ele concede o privilégio SELECT ... WITH GRANT OPTION ao usuário principal. Depois de uma atualização, conceda privilégios aos usuários do banco de dados conforme necessário nas visualizações RDS_X$ correspondentes.

Listar visualizações SYS.RDS_X$

Para listar as visualizações RDS_X$ existentes, use o procedimento rdsadmin.rdsadmin_util.list_created_sys_x$_views do RDS. O procedimento lista somente as visualizações que foram criadas pelo procedimento create_sys_x$_view. O exemplo a seguir lista as tabelas X$ que têm visualizações RDS_X$ correspondentes (exemplo de saída incluído).

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.

Descartar visualizações RDS_X$

Para descartar uma visualização SYS.RDS_X$, use o procedimento rdsadmin.rdsadmin_util.drop_sys_x$_view do RDS. É possível descartar apenas as visualizações na saída de rdsadmin.rdsadmin_util.list_allowed_sys_x$_views. O procedimento drop_sys_x$_view aceita o parâmetro a seguir.

Nome do parâmetro Tipo de dados Padrão Obrigatório Descrição

p_x$_tbl

varchar2

Null

Sim

O nome de uma tabela X$ fixa válida. O valor deve ser uma das tabelas fixas X$ relatadas por list_created_sys_x$_views.

O exemplo a seguir cria a visualização RDS_X$KGLOB criada na tabela X$KGLOB.

SQL> SET SERVEROUTPUT ON SQL> EXEC rdsadmin.rdsadmin_util.drop_sys_x$_view('X$KGLOB'); PL/SQL procedure successfully completed.

O exemplo a seguir mostra que a visualização SYS.RDS_X$KGLOB foi descartada (exemplo de saída incluído).

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