Práticas de Programação
Use as práticas de programação a seguir.
Usar Pacotes de Instrumentação
O Oracle 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.
Os seguintes pacotes de instrumentação são fornecidos pelo Oracle Database:
-
O DBMS_APPLICATION_INFO permite que um administrador do sistema rastreie o desempenho do seu aplicativo por módulo.
Para obter mais informações sobre DBMS_APPLICATION_INFO, consulte Referência de Tipos e Pacotes PL/SQL do Oracle Database.
-
DBMS_SESSION permite que seu aplicativo acesse informações da sessão e defina preferências e níveis de segurança
Para obter mais informações sobre DBMS_SESSION, consulte Referência de Tipos e Pacotes PL/SQL do Oracle Database.
-
UTL_FILE permite que seu aplicativo leia e grave arquivos de texto do sistema operacional
Para obter mais informações sobre UTL_FILE, consulte Referência de Tipos e Pacotes PL/SQL do Oracle Database.
Consulte Também: Oracle Database PL/SQL Packages and Types Reference para obter um resumo dos pacotes de PL/SQL que o Oracle 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 Database 2 Day + Performance Tuning Guide.
Observação: Se o Oracle Enterprise Manager estiver indisponível, você poderá coletar estatísticas usando subprogramas DBMS_MONITOR, descritos em Referência de Tipos e Pacotes PL/SQL do Oracle Database.
O Oracle Database fornece várias ferramentas de rastreamento que podem ajudá-lo a monitorar e analisar aplicativos do Oracle Database. Para obter detalhes, consulte Guia de Ajuste SQL do Oracle Database.
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 seu aplicativo, use a funcionalidade existente de sua linguagem de programação, seu sistema operacional, o Oracle Database e os pacotes e tipos PL/SQL que o Oracle Database fornece o máximo possível.
Exemplos de funcionalidades existentes que muitos desenvolvedores reinventam incluem as seguintes funções:
-
Restrições
Para obter informações introdutórias sobre restrições, consulte "Garantindo a Integridade dos Dados em Tabelas".
-
Funções SQL (funções que são "integradas" ao SQL)
Para obter informações sobre funções SQL, consulte Referência de Linguagem SQL do Oracle Database.
-
Sequências (que podem gerar valores sequenciais exclusivos)
Consulte "Criando e Gerenciando Sequências".
-
Auditoria (o monitoramento e o registro das ações selecionadas do banco de dados de usuário)
Para obter informações introdutórias sobre auditoria, consulte o Oracle Database Security Guide.
-
Replicação (o processo de copiar e manter objetos, como tabelas, em vários bancos de dado que compõem um sistema distribuído de banco de dado)
Para obter informações sobre replicação, consulte a documentação do Oracle GoldenGate.
-
Fila de mensagens (como os aplicativos de negócios baseados na Web se comunicam entre si)
Para obter informações introdutórias sobre o Oracle Database Advanced Queuing (AQ), consulte Oracle Database Advanced Queuing User's Guide.
-
Mantendo um histórico de alterações de registro
Para obter informações introdutórias sobre o Workspace Manager, consulte o Oracle Database Workspace Manager Developer's Guide.
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 na Referência de Tipos e Pacotes PL/SQL do Oracle Database), 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:
-
Oracle Database - Guia de Novos Recursos (com cada versão)
-
Oracle Database Concepts (com cada versão)
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 redefinição baseada em edição, consulte o Oracle Database Development Guide.