Realização de tarefas comuns relacionadas ao log para instâncias de banco de dados Oracle - Amazon Relational Database Service

Realização de tarefas comuns relacionadas ao log para instâncias de banco de dados Oracle

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

Definição do registro em log forçado

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 na documentação da Oracle.

Para definir o registro em log forçado, use o procedimento rdsadmin.rdsadmin_util.force_logging do Amazon RDS. 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

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 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 rdsadmin.rdsadmin_util.alter_supplemental_logging do Amazon RDS. 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.

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

Para alternar arquivos de log, use o procedimento rdsadmin.rdsadmin_util.switch_logfile do Amazon RDS. 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

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 rdsadmin.rdsadmin_util.add_logfile do Amazon RDS.

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.

p_size

varchar2

Sim

O tamanho do arquivo de log. Você pode especificar o tamanho 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

Para descartar logs redo, use o procedimento rdsadmin.rdsadmin_util.drop_logfile do Amazon RDS. 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

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

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 na documentação da Oracle.

Para reter logs redo arquivados, use o procedimento rdsadmin.rdsadmin_util.set_configuration do Amazon RDS. 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.

value

varchar

Sim

O valor para a configuração.

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 rdsadmin.rdsadmin_util.show_configuration do Amazon RDS.

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.

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

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.

  2. 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 e Leitura de arquivos no diretório de uma instância de banco de dados.

O acesso a logs de transação é compatível com as seguintes versões:

  • Oracle Database 21c

  • Oracle Database 19c

  • Oracle Database 12c Versão 2 (12.2.0.1)

  • Oracle Database 12c Versão 1 (12.1)

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

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

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

  3. 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 e Baixar uma série de logs de refazimento arquivados.

    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.

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

Baixar um único log de refazimento arquivado

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

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;