

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

Veja a seguir como executar determinadas tarefas comuns de DBA relacionadas ao registro em log 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. 

Para obter mais informações, consulte [Arquivos de log do banco de dados do Amazon RDS para Oracle](USER_LogAccess.Concepts.Oracle.md). 

**Topics**
+ [Definição do registro em log forçado](#Appendix.Oracle.CommonDBATasks.SettingForceLogging)
+ [Definição do registro em log complementar](#Appendix.Oracle.CommonDBATasks.AddingSupplementalLogging)
+ [Alternância de arquivos de log online](#Appendix.Oracle.CommonDBATasks.SwitchingLogfiles)
+ [Adição de logs redo online](#Appendix.Oracle.CommonDBATasks.RedoLogs)
+ [Descarte de logs redo online](#Appendix.Oracle.CommonDBATasks.DroppingRedoLogs)
+ [Redimensionamento de logs redo online](Appendix.Oracle.CommonDBATasks.ResizingRedoLogs.md)
+ [Retenção de logs redo arquivados](Appendix.Oracle.CommonDBATasks.RetainRedoLogs.md)
+ [Acessando logs de refazimento online e arquivados](Appendix.Oracle.CommonDBATasks.Log.Download.md)
+ [Baixar logs de refazimento arquivados do Amazon S3](Appendix.Oracle.CommonDBATasks.download-redo-logs.md)

## Definição do registro em log forçado
<a name="Appendix.Oracle.CommonDBATasks.SettingForceLogging"></a>

No modo de registro em log forçado, o Oracle registra todas as alterações no banco de dados, exceto as alterações em espaços de tabela temporários e em segmentos temporários (as cláusulas `NOLOGGING` são ignoradas). Para obter mais informações, consulte [Specifying FORCE LOGGING mode](https://docs.oracle.com/cd/E11882_01/server.112/e25494/create.htm#ADMIN11096) na documentação da Oracle. 

Para definir o registro em log forçado, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.force_logging`. O procedimento `force_logging` 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 colocar o banco de dados no modo de registro em log forçado, `false` para remover o banco de dados do modo de registro em log forçado.   | 

O exemplo a seguir coloca o banco de dados no modo de registro em log forçado. 

```
EXEC rdsadmin.rdsadmin_util.force_logging(p_enable => true);
```

## Definição do registro em log complementar
<a name="Appendix.Oracle.CommonDBATasks.AddingSupplementalLogging"></a>

Se você habilitar o registro em log suplementar, o LogMiner terá as informações necessárias para oferecer suporte a linhas encadeadas e tabelas clusterizadas. Para obter mais informações, consulte [Supplemental logging](https://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL1582) na documentação da Oracle.

Por padrão, o banco de dados Oracle não habilita o registro em log complementar. Para habilitar e desabilitar o registro em log complementar, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.alter_supplemental_logging`. Para obter mais informações sobre como o Amazon RDS gerencia a retenção de logs redo arquivados para instâncias de bancos de dados Oracle, consulte [Retenção de logs redo arquivados](Appendix.Oracle.CommonDBATasks.RetainRedoLogs.md). 

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


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `p_action`  |  varchar2  |  —  |  Sim  |  `'ADD'` para adicionar o registro em log complementar, `'DROP'` para descartar o registro em log complementar.   | 
|  `p_type`  |  varchar2  |  nulo  |  Não  |  O tipo de registro em log complementar. Os valores válidos são `'ALL'`, `'FOREIGN KEY'`, `'PRIMARY KEY'`, `'UNIQUE'` ou `PROCEDURAL`.   | 

O exemplo a seguir habilita o registro em log complementar.

```
begin
    rdsadmin.rdsadmin_util.alter_supplemental_logging(
        p_action => 'ADD');
end;
/
```

O exemplo a seguir habilita o registro em log complementar para todas as colunas de tamanho máximo com comprimento fixo. 

```
begin
    rdsadmin.rdsadmin_util.alter_supplemental_logging(
        p_action => 'ADD',
        p_type   => 'ALL');
end;
/
```

O exemplo a seguir habilita o registro em log complementar para colunas de chave primária. 

```
begin
    rdsadmin.rdsadmin_util.alter_supplemental_logging(
        p_action => 'ADD',
        p_type   => 'PRIMARY KEY');
end;
/
```

## Alternância de arquivos de log online
<a name="Appendix.Oracle.CommonDBATasks.SwitchingLogfiles"></a>

Para alternar arquivos de log, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.switch_logfile`. O procedimento `switch_logfile` não tem parâmetros. 

O exemplo a seguir alterna arquivos de log.

```
EXEC rdsadmin.rdsadmin_util.switch_logfile;
```

## Adição de logs redo online
<a name="Appendix.Oracle.CommonDBATasks.RedoLogs"></a>

Uma instância de banco de dados do Amazon RDS executando o Oracle começa com quatro logs redo online, cada um com 128 MB. Para adicionar mais logs redo, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.add_logfile`. 

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

**nota**  
Os parâmetros são mutuamente exclusivos.


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `bytes`  |  positivo  |  nulo  |  Não  |  O tamanho do arquivo de log em bytes.  Use esse parâmetro somente se o tamanho do log for inferior a 2.147.483.648 bytes (2 GiB). Caso contrário, o RDS emitirá um erro. Entretanto, para tamanhos de log acima desse valor em bytes, use o parâmetro `p_size`.  | 
|  `p_size`  |  varchar2  |  —  |  Sim  |  O tamanho do arquivo de log em quilobytes (K), megabytes (M) ou gigabytes (G).  | 

O comando a seguir adiciona um arquivo de log de 100 MB.

```
EXEC rdsadmin.rdsadmin_util.add_logfile(p_size => '100M');
```

## Descarte de logs redo online
<a name="Appendix.Oracle.CommonDBATasks.DroppingRedoLogs"></a>

Para descartar logs redo, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.drop_logfile`. O procedimento `drop_logfile` tem os seguintes parâmetros. 


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `grp`  |  positivo  |  —  |  Sim  |  O número do grupo do log.  | 

O exemplo a seguir descarta o log com o número de grupo 3. 

```
EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 3);
```

Você só pode descartar logs que tenham um status de não utilizado ou inativo. O exemplo a seguir obtém os status dos logs.

```
SELECT GROUP#, STATUS FROM V$LOG;

GROUP#     STATUS
---------- ----------------
1          CURRENT
2          INACTIVE
3          INACTIVE
4          UNUSED
```

# Redimensionamento de logs redo online
<a name="Appendix.Oracle.CommonDBATasks.ResizingRedoLogs"></a>

Uma instância de banco de dados do Amazon RDS executando o Oracle começa com quatro logs redo online, cada um com 128 MB. O exemplo a seguir mostra como você pode usar procedimentos do Amazon RDS para redimensionar seus logs de 128 MB cada para 512 MB cada. 

```
/* Query V$LOG to see the logs.          */
/* You start with 4 logs of 128 MB each. */

SELECT GROUP#, BYTES, STATUS FROM V$LOG;

GROUP#     BYTES      STATUS
---------- ---------- ----------------
1          134217728  INACTIVE
2          134217728  CURRENT
3          134217728  INACTIVE
4          134217728  INACTIVE


/* Add four new logs that are each 512 MB */

EXEC rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912);
EXEC rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912);
EXEC rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912);
EXEC rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912);


/* Query V$LOG to see the logs. */ 
/* Now there are 8 logs.        */

SELECT GROUP#, BYTES, STATUS FROM V$LOG;

GROUP#     BYTES      STATUS
---------- ---------- ----------------
1          134217728  INACTIVE
2          134217728  CURRENT
3          134217728  INACTIVE
4          134217728  INACTIVE
5          536870912  UNUSED
6          536870912  UNUSED
7          536870912  UNUSED
8          536870912  UNUSED


/* Drop each inactive log using the group number. */

EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 1);
EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 3);
EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 4);


/* Query V$LOG to see the logs. */ 
/* Now there are 5 logs.        */

select GROUP#, BYTES, STATUS from V$LOG;

GROUP#     BYTES      STATUS
---------- ---------- ----------------
2          134217728  CURRENT
5          536870912  UNUSED
6          536870912  UNUSED
7          536870912  UNUSED
8          536870912  UNUSED


/* Switch logs so that group 2 is no longer current. */

EXEC rdsadmin.rdsadmin_util.switch_logfile;


/* Query V$LOG to see the logs.        */ 
/* Now one of the new logs is current. */

SQL>SELECT GROUP#, BYTES, STATUS FROM V$LOG;

GROUP#     BYTES      STATUS
---------- ---------- ----------------
2          134217728  ACTIVE
5          536870912  CURRENT
6          536870912  UNUSED
7          536870912  UNUSED
8          536870912  UNUSED


/* If the status of log 2 is still "ACTIVE", issue a checkpoint to clear it to "INACTIVE".  */

EXEC rdsadmin.rdsadmin_util.checkpoint;


/* Query V$LOG to see the logs.            */ 
/* Now the final original log is inactive. */

select GROUP#, BYTES, STATUS from V$LOG;

GROUP#     BYTES      STATUS
---------- ---------- ----------------
2          134217728  INACTIVE
5          536870912  CURRENT
6          536870912  UNUSED
7          536870912  UNUSED
8          536870912  UNUSED


# Drop the final inactive log.

EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 2);


/* Query V$LOG to see the logs.    */ 
/* Now there are four 512 MB logs. */

SELECT GROUP#, BYTES, STATUS FROM V$LOG;

GROUP#     BYTES      STATUS
---------- ---------- ----------------
5          536870912  CURRENT
6          536870912  UNUSED
7          536870912  UNUSED
8          536870912  UNUSED
```

# Retenção de logs redo arquivados
<a name="Appendix.Oracle.CommonDBATasks.RetainRedoLogs"></a>

Você pode reter logs de refazimento arquivados localmente emsua instância de banco de dados para uso com produtos como o Oracle LogMiner (`DBMS_LOGMNR`). Depois de ter retido os redo logs, você pode usar o LogMiner para analisar esses logs. Para obter mais informações, consulte [Using LogMiner to analyze redo log files](http://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm) na documentação da Oracle. 

Para reter logs redo arquivados, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.set_configuration`. Se você usar esse procedimento em uma instância primária no Oracle Data Guard, o RDS alterará a configuração de retenção do log de arquivamento na instância primária e nas réplicas de leitura abertas, mas não nas réplicas montadas. O RDS retém os últimos logs de redo arquivados em réplicas montadas por um curto período. O RDS exclui automaticamente os logs mais antigos baixados para as réplicas montadas.

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


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `name`  |  varchar  |  —  |  Sim  |  O nome da configuração a ser atualizada. Para alterar as horas de retenção do log de redo arquivado, defina o nome como `archivelog retention hours`.  | 
|  `value`  |  varchar  |  —  |  Sim  |  O valor para a configuração. Defina o valor como o número de horas para reter os logs.  | 

O exemplo a seguir retém 24 horas de logs redo. 

```
begin
    rdsadmin.rdsadmin_util.set_configuration(
        name  => 'archivelog retention hours',
        value => '24');
end;
/
commit;
```

**nota**  
A confirmação é necessária para que a alteração entre em vigor.

Para visualizar por quanto tempo os logs redo arquivados são mantidos para a instância de banco de dados, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.show_configuration`.

O seguinte exemplo mostra o tempo de retenção do log.

```
set serveroutput on
EXEC rdsadmin.rdsadmin_util.show_configuration;
```

A saída mostra a definição atual de `archivelog retention hours`. A seguinte saída mostra que logs redo arquivados são mantidos por 48 horas.

```
NAME:archivelog retention hours
VALUE:48
DESCRIPTION:ArchiveLog expiration specifies the duration in hours before archive/redo log files are automatically deleted.
```

Como os logs redo arquivados são retidos na sua instância de banco de dados, certifique-se de que essa instância tenha armazenamento alocado suficiente para os logs retidos. Para determinar quanto espaço sua instância de banco de dados usou nas últimas X horas, você pode executar a consulta a seguir, substituindo X pelo número de horas. 

```
SELECT SUM(BLOCKS * BLOCK_SIZE) bytes 
  FROM V$ARCHIVED_LOG
 WHERE FIRST_TIME >= SYSDATE-(X/24) AND DEST_ID=1;
```

O RDS for Oracle apenas gera logs de refazimento arquivados se o período de retenção de backup de sua instância de banco de dados for maior que zero. Por padrão, o período de retenção de backup é maior que zero.

Quando o período de retenção de logs arquivados expira, o RDS for Oracle remove os logs de refazimento arquivados de sua instância de banco de dados. Para oferecer suporte à restauração point-in-time de sua instância de banco de dados, o Amazon RDS retém os logs de refazimento arquivados fora de sua instância de banco de dados com base no período de retenção de backup. Para modificar o período de retenção de backup, consulte [Modificar uma instância de banco de dados do Amazon RDS](Overview.DBInstance.Modifying.md). 

**nota**  
Em alguns casos, você pode estar usando o JDBC no Linux para baixar logs redo arquivados e fazer testes com tempos de latência longos e redefinições de conexão. Nesses casos, os problemas podem ser causados pela configuração padrão do gerador de números aleatórios no seu cliente Java. Recomendamos que você configure seus drivers JDBC para usar um gerador de números aleatórios sem bloqueio.

# Acessando logs de refazimento online e arquivados
<a name="Appendix.Oracle.CommonDBATasks.Log.Download"></a>

Talvez você queira acessar seus arquivos de log redo online e arquivados para exploração com ferramentas externas, como o GoldenGate, o Attunity e o Informatica, entre outras. Para acessar esses arquivos, faça o seguinte:

1. Crie objetos de diretório que forneçam acesso somente leitura aos caminhos de arquivos físicos.

   Utilizar `rdsadmin.rdsadmin_master_util.create_archivelog_dir` e `rdsadmin.rdsadmin_master_util.create_onlinelog_dir`.

1. Leia os arquivos usando PL/SQL.

   É possível ler os arquivos usando PL/SQL. Para obter mais informações sobre como ler arquivos a partir de objetos de diretório, consulte [Listagem de arquivos no diretório de uma instância de banco de dados](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.ListDirectories) e [Leitura de arquivos no diretório de uma instância de banco de dados](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.ReadingFiles).

O acesso a logs de transação é compatível com as seguintes versões:
+ Oracle Database 21c
+ Oracle Database 19c

O código a seguir cria diretórios que fornecem acesso somente leitura aos seus arquivos de log redo online e arquivados: 

**Importante**  
Esse código também revoga o privilégio `DROP ANY DIRECTORY`.

```
EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir;
EXEC rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
```

O código a seguir descarta os diretórios para seus arquivos de log redo online e arquivados. 

```
EXEC rdsadmin.rdsadmin_master_util.drop_archivelog_dir;
EXEC rdsadmin.rdsadmin_master_util.drop_onlinelog_dir;
```

O código a seguir concede e revoga o privilégio `DROP ANY DIRECTORY`.

```
EXEC rdsadmin.rdsadmin_master_util.revoke_drop_any_directory;
EXEC rdsadmin.rdsadmin_master_util.grant_drop_any_directory;
```

# Baixar logs de refazimento arquivados do Amazon S3
<a name="Appendix.Oracle.CommonDBATasks.download-redo-logs"></a>

É possível baixar logs de refazimento arquivados em sua instância de banco de dados usando o pacote `rdsadmin.rdsadmin_archive_log_download`. Se os logs de refazimento arquivados não estiverem mais em sua instância de banco de dados, você poderá baixá-los novamente do Amazon S3. Então você pode extrair os logs ou usá-los para recuperar ou replicar seu banco de dados.

**nota**  
Não é possível baixar logs de redo arquivados em instâncias de réplica de leitura.

## Baixar logs de refazimento arquivados: etapas básicas
<a name="Appendix.Oracle.CommonDBATasks.download-redo-logs.basic-process"></a>

A disponibilidade dos logs de refazimento arquivados depende das seguintes políticas de retenção:
+ Política de retenção de backup: os logs dentro dessa política estão disponíveis no Amazon S3. Os logs fora dessa política são removidos.
+ Política de retenção de logs arquivados: os logs dentro dessa política estão disponíveis em sua instância de banco de dados. Os logs fora dessa política são removidos.

Se os logs não estiverem em sua instância, mas estiverem protegidos pelo período de retenção de backup, use `rdsadmin.rdsadmin_archive_log_download` para baixar novamente. O RDS for Oracle salva os logs no diretório `/rdsdbdata/log/arch` em sua instância de banco de dados.

**Para baixar logs de refazimento arquivados do Amazon S3**

1. Configure seu período de retenção para garantir que os redo logs arquivados que foram baixados sejam retidos pelo tempo em que você precisar deles. Não se esqueça de `COMMIT` a alteração. 

   O RDS retém os logs baixados de acordo com a política de retenção de logs arquivados, a partir do momento em que os logs foram baixados. Para saber como definir a política de retenção, consulte [Retenção de logs redo arquivados](Appendix.Oracle.CommonDBATasks.RetainRedoLogs.md).

1. Aguarde até 5 minutos para que a alteração da política de retenção de logs arquivados seja implementada.

1. Baixe logs de refazimento arquivados do Amazon S3 usando `rdsadmin.rdsadmin_archive_log_download`.

   Para obter mais informações, consulte [Baixar um único log de refazimento arquivado](#Appendix.Oracle.CommonDBATasks.download-redo-logs.single-log) e [Baixar uma série de logs de refazimento arquivados](#Appendix.Oracle.CommonDBATasks.download-redo-logs.series).
**nota**  
O RDS verifica automaticamente o armazenamento disponível antes de baixar. Se os logs solicitados consumirem uma alta porcentagem de espaço, você receberá um alerta.

1. Confirme se o download dos logs do Amazon S3 foi concluído corretamente.

   Você pode visualizar o status de uma tarefa de download em um arquivo bdump. Os arquivos bdump têm o nome de caminho `/rdsdbdata/log/trace/dbtask-task-id.log`. Na etapa de download anterior, execute uma instrução `SELECT` que retorna o ID da tarefa em um tipo de dados `VARCHAR2`. Para obter mais informações, veja exemplos semelhantes em [Monitorar o status de uma transferência de arquivo](oracle-s3-integration.using.md#oracle-s3-integration.using.task-status).

## Baixar um único log de refazimento arquivado
<a name="Appendix.Oracle.CommonDBATasks.download-redo-logs.single-log"></a>

Para baixar um único log de refazimento arquivado para o diretório `/rdsdbdata/log/arch`, use `rdsadmin.rdsadmin_archive_log_download.download_log_with_seqnum`. Esse procedimento tem o seguinte parâmetro.


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `seqnum`  |  número  |  —  |  Sim  |  O número de sequência do log de refazimento arquivado.  | 

O exemplo a seguir baixa o log com o número de sequência 20.

```
SELECT rdsadmin.rdsadmin_archive_log_download.download_log_with_seqnum(seqnum => 20) 
       AS TASK_ID 
FROM   DUAL;
```

## Baixar uma série de logs de refazimento arquivados
<a name="Appendix.Oracle.CommonDBATasks.download-redo-logs.series"></a>

Para baixar uma série de logs de refazimento arquivados para o diretório `/rdsdbdata/log/arch`, use `download_logs_in_seqnum_range`. Você só pode baixar até 300 logs por solicitação. O procedimento `download_logs_in_seqnum_range` tem os seguintes parâmetros.


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `start_seq`  |  número  |  —  |  Sim  |  O número de sequência inicial da série.  | 
|  `end_seq`  |  número  |  —  |  Sim  |  O número de sequência final da série.  | 

O exemplo a seguir baixa os logs da sequência 50 a 100.

```
SELECT rdsadmin.rdsadmin_archive_log_download.download_logs_in_seqnum_range(start_seq => 50, end_seq => 100) 
       AS TASK_ID 
FROM   DUAL;
```