Pratiche di programmazione consigliate

Utilizzare le seguenti procedure di programmazione consigliate.

Usa pacchetti strumentazione

Oracle AI Database fornisce pacchetti di strumentazione i cui sottoprogrammi consentono all'applicazione di generare informazioni di trace quando necessario. Utilizzando queste informazioni di trace, è possibile eseguire il debug dell'applicazione senza un debugger e identificare il codice che si comporta male.

La strumentazione fornisce alla tua applicazione una notevole funzionalità; quindi, non è sovraccarico. Overhead è qualcosa che si può rimuovere senza perdere molto beneficio.

Di seguito sono riportati alcuni pacchetti di strumentazione forniti da Oracle AI Database.

Vedi anche: Oracle AI Database PL/SQL Packages and Types Reference per un riepilogo dei package PL/SQL forniti da Oracle AI Database

Raccolta statistiche e trace applicazione

Le statistiche del database forniscono informazioni circa il tipo di carico sul database e le risorse interne ed esterne utilizzate dal database. Per diagnosticare accuratamente i problemi di prestazioni del database utilizzando ADDM, è necessario che siano disponibili le statistiche.

Per informazioni sulla raccolta delle statistiche, vedere Introduzione a Oracle AI Database con il tuning delle prestazioni.

Nota: se Oracle Enterprise Manager non è disponibile, è possibile raccogliere le statistiche utilizzando i programmi secondari DBMS_MONITOR, come descritto in Oracle AI Database PL/SQL Packages and Types Reference.

Oracle AI Database fornisce diversi strumenti di trace che possono aiutarti a monitorare e analizzare le applicazioni di database. Per i dettagli, vedere Oracle AI Database SQL Tuning Guide.

Usa funzionalità esistente

Un'applicazione che utilizza funzionalità esistenti è più facile da sviluppare e gestire di una che non lo fa, e funziona anche più velocemente.

Quando sviluppi la tua applicazione, utilizza le funzionalità esistenti del tuo linguaggio di programmazione, del tuo sistema operativo, di Oracle AI Database, dei pacchetti e dei tipi PL/SQL che Oracle AI Database fornisce il più possibile.

Esempi di funzionalità esistenti che molti sviluppatori reinventano sono:

In Esempio 8-4, due transazioni concorrenti rimuovono dalla coda i messaggi memorizzati in una tabella, ovvero ogni transazione trova e blocca la riga successiva non elaborata della tabella. Invece di richiamare semplicemente la procedura DBMS_AQ.DEQUEUE (descritta in Oracle AI Database PL/SQL Packages and Types Reference), l'esempio crea un indice basato su funzioni nella tabella e quindi utilizza tale funzione in ogni transazione per recuperare le righe e visualizzare i messaggi.

Il codice nell'Esempio 8-4 implementa una funzione simile a un richiamo DBMS_AQ.DEQUEUE, ma con meno funzionalità. Il tempo di sviluppo risparmiato utilizzando la funzionalità esistente (in questo caso, gli indici basati sulle funzioni) può essere elevato.

Esempio 8-4 transazioni di rimozione dalla coda concorrenti

Crea tabella:

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

Crea indice per la tabella:

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

Inserisci dati nella tabella:

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

Mostra tabella:

SELECT * FROM t;

Risultato:

        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.

Prima operazione:

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;
/

Risultato:

Got row 2, payload 2

Transazione 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;
/

Risultato:

Got row 4, payload 4

Vedere anche:

Copri tabelle database con viste di edizione

Se l'applicazione utilizza tabelle di database, coprirle con una vista di edizione in modo da poter utilizzare la ridefinizione basata su edizioni (EBR) per aggiornare il componente di database dell'applicazione mentre è in uso, riducendo al minimo o eliminando i tempi di inattività.

Per informazioni sulla ridefinizione basata sull'edizione, vedere Oracle AI Database Development Guide.