

# Realização de tarefas comuns do sistema para instâncias de banco de dados Oracle
<a name="Appendix.Oracle.CommonDBATasks.System"></a>

Veja a seguir como executar determinadas tarefas comuns de DBA relacionadas ao sistema nas instâncias de bancos de dados do Amazon RDS que executam o Oracle. Para oferecer uma experiência de serviço gerenciado, o Amazon RDS não fornece acesso ao shell para instâncias de bancos de dados e restringe o acesso a determinados procedimentos e tabelas do sistema que exigem privilégios avançados. 

**Topics**
+ [Desconectar uma sessão](Appendix.Oracle.CommonDBATasks.DisconnectingSession.md)
+ [Encerrar uma sessão](Appendix.Oracle.CommonDBATasks.KillingSession.md)
+ [Como cancelar uma instrução SQL em uma sessão](Appendix.Oracle.CommonDBATasks.CancellingSQL.md)
+ [Habilitar e desabilitar sessões restritas](Appendix.Oracle.CommonDBATasks.RestrictedSession.md)
+ [Descarregar o grupo compartilhado](Appendix.Oracle.CommonDBATasks.FlushingSharedPool.md)
+ [Concessão de privilégios SELECT ou EXECUTE a objetos SYS](Appendix.Oracle.CommonDBATasks.TransferPrivileges.md)
+ [Revogar privilégios SELECT ou EXECUTE em objetos SYS](Appendix.Oracle.CommonDBATasks.RevokePrivileges.md)
+ [Gerenciar visualizações RDS\$1X\$1 para instâncias de banco de dados Oracle](Appendix.Oracle.CommonDBATasks.X-dollar.md)
+ [Concessão de privilégios a usuários não mestres](Appendix.Oracle.CommonDBATasks.PermissionsNonMasters.md)
+ [Criação de funções personalizadas para verificar senhas](Appendix.Oracle.CommonDBATasks.CustomPassword.md)
+ [Configuração de um servidor DNS personalizado](#Appendix.Oracle.CommonDBATasks.CustomDNS)
+ [Configurar e anular configuração de eventos de diagnóstico do sistema](Appendix.Oracle.CommonDBATasks.SystemEvents.md)

# Desconectar uma sessão
<a name="Appendix.Oracle.CommonDBATasks.DisconnectingSession"></a>

Para desconectar a sessão atual finalizando o processo de servidor dedicado, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.disconnect`. O procedimento `disconnect` tem os seguintes parâmetros. 


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `sid`  |  número  |  —  |  Sim  |  O identificador da sessão.  | 
|  `serial`  |  número  |  —  |  Sim  |  O número de série da sessão.  | 
|  `method`  |  varchar  |  'IMMEDIATE'  |  Não  |  Os valores válidos são `'IMMEDIATE'` ou `'POST_TRANSACTION'`.  | 

O exemplo a seguir desconecta uma sessão.

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

Para obter o identificador da sessão e o número de série da sessão, consulte a visualização `V$SESSION`. O seguinte exemplo obtém todas as sessões para o usuário `AWSUSER`.

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

O banco de dados deve estar aberto para usar esse método. Para obter mais informações sobre como desconectar uma sessão, consulte [ALTER SYSTEM](http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_2014.htm#SQLRF53166) (Alterar sistema) na documentação do Oracle. 

# Encerrar uma sessão
<a name="Appendix.Oracle.CommonDBATasks.KillingSession"></a>

Para encerrar uma sessão, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.kill`. O procedimento `kill` tem os seguintes parâmetros.


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `sid`  |  número  |  —  |  Sim  |  O identificador da sessão.  | 
|  `serial`  |  número  |  —  |  Sim  |  O número de série da sessão.  | 
|  `method`  |  varchar  |  nulo  |  Não  |  Os valores válidos são `'IMMEDIATE'` ou `'PROCESS'`. Se você especificar `IMMEDIATE`, terá o mesmo resultado que o produzido ao executar a seguinte instrução: <pre>ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE</pre> Se você especificar `PROCESS`, encerrará os processos associados a uma sessão. Especifique `PROCESS` apenas se o encerramento da sessão com `IMMEDIATE` foi bem-sucedido.  | 

Para obter o identificador da sessão e o número de série da sessão, consulte a visualização `V$SESSION`. O seguinte exemplo obtém todas as sessões para o usuário *AWSUSER*.

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

O exemplo a seguir encerra uma sessão.

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

No exemplo a seguir, os processos associados a uma sessão são encerrados.

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

# Como cancelar uma instrução SQL em uma sessão
<a name="Appendix.Oracle.CommonDBATasks.CancellingSQL"></a>

Para cancelar uma instrução SQL em uma sessão, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.cancel`.

**nota**  
Esse procedimento é compatível com o Oracle Database 19c (19.0.0) e com todas as versões principais e secundárias posteriores do RDS for Oracle.

O procedimento `cancel` tem os seguintes parâmetros. 


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `sid`  |  número  |  —  |  Sim  |  O identificador da sessão.  | 
|  `serial`  |  número  |  —  |  Sim  |  O número de série da sessão.  | 
|  `sql_id`  |  varchar2  |  nulo  |  Não  |  O identificador SQL da instrução SQL   | 

O exemplo a seguir canela uma instrução SQL em uma sessão.

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

Para obter o identificador da sessão, o número de série da sessão e o identificador SQL de uma instrução SQL, consulte a visualização `V$SESSION`. O exemplo a seguir obtém todos os identificadores SQL e de sessão para o usuário `AWSUSER`.

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

# Habilitar e desabilitar sessões restritas
<a name="Appendix.Oracle.CommonDBATasks.RestrictedSession"></a>

Para habilitar e desabilitar sessões restritas, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.restricted_session`. O procedimento `restricted_session` tem os seguintes parâmetros. 


****  

| Nome do parâmetro | Tipo de dados | Padrão | Sim | Descrição | 
| --- | --- | --- | --- | --- | 
|  `p_enable`  |  booliano  |  true  |  Não  |  Defina como `true` para habilitar sessões restritas, `false` para desabilitar sessões restritas.   | 

O exemplo a seguir mostra como habilitar e desabilitar sessões restritas. 

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

# Descarregar o grupo compartilhado
<a name="Appendix.Oracle.CommonDBATasks.FlushingSharedPool"></a>

Para descarregar o grupo compartilhado, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.flush_shared_pool`. O procedimento `flush_shared_pool` não tem parâmetros. 

O exemplo a seguir libera o pool compartilhado.

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

## Descarregar o cache do buffer
<a name="Appendix.Oracle.CommonDBATasks.FlushingBufferCache"></a>

Para descarregar o cache do buffer, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.flush_buffer_cache`. O procedimento `flush_buffer_cache` não tem parâmetros. 

O exemplo a seguir libera o cache do buffer.

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

## Limpar o cache flash inteligente do banco de dados
<a name="Appendix.Oracle.CommonDBATasks.flushing-shared-pool"></a>

Para limpar o cache do flash inteligente do banco de dados, use o procedimento `rdsadmin.rdsadmin_util.flush_flash_cache` do Amazon RDS. O procedimento `flush_flash_cache` não tem parâmetros. O exemplo a seguir libera o cache do flash inteligente do banco de dados.

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

Para obter mais informações sobre o uso do cache flash inteligente do banco de dados com o RDS para Oracle, consulte [Armazenar dados temporários em um armazenamento de instância do RDS for Oracle](CHAP_Oracle.advanced-features.instance-store.md).

# Concessão de privilégios SELECT ou EXECUTE a objetos SYS
<a name="Appendix.Oracle.CommonDBATasks.TransferPrivileges"></a>

Normalmente, você transfere privilégios usando funções, que podem conter muitos objetos. Para conceder privilégios a um único objeto, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.grant_sys_object`. O procedimento concede apenas privilégios já concedidos ao usuário mestre por uma função ou por uma concessão direta. 

O procedimento `grant_sys_object` tem os seguintes parâmetros. 

**Importante**  
Para todos os valores de parâmetro, use letras maiúsculas, a menos que você tenha criado o usuário com um identificador que diferencia letras maiúsculas de minúsculas. Por exemplo, se você executar `CREATE USER myuser` ou `CREATE USER MYUSER`, o dicionário de dados armazenará `MYUSER`. No entanto, se você usar aspas duplas em `CREATE USER "MyUser"`, o dicionário de dados armazenará `MyUser`.


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `p_obj_name`  |  varchar2  |  —  |  Sim  |  O nome do objeto ao qual conceder privilégios. O objeto pode ser um diretório, uma função, um pacote, um procedimento, uma sequência, uma tabela ou uma visualização. Os nomes dos objetos devem ser expressos exatamente como eles aparecem em `DBA_OBJECTS`. Como a maioria dos objetos do sistema é definida em maiúsculas, recomendamos que você tente isso primeiro.   | 
|  `p_grantee`  |  varchar2  |  —  |  Sim  |  O nome do objeto para o qual conceder privilégios. O objeto pode ser uma esquema ou um função.   | 
|  `p_privilege`  |  varchar2  |  nulo  |  Sim  |  —  | 
|  `p_grant_option`  |  booliano  |  false  |  Não  |  Defina como `true` para usar a opção de concessão.  | 

O exemplo a seguir concede privilégios de seleção em um objeto chamado `V_$SESSION` a um usuário chamado `USER1`.

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

O exemplo a seguir concede privilégios de seleção em um objeto chamado `V_$SESSION` a um usuário chamado `USER1` com a opção de concessão.

```
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 privilégios a um objeto, sua conta deve ter esses privilégios concedidos a ela diretamente com a opção de concessão ou por meio de uma função concedida usando `with admin option`. No caso mais comum, você pode querer conceder `SELECT` em uma visualização de DBA que foi concedida à função `SELECT_CATALOG_ROLE`. Se essa função ainda não estiver diretamente concedida ao seu usuário usando `with admin option`, você não poderá transferir o privilégio. Se você tiver privilégios de DBA, poderá conceder a função diretamente a outro usuário. 

O exemplo a seguir concede `SELECT_CATALOG_ROLE` e `EXECUTE_CATALOG_ROLE` a `USER1`. Com o `with admin option` é usado, `USER1` agora pode conceder acesso a objetos SYS que foram concedidos a `SELECT_CATALOG_ROLE`. 

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

Objetos já concedidos a `PUBLIC` não precisam ser novamente concedidos. Se você usar o procedimento `grant_sys_object` para conceder acesso novamente, a chamada de procedimento será bem-sucedida. 

# Revogar privilégios SELECT ou EXECUTE em objetos SYS
<a name="Appendix.Oracle.CommonDBATasks.RevokePrivileges"></a>

Para revogar os privilégios de um único objeto, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.revoke_sys_object`. O procedimento revoga apenas os privilégios já concedido à conta mestra por uma função ou por uma concessão direta. 

O procedimento `revoke_sys_object` tem os seguintes parâmetros. 


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `p_obj_name`  |  varchar2  |  —  |  Sim  |  O nome do objeto ao qual revogar privilégios. O objeto pode ser um diretório, uma função, um pacote, um procedimento, uma sequência, uma tabela ou uma visualização. Os nomes dos objetos devem ser expressos exatamente como eles aparecem em `DBA_OBJECTS`. A maioria dos objetos do sistema é definida em maiúsculas, então recomendamos que você tente isso primeiro.   | 
|  `p_revokee`  |  varchar2  |  —  |  Sim  |  O nome do objeto ao qual revogar privilégios. O objeto pode ser uma esquema ou um função.   | 
|  `p_privilege`  |  varchar2  |  nulo  |  Sim  |  —  | 

O exemplo a seguir revoga privilégios de seleção em um objeto denominado `V_$SESSION` de um usuário denominado `USER1`.

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

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

# Concessão de privilégios a usuários não mestres
<a name="Appendix.Oracle.CommonDBATasks.PermissionsNonMasters"></a>

Você pode conceder privilégios de seleção para muitos objetos no esquema `SYS`, usando a função `SELECT_CATALOG_ROLE`. A função `SELECT_CATALOG_ROLE` concede aos usuários privilégios `SELECT` em visualizações de dicionários de dados. O exemplo a seguir concede a função `SELECT_CATALOG_ROLE` a um usuário chamado `user1`. 

```
GRANT SELECT_CATALOG_ROLE TO user1;
```

É possível conceder privilégios `EXECUTE` para muitos objetos no esquema `SYS` usando a função `EXECUTE_CATALOG_ROLE`. A função `EXECUTE_CATALOG_ROLE` concede aos usuários privilégios `EXECUTE` para pacotes e procedimentos no dicionário de dados. O exemplo a seguir concede a função `EXECUTE_CATALOG_ROLE` a um usuário chamado *user1*. 

```
GRANT EXECUTE_CATALOG_ROLE TO user1;
```

O exemplo a seguir obtém as permissões permitidas pelas funções `SELECT_CATALOG_ROLE` e `EXECUTE_CATALOG_ROLE`. 

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

O exemplo a seguir cria um usuário não mestre chamado `user1`, concede o privilégio `CREATE SESSION` e concede o privilégio `SELECT` em um banco de dados chamado *sh.sales*.

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

# Criação de funções personalizadas para verificar senhas
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword"></a>

Você pode criar uma função de verificação de senha personalizada das seguintes maneiras:
+ Para usar a lógica de verificação padrão e armazenar a função no esquema `SYS`, utilize o procedimento `create_verify_function`. 
+ Para usar a lógica de verificação padrão ou evitar armazenar a função no esquema `SYS`, utilize o procedimento `create_passthrough_verify_fcn`. 

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

Você pode criar uma função personalizada para verificar senhas usando o procedimento do Amazon RDS `rdsadmin.rdsadmin_password_verify.create_verify_function`. O procedimento `create_verify_function` é compatível com todas as versões do RDS para Oracle.

O procedimento `create_verify_function` tem os seguintes parâmetros. 


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `p_verify_function_name`  |  varchar2  |  —  |  Sim  |  O nome da sua função personalizada. Essa função é criada por você no esquema SYS. Você atribui essa função a perfis de usuário.   | 
|  `p_min_length`  |  número  |  8  |  Não  |  O número mínimo de caracteres necessários.  | 
|  `p_max_length`  |  número  |  256  |  Não  |  O número máximo de caracteres permitidos.  | 
|  `p_min_letters`  |  número  |  1  |  Não  |  O número mínimo de letras necessárias.  | 
|  `p_min_uppercase`  |  número  |  0  |  Não  |  O número mínimo de letras maiúsculas necessárias.  | 
|  `p_min_lowercase`  |  número  |  0  |  Não  |  O número mínimo de letras minúsculas necessárias.  | 
|  `p_min_digits`  |  número  |  1  |  Não  |  O número mínimo de dígitos necessários.  | 
|  `p_min_special`  |  número  |  0  |  Não  |  O número mínimo de caracteres especiais necessários.  | 
|  `p_min_different_chars`  |  número  |  3  |  Não  |  O número mínimo de caracteres diferentes exigido entre a senha antiga e nova.  | 
|  `p_disallow_username`  |  booliano  |  true  |  Não  |  Defina como `true` para não permitir o nome de usuário na senha.  | 
|  `p_disallow_reverse`  |  booliano  |  true  |  Não  |  Defina como `true` para não permitir o inverso do nome de usuário na senha.  | 
|  `p_disallow_db_name`  |  booliano  |  true  |  Não  |  Defina como `true` para não permitir o nome do banco de dados ou do servidor na senha.  | 
|  `p_disallow_simple_strings`  |  booliano  |  true  |  Não  |  Defina como `true` para não permitir strings simples como senha.  | 
|  `p_disallow_whitespace`  |  booliano  |  false  |  Não  |  Defina como `true` para não permitir caracteres de espaço em branco na senha.  | 
|  `p_disallow_at_sign`  |  booliano  |  false  |  Não  |  Defina como `true` para não permitir o caractere @ na senha.  | 

Você pode criar várias funções de verificação de senha.

Existem restrições quanto ao nome da sua função personalizada. Sua função personalizada não pode ter o mesmo nome que um objeto de sistema existente. O nome pode ter no máximo 30 caracteres. Além disso, o nome deve incluir uma das seguintes strings: `PASSWORD`, `VERIFY`, `COMPLEXITY`, `ENFORCE` ou `STRENGTH`. 

O exemplo a seguir cria uma função chamada `CUSTOM_PASSWORD_FUNCTION`. A função requer que uma senha tenha pelo menos 12 caracteres, 2 caracteres em maiúsculas, 1 dígito e 1 caractere especial e que a senha não permita o caractere @. 

```
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 o texto da sua função de verificação, consulte `DBA_SOURCE`. O exemplo a seguir obtém o texto de uma função de senha personalizada chamada `CUSTOM_PASSWORD_FUNCTION`. 

```
COL TEXT FORMAT a150

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

Para associar sua função de verificação a um perfil de usuário, use `ALTER PROFILE`. O exemplo a seguir associa uma função de verificação PL/SQL denominada `CUSTOM_PASSWORD_FUNCTION` ao perfil de usuário `DEFAULT`. `PASSWORD_VERIFY_FUNCTION` é o nome do recurso do perfil da Oracle. 

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

Para ver quais perfis de usuários estão associados a quais funções de verificação, consulte `DBA_PROFILES`. O exemplo a seguir obtém os perfis associados à função de verificação personalizada chamada `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
```

O exemplo a seguir obtém todos os perfis e as funções de verificação de senha às quais eles estão associados. 

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

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

O procedimento `create_passthrough_verify_fcn` é compatível com todas as versões do RDS para Oracle.

Você pode criar uma função personalizada para verificar senhas usando o procedimento do Amazon RDS `rdsadmin.rdsadmin_password_verify.create_passthrough_verify_fcn`. O procedimento `create_passthrough_verify_fcn` tem os seguintes parâmetros. 


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `p_verify_function_name`  |  varchar2  |  —  |  Sim  |  O nome da sua função de verificação personalizada. Esta é uma função de wrapper criada por você no esquema SYS e não contém lógica de verificação. Você atribui essa função a perfis de usuário.   | 
|  `p_target_owner`  |  varchar2  |  —  |  Sim  |  O proprietário do esquema da sua função de verificação personalizada.  | 
|  `p_target_function_name`  |  varchar2  |  —  |  Sim  |  O nome da sua função personalizada existente que contém a lógica de verificação. Sua função personalizada deve retornar um valor booliano. Sua função deverá retornar `true` se a senha é válida e `false` se a senha for inválida.   | 

O exemplo a seguir cria uma função de verificação de senha que usa a lógica da função chamada `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 associar a função de verificação a um perfil de usuário, use `alter profile`. O seguinte exemplo associa a função de verificação ao perfil de usuário `DEFAULT`. 

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

## Configuração de um servidor DNS personalizado
<a name="Appendix.Oracle.CommonDBATasks.CustomDNS"></a>

O Amazon RDS oferece suporte para acesso à rede de saída nas suas instâncias de bancos de dados que executam o Oracle. Para obter mais informações sobre acesso à rede de saída, inclusive pré-requisitos, consulte [Configurar o acesso UTL\$1HTTP usando certificados e uma carteira Oracle](Oracle.Concepts.ONA.md). 

O Amazon RDS Oracle permite a resolução do Serviço de Nomes de Domínio (DNS) de um servidor DNS personalizado que pertence ao cliente. Você pode resolver apenas nomes de domínio totalmente qualificados a partir da sua instância de banco de dados do Amazon RDS por meio do seu servidor DNS personalizado. 

Após a configuração do seu servidor de nomes DNS personalizado, demora até 30 minutos para propagar as alterações na sua instância de banco de dados. Depois que as alterações são propagadas para sua a instância de banco de dados, todo o tráfego de rede de saída que requer uma pesquisa de DNS consulta o servidor DNS por meio da porta 53. 

Para configurar um servidor DNS personalizado para a instância de banco de dados do Amazon RDS for Oracle, faça o seguinte: 
+ Nas opções de DHCP anexadas à nuvem privada virtual (VPC), defina a opção `domain-name-servers` como o endereço IP do seu servidor de nomes DNS. Para obter mais informações, consulte [Conjuntos de opções de DHCP](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html). 
**nota**  
A opção `domain-name-servers` aceita até quatro valores, mas sua instância de banco de dados do Amazon RDS usa apenas o primeiro valor. 
+ Certifique-se de que seu servidor DNS possa resolver todas as consultas de pesquisa, incluindo nomes DNS públicos, nomes DNS privados do Amazon EC2 e nomes DNS específicos do cliente. Se o tráfego de rede de saída contiver pesquisas de DNS que o seu servidor DNS não pode manipular, este deverá ter provedores de DNS upstream configurados. 
+ Configure seu servidor DNS para produzir respostas de protocolo UDP de 512 bytes ou menos. 
+ Configure seu servidor DNS para produzir respostas de protocolo TCP de 1024 bytes ou menos. 
+ Configure seu servidor DNS para permitir tráfego de entrada das suas instâncias de banco de dados do Amazon RDS pela porta 53. Se o seu servidor DNS estiver em uma Amazon VPC, ela deverá ter um grupo de segurança que contenha regras de entrada que permitam tráfego UDP e TCP na porta 53. Se o seu servidor DNS não estiver em uma Amazon VPC, ele deverá ter uma lista de permissões de firewall apropriada para permitir o tráfego de entrada UDP e TCP na porta 53.

  Para obter mais informações, consulte [Grupos de segurança para sua VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) e [Adição e remoção de regras](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#AddRemoveRules). 
+ Configurar a VPC da sua instância de banco de dados do Amazon RDS para permitir o tráfego de saída por meio da porta 53. Sua VPC deve ter um security group que contém regras de saída que permitem o tráfego TCP e UDP na porta 53. 

  Para obter mais informações, consulte [Grupos de segurança para sua VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) e [Adição e remoção de regras](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#AddRemoveRules). 
+ O caminho de roteamento entre a instância de banco de dados do Amazon RDS e o servidor DNS deve ser configurado corretamente para permitir o tráfego DNS. 
  + Se a instância de banco de dados do Amazon RDS e o servidor DNS não estiverem na mesma VPC, uma conexão de emparelhamento precisará ser configurada entre eles. Para obter mais informações, consulte [O que é emparelhamento de VPC?](https://docs.aws.amazon.com/vpc/latest/peering/Welcome.html) 

# Configurar e anular configuração de eventos de diagnóstico do sistema
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents"></a>

Para configurar e anular a configuração de eventos de diagnóstico no nível da sessão, você pode usar a instrução Oracle SQL `ALTER SESSION SET EVENTS`. No entanto, para definir eventos no nível do sistema, você não pode usar o Oracle SQL. Em vez disso, use os procedimentos de evento do sistema no pacote `rdsadmin.rdsadmin_util`. Os procedimentos de eventos do sistema estão disponíveis nas seguintes versões do mecanismo:
+ Todas as versões do Oracle Database 21c
+ 19.0.0.0.ru-2020-10.rur-2020-10.r1 e versões posteriores do Oracle Database 19c

  Consulte mais informações em [Version 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) em *Notas de lançamento do Amazon RDS para Oracle*.

**Importante**  
Internamente, o pacote `rdsadmin.rdsadmin_util` define eventos usando a instrução `ALTER SYSTEM SET EVENTS`. Essa instrução `ALTER SYSTEM` não está incluída na documentação do Oracle Database. Alguns eventos de diagnóstico do sistema podem gerar grandes quantidades de informações de monitoramento, causar contenção ou afetar a disponibilidade do banco de dados. Recomendamos que você teste eventos de diagnóstico específicos em seu banco de dados de não produção e defina apenas eventos em seu banco de dados de produção sob orientação do Oracle Support.

## Listar eventos de diagnóstico do sistema permitidos
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.listing"></a>

Para listar os eventos do sistema que você pode definir, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.list_allowed_system_events`. Este procedimento não aceita parâmetros.

O exemplo a seguir lista todos os eventos do sistema que você pode definir.

```
SET SERVEROUTPUT ON
EXEC rdsadmin.rdsadmin_util.list_allowed_system_events;
```

A saída de exemplo a seguir lista os números de eventos e suas descrições. Use os procedimentos `set_system_event` do Amazon RDS para definir esses eventos e `unset_system_event` para desconfigurá-los.

```
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**  
A lista dos eventos do sistema permitidos pode mudar ao longo do tempo. Para se certificar de que você tem a lista mais recente de eventos qualificados, use `rdsadmin.rdsadmin_util.list_allowed_system_events`.

## Definir eventos de diagnóstico do sistema
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.setting"></a>

Para definir um evento do sistema, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.set_system_event`. Você só pode definir eventos listados na saída do `rdsadmin.rdsadmin_util.list_allowed_system_events`. O procedimento `set_system_event` tem os parâmetros a seguir.


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `p_event`  |  número  |  —  |  Sim  |  O número do evento do sistema. O valor deve ser um dos números de eventos relatados por `list_allowed_system_events`.  | 
|  `p_level`  |  número  |  —  |  Sim  |  O nível do evento. Consulte a documentação do Oracle Database ou o Oracle Support para obter descrições de diferentes valores de nível.  | 

O procedimento `set_system_event` constrói e executa as instruções `ALTER SYSTEM SET EVENTS` necessárias de acordo com os seguintes princípios:
+ O tipo de evento (`context` ou `errorstack`) é determinado automaticamente.
+ Uma instrução no formulário `ALTER SYSTEM SET EVENTS 'event LEVEL event_level'` define os eventos de contexto. Esta notação é equivalente a `ALTER SYSTEM SET EVENTS 'event TRACE NAME CONTEXT FOREVER, LEVEL event_level'`.
+ Uma instrução no formulário `ALTER SYSTEM SET EVENTS 'event ERRORSTACK (event_level)'` define os eventos de pilha de erros. Esta notação é equivalente a `ALTER SYSTEM SET EVENTS 'event TRACE NAME ERRORSTACK LEVEL event_level'`.

O exemplo a seguir define o evento 942 no nível 3 e o evento 10442 no nível 10. A amostra de saída está incluída.

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

## Listar eventos de diagnóstico do sistema definidos
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.listing-set"></a>

Para listar os eventos do sistema que estão definidos no momento, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.list_set_system_events`. Este procedimento relata apenas os eventos definidos no nível do sistema por `set_system_event`.

O exemplo a seguir lista os eventos ativos do sistema.

```
SET SERVEROUTPUT ON
EXEC rdsadmin.rdsadmin_util.list_set_system_events;
```

A saída de exemplo a seguir mostra a lista de eventos, o tipo de evento, o nível no qual os eventos estão definidos no momento e a hora em que o evento foi definido.

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

## Desconfigurar eventos de diagnóstico do sistema
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.unsetting"></a>

Para desconfigurar um evento do sistema, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.unset_system_event`. Você só pode desconfigurar eventos listados na saída do `rdsadmin.rdsadmin_util.list_allowed_system_events`. O procedimento `unset_system_event` aceita o seguinte parâmetro.


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `p_event`  |  número  |  —  |  Sim  |  O número do evento do sistema. O valor deve ser um dos números de eventos relatados por `list_allowed_system_events`.  | 

O exemplo a seguir desconfigura os eventos 942 e 10442. A amostra de saída está incluída.

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