Práticas de Programação Recomendadas

Use as seguintes práticas de programação recomendadas.

Usar Pacotes de Instrumentação

O Oracle AI Database fornece pacotes de instrumentação cujos subprogramas permitem que seu aplicativo gere informações de rastreamento sempre que necessário. Usando essas informações de rastreamento, você pode depurar seu aplicativo sem um depurador e identificar o código que tem um desempenho ruim.

A instrumentação fornece ao seu aplicativo uma funcionalidade considerável; portanto, não é uma sobrecarga. Overhead é algo que você pode remover sem perder muito benefício.

Alguns pacotes de instrumentação que o Oracle AI Database fornece são:

Consulte Também: Oracle AI Database PL/SQL Packages and Types Reference para obter um resumo dos pacotes PL/SQL que o Oracle AI Database fornece

Coleta de Estatísticas e Rastreamento de Aplicativos

As estatísticas de banco de dados fornecem informações sobre o tipo de carga no banco de dados e os recursos internos e externos usados pelo banco de dados. Para diagnosticar com precisão problemas de desempenho no banco de dados usando o ADDM, estatísticas devem estar disponíveis.

Para obter informações sobre a coleta de estatísticas, consulte Oracle AI Database Get Started with Performance Tuning.

Observação: Se o Oracle Enterprise Manager estiver indisponível, você poderá coletar estatísticas usando subprogramas DBMS_MONITOR, conforme descrito em Referência de Tipos e Pacotes PL/SQL do Oracle AI Database.

O Oracle AI Database fornece várias ferramentas de rastreamento que podem ajudá-lo a monitorar e analisar aplicações de banco de dados. Para obter detalhes, consulte Guia de Ajuste do Oracle AI Database SQL.

Usar Funcionalidade Existente

Um aplicativo que usa a funcionalidade existente é mais fácil de desenvolver e manter do que um que não o faz, e também é executado mais rapidamente.

Ao desenvolver sua aplicação, use a funcionalidade existente de sua linguagem de programação, seu sistema operacional, o Oracle AI Database e os pacotes e tipos PL/SQL que o Oracle AI Database fornece o máximo possível.

Exemplos de funcionalidades existentes que muitos desenvolvedores reinventam são:

No Exemplo 8-4, duas transações simultâneas desenfileiram mensagens armazenadas em uma tabela (ou seja, cada transação localiza e bloqueia a próxima linha não processada da tabela). Em vez de simplesmente chamar o procedimento DBMS_AQ.DEQUEUE (descrito em Oracle AI Database PL/SQL Packages and Types Reference), o exemplo cria um índice baseado em função na tabela e, em seguida, usa essa função em cada transação para recuperar as linhas e exibir as mensagens.

O código no Exemplo 8-4 implementa um recurso semelhante a uma chamada DBMS_AQ.DEQUEUE, mas com menos recursos. O tempo de desenvolvimento economizado usando a funcionalidade existente (neste caso, índices baseados em funções) pode ser grande.

Exemplo 8-4 Transações de Desenfileiramento Simultâneo

Criar tabela:

DROP TABLE t;
CREATE TABLE t
  ( id             NUMBER PRIMARY KEY,
    processed_flag VARCHAR2(1),
    payload        VARCHAR2(20)
  );

Criar índice na tabela:

CREATE INDEX t_idx ON
  t( DECODE( processed_flag, 'N', 'N' ) );

Preencher tabela:

INSERT INTO t
  SELECT r,
         CASE WHEN MOD(r,2) = 0 THEN 'N' ELSE 'Y' END,
         'payload ' || r
  FROM (SELECT LEVEL r FROM DUAL CONNECT BY LEVEL <= 5);

Mostrar tabela:

SELECT * FROM t;

Resultado:

        ID P PAYLOAD
---------- - --------------------
         1 Y payload 1
         2 N payload 2
         3 Y payload 3
         4 N payload 4
         5 Y payload 5

5 rows selected.

Primeira transação:

DECLARE
  l_rec t%ROWTYPE;
  CURSOR c IS
    SELECT *
    FROM t
    WHERE DECODE(processed_flag,'N','N') = 'N'
    FOR UPDATE
    SKIP LOCKED;
BEGIN
  OPEN c;

  FETCH c INTO l_rec;

  IF ( c%FOUND ) THEN
    DBMS_OUTPUT.PUT_LINE( 'Got row ' || l_rec.id || ', ' || l_rec.payload );
  END IF;

  CLOSE c;
END;
/

Resultado:

Got row 2, payload 2

Transação concorrente:

DECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;
  l_rec t%ROWTYPE;
  CURSOR c IS
    SELECT *
    FROM t
    WHERE DECODE(processed_flag,'N','N') = 'N'
    FOR UPDATE
    SKIP LOCKED;
BEGIN
  OPEN c;

  FETCH c INTO l_rec;

  IF ( c%FOUND ) THEN
    DBMS_OUTPUT.PUT_LINE( 'Got row ' || l_rec.id || ', ' || l_rec.payload );
  END IF;

  CLOSE c;
  COMMIT;
END;
/

Resultado:

Got row 4, payload 4

Consulte também:

Cobrir Tabelas do Banco de Dados com Views de Edição

Se o seu aplicativo usar tabelas de banco de dados, cubra cada uma com uma view de edição para que você possa usar a redefinição baseada em edição (EBR) para fazer upgrade do componente de banco de dados do seu aplicativo enquanto ele estiver em uso, minimizando ou eliminando assim o tempo de inatividade.

Para obter informações sobre a redefinição baseada em edição, consulte o Oracle AI Database Development Guide.