Pular para o conteúdo

UTL_RECOMP: O Salvador dos Objetos Inválidos no Oracle

UTL_RECOMP: O Salvador dos Objetos Inválidos no Oracle

Bem-vindos, administradores de banco de dados e entusiastas de PL/SQL! Hoje, vamos explorar um pacote essencial para qualquer DBA Oracle: o UTL_RECOMP. Este pacote é a ferramenta ideal para recompilar objetos inválidos no seu banco de dados Oracle, especialmente após atualizações ou mudanças significativas que podem causar a invalidação de objetos dependentes.

UTL_RECOMP: A Solução para Objetos Inválidos

Primeiro, vamos entender o que faz o UTL_RECOMP. Esse pacote PL/SQL permite recompilar todos os objetos inválidos no banco de dados de maneira eficiente. Antes de sua existência, a recompilação manual de objetos inválidos era um processo tedioso e propenso a erros. Agora, com UTL_RECOMP, podemos automatizar e agilizar essa tarefa.

Requisitos de Permissão

Para utilizar o UTL_RECOMP, é necessário possuir certas permissões. As roles necessárias para executar o UTL_RECOMP são:

  • DBA: Para recompilar objetos em todo o banco de dados.
  • EXECUTE_CATALOG_ROLE: Para executar o pacote UTL_RECOMP.
  • SELECT ANY DICTIONARY: Para selecionar a partir de qualquer dicionário de dados.

Além disso, o usuário deve ter permissão para executar a função específica do pacote. Abaixo estão os exemplos de como conceder essas permissões:

SQL
GRANT DBA TO <usuario>;
GRANT EXECUTE_CATALOG_ROLE TO <usuario>;
GRANT SELECT ANY DICTIONARY TO <usuario>;

Uso Básico do UTL_RECOMP

Vamos começar com um exemplo simples de como utilizar o UTL_RECOMP. Suponha que você realizou uma atualização no banco de dados e agora possui alguns procedimentos e pacotes inválidos. Vamos corrigir isso rapidamente.

Passo 1: Criando um Objeto Exemplo

Primeiro, vamos criar um procedimento simples:

SQL
CREATE OR REPLACE PROCEDURE simple_procedure AS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Olá, mundo!');
END;
/

Procedure created.

Passo 2: Invalidação do Objeto

Imagine que, após uma atualização no banco de dados, este procedimento ficou inválido. Para resolver isso, utilizamos o UTL_RECOMP.

Passo 3: Recompilando Objetos

Podemos recompilar todos os objetos inválidos no banco de dados de forma sequencial:

SQL
EXEC UTL_RECOMP.recomp_serial();

PL/SQL procedure successfully completed.

Passo 4: Verificação

Após executar o UTL_RECOMP, verifique o status do objeto para garantir que ele está válido novamente:

SQL
SELECT object_name, status FROM user_objects WHERE object_name = 'SIMPLE_PROCEDURE';

OBJECT_NAME                    STATUS
------------------------------ -------
SIMPLE_PROCEDURE               VALID

Se tudo correu bem, o status deve ser ‘VALID’.

Exemplos Complexos de Uso do UTL_RECOMP

Agora, vamos ver um exemplo mais complexo, onde recompilamos objetos em um esquema inteiro. Isso é especialmente útil em ambientes grandes onde múltiplos objetos podem ficar inválidos após uma atualização de sistema.

Recompilando um Esquema Inteiro

Primeiro, vamos criar um pacote e seu corpo:

SQL
CREATE OR REPLACE PACKAGE example_package AS
    PROCEDURE example_procedure;
END example_package;
/

CREATE OR REPLACE PACKAGE BODY example_package AS
    PROCEDURE example_procedure AS
    BEGIN
        DBMS_OUTPUT.PUT_LINE('Exemplo de procedimento');
    END example_procedure;
END example_package;
/

Package created.

Package body created.

Após uma grande atualização, vários objetos podem ficar inválidos. Vamos recompilar todos os objetos de um esquema específico utilizando o UTL_RECOMP.

SQL
EXEC UTL_RECOMP.recomp_parallel(schema => 'EXAMPLE_SCHEMA', degree => 8);

PL/SQL procedure successfully completed.

Este comando recompilará todos os objetos inválidos no esquema ‘EXAMPLE_SCHEMA’ utilizando 8 processos paralelos. Após a recompilação, verifique se todos os objetos estão válidos:

SQL
SELECT object_name, status FROM dba_objects WHERE owner = 'EXAMPLE_SCHEMA' AND status = 'INVALID';

no rows selected

Se não houver resultados, parabéns! Todos os objetos no esquema estão válidos novamente.

Conclusão

O UTL_RECOMP é uma ferramenta indispensável para qualquer DBA Oracle. Ele simplifica e acelera a tarefa de recompilar objetos inválidos, garantindo que o banco de dados funcione de maneira otimizada e sem problemas. Utilizando o UTL_RECOMP regularmente, você pode manter seu ambiente de banco de dados em perfeito estado, mesmo após grandes atualizações ou modificações.

Explore e utilize essa poderosa ferramenta, e mantenha seu banco de dados sempre em plena forma. Afinal, um banco de dados bem gerido é fundamental para o sucesso de qualquer organização.

Valeuuuuu !

Referências

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress