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

Realização de tarefas comuns diversas para instâncias de banco de dados Oracle

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.

Criar e eliminar diretórios no espaço de armazenamento de dados principal

Para criar diretórios, use o procedimento rdsadmin.rdsadmin_util.create_directory do Amazon RDS. É 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 rdsadmin.rdsadmin_util.drop_directory do Amazon RDS.

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

Listagem de arquivos no diretório de uma instância de banco de dados

Para listar os arquivos em um diretório, use o procedimento rdsadmin.rds_file_util.listdir do Amazon RDS. 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

Para ler um arquivo de texto, use o procedimento rdsadmin.rds_file_util.read_text_file do Amazon RDS. 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

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.

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.

Como baixar um arquivo de inventário usando o console
  1. Abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

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

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

  4. Escolha a guia Logs & events (Logs e eventos).

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

  6. Na seção Logs, procure por lsinventory.

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

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'));

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

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 em Notas de lançamento do Amazon RDS for Oracle.

Definição de parâmetros para tarefas do advisor

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:

  • AUTO_STATS_ADVISOR_TASK

  • INDIVIDUAL_STATS_ADVISOR_TASK

  • SYS_AUTO_SPM_EVOLVE_TASK

  • SYS_AUTO_SQL_TUNING_TASK

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:

COL PARAMETER_NAME FORMAT a30 COL PARAMETER_VALUE FORMAT a30 SELECT PARAMETER_NAME, PARAMETER_VALUE FROM DBA_ADVISOR_PARAMETERS WHERE TASK_NAME='p_task_name' AND PARAMETER_VALUE != 'UNUSED' ORDER BY PARAMETER_NAME;

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:

COL PARAMETER_NAME FORMAT a30 COL PARAMETER_VALUE FORMAT a30 SELECT PARAMETER_NAME, PARAMETER_VALUE FROM DBA_ADVISOR_PARAMETERS WHERE TASK_NAME='p_task_name' AND PARAMETER_VALUE != 'UNUSED' ORDER BY PARAMETER_NAME;

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

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

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()