

# Gerenciar visualizações RDS\$1X\$1 para instâncias de banco de dados Oracle
<a name="Appendix.Oracle.CommonDBATasks.X-dollar"></a>

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 nos seguintes casos:
+ Instâncias de banco de dados existentes que nunca foram atualizadas e usam as seguintes versões:
  + `21.0.0.0.ru-2023-10.rur-2023-10.r1` e versões 21c posteriores
  + `19.0.0.0.ru-2023-10.rur-2023-10.r1` e versões 19c posteriores
+ Qualquer nova instância de banco de dados que você criar.
+ Qualquer instância de banco de dados existente que você tenha atualizado.

**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\$1 elegíveis para uso em visualizações RDS\$1X\$1
<a name="Appendix.Oracle.CommonDBATasks.list-allowed-X-dollar"></a>

Para listar tabelas X\$1 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\$1X\$1
<a name="Appendix.Oracle.CommonDBATasks.create-X-dollar"></a>

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\$1X\$1
<a name="Appendix.Oracle.CommonDBATasks.list-created-X-dollar"></a>

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\$1X\$1
<a name="Appendix.Oracle.CommonDBATasks.drop-X-dollar"></a>

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