Diagnosticar problemas com instâncias de banco de dados do RDS para Oracle - Amazon Relational Database Service

Diagnosticar problemas com instâncias de banco de dados do RDS para Oracle

O Oracle Database inclui uma infraestrutura de diagnóstico de falhas que pode ser usada para investigar problemas do banco de dados. Na terminologia do Oracle, um problema é um erro crítico, como um erro de código ou uma corrupção de dados. Um incidente é a ocorrência de um problema. Se o mesmo erro ocorrer três vezes, a infraestrutura mostrará três incidentes desse problema. Para ter mais informações, consulte Diagnosing and resolving problems (Diagnosticar e resolver problemas) na documentação do Oracle Database.

O utilitário ADRCI (Automatic Diagnostic Repository Command Interpreter) é uma ferramenta da linha de comando Oracle usada para gerenciar dados de diagnóstico. Por exemplo, é possível usar essa ferramenta para investigar problemas e empacotar dados de diagnóstico. Um pacote de incidente inclui dados de diagnóstico de um incidente ou de todos os incidentes que fazem referência a um problema específico. Você pode fazer upload de um pacote de incidente, que é implementado como um arquivo .zip, para o suporte do Oracle.

Para oferecer uma experiência de serviço gerenciada, o Amazon RDS não fornece acesso ao shell para ADRCI. Use o pacote rdsadmin.rdsadmin_adrci_util do Amazon RDS para realizar tarefas de diagnóstico da instância de banco de dados do RDS para Oracle.

Usando as funções em rdsadmin_adrci_util, é possível listar e empacotar problemas e incidentes, além de mostrar arquivos de rastreamento. Todas as funções retornam um ID de tarefa. Esse ID faz parte do nome do arquivo de log que contém a saída de ADRCI, como em dbtask-task_id.log. O arquivo de log reside no diretório BDUMP. É possível baixar o arquivo de log seguindo o procedimento descrito em Como baixar um arquivo de log de banco de dados.

Parâmetros comuns para procedimentos de diagnóstico

Para executar tarefas de diagnóstico, use funções no pacote do Amazon RDS rdsadmin.rdsadmin_adrci_util. O pacote tem os seguintes parâmetros comuns.

Nome do parâmetro Tipo de dados Valores válidos Padrão Obrigatório Descrição

incident_id

número

Um ID de incidente válido ou nulo

Nulo

Não

Se o valor for nulo, a função mostrará todos os incidentes. Se o valor não for nulo e representar um ID de incidente válido, a função mostrará o incidente especificado.

problem_id

número

Um ID de problema válido ou nulo

Nulo

Não

Se o valor for nulo, a função mostrará todos os problemas. Se o valor não for nulo e representar um ID de problema válido, a função mostrará o problema especificado.

last

número

Um inteiro válido maior que 0 ou nulo

Nulo

Não

Se o valor for nulo, a função exibirá no máximo 50 itens. Se o valor não for nulo, a função exibirá o número especificado.

Listar incidentes

Para listar incidentes de diagnóstico para o Oracle, use a função do Amazon RDS rdsadmin.rdsadmin_adrci_util.list_adrci_incidents. Você pode listar incidentes no modo básico ou detalhado. Por padrão, a função lista os 50 incidentes mais recentes.

Essa função usa os seguintes parâmetros comuns:

  • incident_id

  • problem_id

  • last

Se você especificar incident_id e problem_id, incident_id substituirá problem_id. Para ter mais informações, consulte Parâmetros comuns para procedimentos de diagnóstico.

Essa função usa o parâmetro adicional a seguir.

Nome do parâmetro Tipo de dados Valores válidos Padrão Obrigatório Descrição

detail

booliano

TRUE ou FALSE

FALSE

Não

Se for TRUE, a função listará incidentes no modo detalhado. Se for FALSE, a função listará incidentes no modo básico.

Para listar todos os incidentes, consulte a função rdsadmin.rdsadmin_adrci_util.list_adrci_incidents sem argumentos. A consulta retorna o ID da tarefa.

SQL> SELECT rdsadmin.rdsadmin_adrci_util.list_adrci_incidents AS task_id FROM DUAL; TASK_ID ------------------ 1590786706158-3126

Ou chame a função rdsadmin.rdsadmin_adrci_util.list_adrci_incidents sem argumentos e armazene a saída em uma variável de cliente SQL. Você pode usar a variável em outras instruções.

SQL> VAR task_id VARCHAR2(80); SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.list_adrci_incidents; PL/SQL procedure successfully completed.

Para ler o arquivo de log, chame o procedimento do Amazon RDS rdsadmin.rds_file_util.read_text_file. Forneça o ID da tarefa como parte do nome do arquivo. A saída a seguir mostra três incidentes: 53523, 53522 e 53521.

SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log')); TEXT ------------------------------------------------------------------------------------------------------------------------- 2020-05-29 21:11:46.193 UTC [INFO ] Listing ADRCI incidents. 2020-05-29 21:11:46.256 UTC [INFO ] ADR Home = /rdsdbdata/log/diag/rdbms/orcl_a/ORCL: ************************************************************************* INCIDENT_ID PROBLEM_KEY CREATE_TIME ----------- ----------------------------------------------------------- ---------------------------------------- 53523 ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_003 2020-05-29 20:15:20.928000 +00:00 53522 ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_002 2020-05-29 20:15:15.247000 +00:00 53521 ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_001 2020-05-29 20:15:06.047000 +00:00 3 rows fetched 2020-05-29 21:11:46.256 UTC [INFO ] The ADRCI incidents were successfully listed. 2020-05-29 21:11:46.256 UTC [INFO ] The task finished successfully. 14 rows selected.

Para listar determinado incidente, especifique seu ID usando o parâmetro incident_id. No exemplo a seguir, o arquivo de log é consultado somente para o incidente 53523.

SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.list_adrci_incidents(incident_id=>53523); PL/SQL procedure successfully completed. SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log')); TEXT ------------------------------------------------------------------------------------------------------------------ 2020-05-29 21:15:25.358 UTC [INFO ] Listing ADRCI incidents. 2020-05-29 21:15:25.426 UTC [INFO ] ADR Home = /rdsdbdata/log/diag/rdbms/orcl_a/ORCL: ************************************************************************* INCIDENT_ID PROBLEM_KEY CREATE_TIME -------------------- ----------------------------------------------------------- --------------------------------- 53523 ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_003 2020-05-29 20:15:20.928000 +00:00 1 rows fetched 2020-05-29 21:15:25.427 UTC [INFO ] The ADRCI incidents were successfully listed. 2020-05-29 21:15:25.427 UTC [INFO ] The task finished successfully. 12 rows selected.

Listar problemas

Para listar problemas de diagnóstico para o Oracle, use a função do Amazon RDS rdsadmin.rdsadmin_adrci_util.list_adrci_problems.

Por padrão, a função lista os 50 problemas mais recentes.

Essa função usa os parâmetros comuns problem_id e last. Para ter mais informações, consulte Parâmetros comuns para procedimentos de diagnóstico.

Para obter o ID da tarefa para todos os problemas, chame a função rdsadmin.rdsadmin_adrci_util.list_adrci_problems sem argumentos e armazene a saída em uma variável de cliente SQL.

SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.list_adrci_problems; PL/SQL procedure successfully completed.

Para ler o arquivo de log, chame a função rdsadmin.rds_file_util.read_text_file, fornecendo o ID da tarefa como parte do nome do arquivo. Na saída a seguir, o arquivo de log mostra três problemas: 1, 2 e 3.

SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log')); TEXT ---------------------------------------------------------------------------------------------------------------------- 2020-05-29 21:18:50.764 UTC [INFO ] Listing ADRCI problems. 2020-05-29 21:18:50.829 UTC [INFO ] ADR Home = /rdsdbdata/log/diag/rdbms/orcl_a/ORCL: ************************************************************************* PROBLEM_ID PROBLEM_KEY LAST_INCIDENT LASTINC_TIME ---------- ----------------------------------------------------------- ------------- --------------------------------- 2 ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_003 53523 2020-05-29 20:15:20.928000 +00:00 3 ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_002 53522 2020-05-29 20:15:15.247000 +00:00 1 ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_001 53521 2020-05-29 20:15:06.047000 +00:00 3 rows fetched 2020-05-29 21:18:50.829 UTC [INFO ] The ADRCI problems were successfully listed. 2020-05-29 21:18:50.829 UTC [INFO ] The task finished successfully. 14 rows selected.

No exemplo a seguir, somente o problema 3 é listado.

SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.list_adrci_problems(problem_id=>3); PL/SQL procedure successfully completed.

Para ler o arquivo de log do problema 3, chame rdsadmin.rds_file_util.read_text_file. Forneça o ID da tarefa como parte do nome do arquivo.

SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log')); TEXT ------------------------------------------------------------------------- 2020-05-29 21:19:42.533 UTC [INFO ] Listing ADRCI problems. 2020-05-29 21:19:42.599 UTC [INFO ] ADR Home = /rdsdbdata/log/diag/rdbms/orcl_a/ORCL: ************************************************************************* PROBLEM_ID PROBLEM_KEY LAST_INCIDENT LASTINC_TIME ---------- ----------------------------------------------------------- ------------- --------------------------------- 3 ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_002 53522 2020-05-29 20:15:15.247000 +00:00 1 rows fetched 2020-05-29 21:19:42.599 UTC [INFO ] The ADRCI problems were successfully listed. 2020-05-29 21:19:42.599 UTC [INFO ] The task finished successfully. 12 rows selected.

Criar pacotes de incidente

É possível criar pacotes de incidente usando a função do Amazon RDS rdsadmin.rdsadmin_adrci_util.create_adrci_package. A saída é um arquivo .zip que você pode fornecer ao suporte do Oracle.

Essa função usa os seguintes parâmetros comuns:

  • problem_id

  • incident_id

Especifique um dos parâmetros anteriores. Se você especificar ambos os parâmetros, incident_id substituirá problem_id. Para ter mais informações, consulte Parâmetros comuns para procedimentos de diagnóstico.

Para criar um pacote para um incidente específico, chame a função rdsadmin.rdsadmin_adrci_util.create_adrci_package do Amazon RDS com o parâmetro incident_id. O exemplo a seguir cria um pacote para o incidente 53523.

SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.create_adrci_package(incident_id=>53523); PL/SQL procedure successfully completed.

Para ler o arquivo de log, chame rdsadmin.rds_file_util.read_text_file. Você pode fornecer o ID da tarefa como parte do nome do arquivo. A saída mostra que você gerou o pacote de incidente ORA700EVE_20200529212043_COM_1.zip.

SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log')); TEXT -------------------------------------------------------------------------------------------------------------------------------------- 2020-05-29 21:20:43.031 UTC [INFO ] The ADRCI package is being created. 2020-05-29 21:20:47.641 UTC [INFO ] Generated package 1 in file /rdsdbdata/log/trace/ORA700EVE_20200529212043_COM_1.zip, mode complete 2020-05-29 21:20:47.642 UTC [INFO ] The ADRCI package was successfully created. 2020-05-29 21:20:47.642 UTC [INFO ] The task finished successfully.

Para empacotar dados de diagnóstico de determinado problema, especifique seu ID usando o parâmetro problem_id. No exemplo a seguir, os dados são empacotados apenas para o problema 3.

SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.create_adrci_package(problem_id=>3); PL/SQL procedure successfully completed.

Para ler a saída da tarefa, chame rdsadmin.rds_file_util.read_text_file, fornecendo o ID da tarefa como parte do nome do arquivo. A saída mostra que você gerou o pacote de incidente ORA700EVE_20200529212111_COM_1.zip.

SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log')); TEXT ------------------------------------------------------------------------------------------------------------------------------------------------------------ 2020-05-29 21:21:11.050 UTC [INFO ] The ADRCI package is being created. 2020-05-29 21:21:15.646 UTC [INFO ] Generated package 2 in file /rdsdbdata/log/trace/ORA700EVE_20200529212111_COM_1.zip, mode complete 2020-05-29 21:21:15.646 UTC [INFO ] The ADRCI package was successfully created. 2020-05-29 21:21:15.646 UTC [INFO ] The task finished successfully.

Também é possível baixar o arquivo de log. Para obter mais informações, consulte Como baixar um arquivo de log de banco de dados.

Mostrar arquivos de rastreamento

Você pode usar a função do Amazon RDS rdsadmin.rdsadmin_adrci_util.show_adrci_tracefile para listar arquivos de rastreamento no diretório de rastreamento e todos os diretórios de incidentes na página inicial atual do ADR. Você também pode mostrar o conteúdo dos arquivos de rastreamento e dos arquivos de rastreamento de incidentes.

Essa função usa o parâmetro a seguir.

Nome do parâmetro Tipo de dados Valores válidos Padrão Obrigatório Descrição

filename

varchar2

Um nome de arquivo de rastreamento válido

Nulo

Não

Se o valor for nulo, a função mostrará todos os arquivos de rastreamento. Se não for nulo, a função mostrará o arquivo especificado.

Para mostrar o arquivo de rastreamento, chame a função rdsadmin.rdsadmin_adrci_util.show_adrci_tracefile do Amazon RDS.

SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.show_adrci_tracefile; PL/SQL procedure successfully completed.

Para listar os nomes dos arquivos de rastreamento, chame o procedimento rdsadmin.rds_file_util.read_text_file do Amazon RDS, fornecendo o ID da tarefa como parte do nome do arquivo.

SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log')) WHERE TEXT LIKE '%/alert_%'; TEXT --------------------------------------------------------------- diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-28 diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-27 diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-26 diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-25 diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-24 diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-23 diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-22 diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-21 diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log 9 rows selected.

No exemplo a seguir, é gerada uma saída para alert_ORCL.log.

SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.show_adrci_tracefile('diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log'); PL/SQL procedure successfully completed.

Para ler o arquivo de log, chame rdsadmin.rds_file_util.read_text_file. Forneça o ID da tarefa como parte do nome do arquivo. A saída mostra as primeiras 10 linhas de alert_ORCL.log.

SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log')) WHERE ROWNUM <= 10; TEXT ----------------------------------------------------------------------------------------- 2020-05-29 21:24:02.083 UTC [INFO ] The trace files are being displayed. 2020-05-29 21:24:02.128 UTC [INFO ] Thu May 28 23:59:10 2020 Thread 1 advanced to log sequence 2048 (LGWR switch) Current log# 3 seq# 2048 mem# 0: /rdsdbdata/db/ORCL_A/onlinelog/o1_mf_3_hbl2p8xs_.log Thu May 28 23:59:10 2020 Archived Log entry 2037 added for thread 1 sequence 2047 ID 0x5d62ce43 dest 1: Fri May 29 00:04:10 2020 Thread 1 advanced to log sequence 2049 (LGWR switch) Current log# 4 seq# 2049 mem# 0: /rdsdbdata/db/ORCL_A/onlinelog/o1_mf_4_hbl2qgmh_.log Fri May 29 00:04:10 2020 10 rows selected.

Também é possível baixar o arquivo de log. Para obter mais informações, consulte Como baixar um arquivo de log de banco de dados.