

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

Veja a seguir como executar diversas tarefas de DBA nas instâncias de banco 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**
+ [Criar e eliminar diretórios no espaço de armazenamento de dados principal](#Appendix.Oracle.CommonDBATasks.NewDirectories)
+ [Listagem de arquivos no diretório de uma instância de banco de dados](#Appendix.Oracle.CommonDBATasks.ListDirectories)
+ [Leitura de arquivos no diretório de uma instância de banco de dados](#Appendix.Oracle.CommonDBATasks.ReadingFiles)
+ [Acessar arquivos do Opatch](#Appendix.Oracle.CommonDBATasks.accessing-opatch-files)
+ [Gerenciando de tarefas do advisor](#Appendix.Oracle.CommonDBATasks.managing-advisor-tasks)
+ [Transportar espaços para tabela](rdsadmin_transport_util.md)

## Criar e eliminar diretórios no espaço de armazenamento de dados principal
<a name="Appendix.Oracle.CommonDBATasks.NewDirectories"></a>

Para criar diretórios, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.create_directory`. É possível criar até 10.000 diretórios, todas localizados no seu espaço de armazenamento físico de dados principal. Para criar diretórios, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.drop_directory`.

Os procedimentos `create_directory` e `drop_directory` têm o parâmetro necessário a seguir. 


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
| `p_directory_name` | VARCHAR2 | — | Sim | O nome do diretório. | 

O exemplo a seguir cria um novo diretório chamado `PRODUCT_DESCRIPTIONS`. 

```
EXEC rdsadmin.rdsadmin_util.create_directory(p_directory_name => 'product_descriptions');
```

O dicionário de dados armazena o nome do diretório em maiúsculas. Você pode listar os diretórios consultando `DBA_DIRECTORIES`. O sistema escolhe automaticamente o nome do caminho do host real. O exemplo a seguir obtém o caminho do diretório para o diretório chamado `PRODUCT_DESCRIPTIONS`: 

```
SELECT DIRECTORY_PATH 
  FROM DBA_DIRECTORIES 
 WHERE DIRECTORY_NAME='PRODUCT_DESCRIPTIONS';
        
DIRECTORY_PATH
----------------------------------------
/rdsdbdata/userdirs/01
```

O nome de usuário mestre para a instância de banco de dados tem privilégios de leitura e gravação no novo diretório e pode conceder acesso a outros usuários. Privilégios `EXECUTE` não estão disponíveis para diretórios em uma instância de banco de dados. Os diretórios são criados no seu espaço de armazenamento físico de dados principal e consumirão espaço e largura de banda de E/S. 

O exemplo a seguir elimina o diretório chamado `PRODUCT_DESCRIPTIONS`. 

```
EXEC rdsadmin.rdsadmin_util.drop_directory(p_directory_name => 'product_descriptions');
```

**nota**  
Também é possível descartar um diretório usando o comando do Oracle SQ `DROP DIRECTORY`. 

Descartar um diretório não remove seu conteúdo. Como o procedimento `rdsadmin.rdsadmin_util.create_directory` pode reutilizar nomes de caminhos, os arquivos em diretórios eliminados podem aparecer em um diretório recém-criado. Antes de eliminar um diretório, recomendamos que você use `UTL_FILE.FREMOVE` para remover arquivos do diretório. Para obter mais informações, consulte [Procedimento FREMOVE](https://docs.oracle.com/database/121/ARPLS/u_file.htm#ARPLS70924) na documentação da Oracle.

## Listagem de arquivos no diretório de uma instância de banco de dados
<a name="Appendix.Oracle.CommonDBATasks.ListDirectories"></a>

Para listar os arquivos em um diretório, use o procedimento do Amazon RDS `rdsadmin.rds_file_util.listdir`. Esse procedimento não é compatível com uma réplica da Oracle. O procedimento `listdir` tem os seguintes parâmetros. 


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
| `p_directory` | varchar2 | — | Sim | O nome do diretório a ser listado. | 

O exemplo a seguir concede privilégios de leitura/gravação no diretório `PRODUCT_DESCRIPTIONS` para o usuário `rdsadmin` e, em seguida, lista os arquivos neste diretório. 

```
GRANT READ,WRITE ON DIRECTORY PRODUCT_DESCRIPTIONS TO rdsadmin;
SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'PRODUCT_DESCRIPTIONS'));
```

## Leitura de arquivos no diretório de uma instância de banco de dados
<a name="Appendix.Oracle.CommonDBATasks.ReadingFiles"></a>

Para ler um arquivo de texto, use o procedimento do Amazon RDS `rdsadmin.rds_file_util.read_text_file`. O procedimento `read_text_file` tem os seguintes parâmetros. 


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
| `p_directory` | varchar2 | — | Sim | O nome do diretório que contém o arquivo. | 
| `p_filename` | varchar2 | — | Sim | O nome do arquivo a ser lido. | 

O exemplo a seguir cria o arquivo `rice.txt` no diretório `PRODUCT_DESCRIPTIONS`. 

```
declare
  fh sys.utl_file.file_type;
begin
  fh := utl_file.fopen(location=>'PRODUCT_DESCRIPTIONS', filename=>'rice.txt', open_mode=>'w');
  utl_file.put(file=>fh, buffer=>'AnyCompany brown rice, 15 lbs');
  utl_file.fclose(file=>fh);
end;
/
```

O exemplo a seguir lê o arquivo `rice.txt` do diretório `PRODUCT_DESCRIPTIONS`. 

```
SELECT * FROM TABLE
    (rdsadmin.rds_file_util.read_text_file(
        p_directory => 'PRODUCT_DESCRIPTIONS',
        p_filename  => 'rice.txt'));
```

## Acessar arquivos do Opatch
<a name="Appendix.Oracle.CommonDBATasks.accessing-opatch-files"></a>

O Opatch é um utilitário do Oracle que permite a aplicação e a reversão de patches para o software do Oracle. O mecanismo do Oracle para determinar quais patches foram aplicados a um banco de dados é o comando `opatch lsinventory`. Para abrir solicitações de serviço para clientes de Traga sua própria licença (BYOL – Bring Your Own Licence), o suporte do Oracle solicita o arquivo `lsinventory` e, às vezes, o arquivo `lsinventory_detail` gerado pelo Opatch.

Para oferecer uma experiência de serviço gerenciada, o Amazon RDS não fornece acesso ao shell para o Opatch. Em vez disso, o `lsinventory-{{dbv}}.txt` no diretório BDUMP contém as informações de patch relacionadas à versão atual do mecanismo. Quando você executa um upgrade principal ou secundário, o Amazon RDS atualiza `lsinventory-{{dbv}}.txt` em até uma hora após a aplicação do patch. Para verificar os patches aplicados, leia `lsinventory-{{dbv}}.txt`. Essa ação é semelhante a executar o comando `opatch lsinventory`.

**nota**  
Os exemplos nesta seção pressupõem que o diretório BDUMP seja chamado `BDUMP`. Em uma réplica de leitura, o nome do diretório BDUMP é diferente. Para saber como obter o nome BDUMP consultando `V$DATABASE.DB_UNIQUE_NAME` em uma réplica de leitura, consulte [Listar arquivos](USER_LogAccess.Concepts.Oracle.md#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.ViewingBackgroundDumpDest).

Os arquivos de inventário usam a convenção de nomenclatura do Amazon RDS `lsinventory-{{dbv}}.txt` e `lsinventory_detail-{{dbv}}.txt`, onde {{dbv}} é o nome completo da versão do banco de dados. O arquivo `lsinventory-{{dbv}}.txt` está disponível em todas as versões do banco de dados. O `lsinventory_detail-{{dbv}}.txt` correspondente está disponível em 19.0.0.0, ru-2020-01.rur-2020-01.r1 ou posterior.

Por exemplo, se a versão do seu banco de dados for 19.0.0.0.ru-2021-07.rur-2021-07.r1, os arquivos de inventário terão os nomes a seguir.

```
lsinventory-19.0.0.0.ru-2021-07.rur-2021-07.r1.txt
lsinventory_detail-19.0.0.0.ru-2021-07.rur-2021-07.r1.txt
```

Baixe os arquivos que correspondem à versão atual do mecanismo de banco de dados.

### Console
<a name="Appendix.Oracle.CommonDBATasks.accessing-opatch-files.console"></a>

**Como baixar um arquivo de inventário usando o console**

1. Abra o console do Amazon RDS em [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. No painel de navegação, escolha **Databases (Bancos de dados)**.

1. Escolha o nome da instância de banco de dados que contém o arquivo de log que você deseja visualizar.

1. Escolha a guia **Logs & events (Logs e eventos)**.

1. Role para baixo até a seção **Logs**.

1. Na seção **Logs**, procure por `lsinventory`.

1. Escolha o arquivo que você deseja acessar e selecione **Download** (Baixar).

### SQL
<a name="Appendix.Oracle.CommonDBATasks.accessing-opatch-files.sql"></a>

Para ler o `lsinventory-{{dbv}}.txt` em um cliente SQL, é possível usar uma instrução `SELECT`. Para esta técnica, use uma das seguintes funções `rdsadmin`: `rdsadmin.rds_file_util.read_text_file` ou `rdsadmin.tracefile_listing`.

Na consulta de exemplo a seguir, substitua {{dbv}} pela versão do seu banco de dados Oracle. Por exemplo, a versão do seu banco de dados pode ser 19.0.0.0.ru-2020-04.rur-2020-04.r1.

```
SELECT text
FROM   TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'lsinventory-{{dbv}}.txt'));
```

### PL/SQL
<a name="Appendix.Oracle.CommonDBATasks.accessing-opatch-files.plsql"></a>

Para ler o `lsinventory-{{dbv}}.txt` em um cliente SQL, é possível escrever um programa PL/SQL. Esse programa usa `utl_file` para ler o arquivo e `dbms_output` para imprimi-lo. Esses são pacotes fornecidos pelo Oracle. 

No programa de exemplo a seguir, substitua {{dbv}} pela versão do seu banco de dados Oracle. Por exemplo, a versão do seu banco de dados pode ser 19.0.0.0.ru-2020-04.rur-2020-04.r1.

```
SET SERVEROUTPUT ON
DECLARE
  v_file              SYS.UTL_FILE.FILE_TYPE;
  v_line              VARCHAR2(1000);
  v_oracle_home_type  VARCHAR2(1000);
  c_directory         VARCHAR2(30) := 'BDUMP';
  c_output_file       VARCHAR2(30) := 'lsinventory-{{dbv}}.txt';
BEGIN
  v_file := SYS.UTL_FILE.FOPEN(c_directory, c_output_file, 'r');
  LOOP
    BEGIN
      SYS.UTL_FILE.GET_LINE(v_file, v_line,1000);
      DBMS_OUTPUT.PUT_LINE(v_line);
    EXCEPTION
      WHEN no_data_found THEN
        EXIT;
    END;
  END LOOP;
END;
/
```

Ou consulte `rdsadmin.tracefile_listing` e transfira a saída para um arquivo. O exemplo a seguir transfere a saída para `/tmp/tracefile.txt`.

```
SPOOL /tmp/tracefile.txt
SELECT * 
FROM   rdsadmin.tracefile_listing 
WHERE  FILENAME LIKE 'lsinventory%';
SPOOL OFF;
```

## Gerenciando de tarefas do advisor
<a name="Appendix.Oracle.CommonDBATasks.managing-advisor-tasks"></a>

O banco de dados Oracle inclui vários advisors. Cada advisor suporta tarefas automatizadas e manuais. Você pode usar procedimentos no pacote `rdsadmin.rdsadmin_util` para gerenciar algumas tarefas do advisor.

Os procedimentos de tarefas do advisor estão disponíveis nas seguintes versões do mecanismo:
+ Oracle Database 21c (21.0.0)
+ Versão 19.0.0.0.ru-2021-01.rur-2021-01.r1 e versões posteriores do Oracle Database 19c 

  Para obter mais informações, consulte [Versão 19.0.0.0.ru-2021-01.rur-2021-01.r1](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes/oracle-version-19-0.html#oracle-version-RU-RUR.19.0.0.0.ru-2021-01.rur-2021-01.r1) em *Notas de lançamento do Amazon RDS for Oracle*.

**Topics**
+ [Definição de parâmetros para tarefas do advisor](#Appendix.Oracle.CommonDBATasks.setting-task-parameters)
+ [Desativação de AUTO\_STATS\_ADVISOR\_TASK](#Appendix.Oracle.CommonDBATasks.dropping-advisor-task)
+ [Reativação de AUTO\_STATS\_ADVISOR\_TASK](#Appendix.Oracle.CommonDBATasks.recreating-advisor-task)

### Definição de parâmetros para tarefas do advisor
<a name="Appendix.Oracle.CommonDBATasks.setting-task-parameters"></a>

Para definir parâmetros para algumas tarefas do advisor, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.advisor_task_set_parameter`. O procedimento `advisor_task_set_parameter` tem os seguintes parâmetros.


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
| `p_task_name` | varchar2 | — | Sim | O nome da tarefa do advisor cujos parâmetros você deseja alterar. Os valores a seguir são válidos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.Misc.html) | 
| `p_parameter` | varchar2 | — | Sim | O nome do parâmetro da tarefa. Para localizar parâmetros válidos para uma tarefa do advisor, execute a seguinte consulta. Substitua {{p\_task\_name}} com um valor válido para `p_task_name`:<pre>COL PARAMETER_NAME FORMAT a30<br />COL PARAMETER_VALUE FORMAT a30<br />SELECT PARAMETER_NAME, PARAMETER_VALUE<br />FROM DBA_ADVISOR_PARAMETERS<br />WHERE TASK_NAME='{{p_task_name}}'<br />AND PARAMETER_VALUE != 'UNUSED'<br />ORDER BY PARAMETER_NAME;</pre> | 
| `p_value` | varchar2 | — | Sim | O valor de um parâmetro de tarefa. Para localizar valores válidos para parâmetros de tarefa, execute a seguinte consulta. Substitua {{p\_task\_name}} com um valor válido para `p_task_name`:<pre>COL PARAMETER_NAME FORMAT a30<br />COL PARAMETER_VALUE FORMAT a30<br />SELECT PARAMETER_NAME, PARAMETER_VALUE<br />FROM DBA_ADVISOR_PARAMETERS<br />WHERE TASK_NAME='{{p_task_name}}'<br />AND PARAMETER_VALUE != 'UNUSED'<br />ORDER BY PARAMETER_NAME;</pre> | 

Os seguintes programas PL/SQL definem `ACCEPT_PLANS` como `FALSE` para `SYS_AUTO_SPM_EVOLVE_TASK`. A tarefa automatizada do Gerenciamento de Plano SQL verifica os planos e gera um relatório de suas descobertas, mas não evolui os planos automaticamente. Você pode usar um relatório para identificar novas listas de referência do plano SQL e aceitá-las manualmente.

```
BEGIN 
  rdsadmin.rdsadmin_util.advisor_task_set_parameter(
    p_task_name => 'SYS_AUTO_SPM_EVOLVE_TASK',
    p_parameter => 'ACCEPT_PLANS',
    p_value     => 'FALSE');
END;
```

Os seguintes programas PL/SQL definem `EXECUTION_DAYS_TO_EXPIRE` como `10` para `AUTO_STATS_ADVISOR_TASK`. A tarefa predefinida `AUTO_STATS_ADVISOR_TASK` é executada automaticamente na janela de manutenção uma vez por dia. O exemplo define o período de retenção para a execução da tarefa como 10 dias. 

```
BEGIN 
  rdsadmin.rdsadmin_util.advisor_task_set_parameter(
    p_task_name => 'AUTO_STATS_ADVISOR_TASK',
    p_parameter => 'EXECUTION_DAYS_TO_EXPIRE',
    p_value     => '10');
END;
```

### Desativação de AUTO\_STATS\_ADVISOR\_TASK
<a name="Appendix.Oracle.CommonDBATasks.dropping-advisor-task"></a>

Para desativar `AUTO_STATS_ADVISOR_TASK`, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.advisor_task_drop`. O procedimento `advisor_task_drop` aceita o parâmetro a seguir.


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
| `p_task_name` | varchar2 | — | Sim | O nome da tarefa do advisor a ser desabilitada. O único valor válido é `AUTO_STATS_ADVISOR_TASK`. | 

Execute o seguinte comando: `AUTO_STATS_ADVISOR_TASK`.

```
EXEC rdsadmin.rdsadmin_util.advisor_task_drop('AUTO_STATS_ADVISOR_TASK')
```

Você pode reabilitar `AUTO_STATS_ADVISOR_TASK` usando `rdsadmin.rdsadmin_util.dbms_stats_init`.

### Reativação de AUTO\_STATS\_ADVISOR\_TASK
<a name="Appendix.Oracle.CommonDBATasks.recreating-advisor-task"></a>

Para reativar `AUTO_STATS_ADVISOR_TASK`, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.dbms_stats_init`. O procedimento `dbms_stats_init` não recebe parâmetros.

O comando a seguir reativa `AUTO_STATS_ADVISOR_TASK`.

```
EXEC rdsadmin.rdsadmin_util.dbms_stats_init()
```