Pratiques de programmation

Utilisez les pratiques de programmation suivantes.

Utiliser des packages d'instrumentation

Oracle Database fournit des packages d'instrumentation dont les sous-programmes permettent à votre application de générer des informations de trace chaque fois que nécessaire. A l'aide de ces informations de trace, vous pouvez déboguer votre application sans débogueur et identifier le code qui fonctionne mal.

L'instrumentation fournit à votre application des fonctionnalités considérables ; par conséquent, elle n'est pas surchargée. Les frais généraux sont quelque chose que vous pouvez supprimer sans perdre beaucoup d'avantages.

Les packages d'instrumentation suivants sont fournis par Oracle Database :

Reportez-vous également à : Oracle Database PL/SQL Packages and Types Reference pour obtenir un récapitulatif des packages PL/SQL fournis par Oracle Database.

Collecte de statistiques et trace d'application

Les statistiques de la base de données fournissent des informations sur le type de charge de la base de données et les ressources internes et externes utilisées par la base. Pour diagnostiquer avec exactitude les problèmes de performances de la base de données à l'aide d'ADDM, les statistiques doivent être disponibles.

Pour plus d'informations sur la collecte de statistiques, reportez-vous au Guide de réglage des performances + Oracle Database 2 Day.

Remarque : si Oracle Enterprise Manager n'est pas disponible, vous pouvez collecter des statistiques à l'aide des sous-programmes DBMS_MONITOR, décrits dans le manuel Oracle Database PL/SQL Packages and Types Reference.

Oracle Database fournit plusieurs outils de trace qui peuvent vous aider à surveiller et à analyser les applications Oracle Database. Pour plus d'informations, reportez-vous au Guide de réglage SQL Oracle Database.

Utiliser la fonctionnalité existante

Une application qui utilise des fonctionnalités existantes est plus facile à développer et à maintenir qu'une application qui ne le fait pas, et elle s'exécute également plus rapidement.

Lors du développement de votre application, utilisez les fonctionnalités existantes de votre langage de programmation, de votre système d'exploitation, d'Oracle Database et des packages et types PL/SQL fournis par Oracle Database autant que possible.

Les fonctions suivantes sont des exemples de fonctionnalités existantes que de nombreux développeurs réinventent :

Dans l'exemple 8-4, deux transactions simultanées sortent les messages stockés dans une table (c'est-à-dire que chaque transaction trouve et verrouille la ligne non traitée suivante de la table). Plutôt que d'appeler simplement la procédure DBMS_AQ.DEQUEUE (décrite dans le manuel Oracle Database PL/SQL Packages and Types Reference), l'exemple crée un index basé sur une fonction sur la table, puis utilise cette fonction dans chaque transaction pour extraire les lignes et afficher les messages.

Le code de l'Example 8-4 implémente une fonctionnalité similaire à un appel DBMS_AQ.DEQUEUE mais avec moins de fonctionnalités. Le temps de développement économisé à l'aide des fonctionnalités existantes (dans ce cas, les index basés sur des fonctions) peut être important.

Exemple 8-4 Transactions de sortie de file d'attente simultanées

Créer une table:

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

Créer un index sur la table :

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

Alimenter la table :

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

Afficher la table:

SELECT * FROM t;

Résultats :

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.

Première opération :

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

Résultats :

Got row 2, payload 2

Transaction simultanée :

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

Résultats :

Got row 4, payload 4

Voir aussi :

Couvrir des tables de base de données avec des vues de modification

Si votre application utilise des tables de base de données, recouvrez chacune d'elles avec une vue d'édition afin de pouvoir utiliser la redéfinition basée sur l'édition (EBR) pour mettre à niveau le composant de base de données de votre application pendant son utilisation, ce qui réduit ou élimine les temps d'arrêt.

Pour plus d'informations sur la redéfinition basée sur l'édition, reportez-vous au Guide de développement Oracle Database.