Pratiques de programmation
Utilisez les pratiques de programmation suivantes.
Utiliser des ensembles 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. À 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 offre à votre application une fonctionnalité considérable; par conséquent, il ne s'agit pas de frais généraux. Les frais généraux sont quelque chose que vous pouvez supprimer sans perdre beaucoup d'avantages.
Les ensembles d'instrumentation suivants sont fournis par Oracle Database :
-
DBMS_APPLICATION_INFO permet à un administrateur de système de suivre les performances de votre application par module.
Pour plus d'informations sur DBMS_APPLICATION_INFO, voir Informations de référence sur les ensembles et les types PL/SQL pour Oracle Database.
-
DBMS_SESSION permet à votre application d'accéder aux informations de session et de définir les préférences et les niveaux de sécurité
Pour plus d'informations sur DBMS_SESSION, voir Informations de référence sur les ensembles et les types PL/SQL pour Oracle Database.
-
UTL_FILE permet à votre application de lire et d'écrire des fichiers texte du système d'exploitation
Pour plus d'informations sur UTL_FILE, voir Informations de référence sur les ensembles et les types PL/SQL pour Oracle Database.
Voir aussi : Informations de référence sur les ensembles et les types PL/SQL pour Oracle Database pour obtenir un sommaire des ensembles PL/SQL fournis par Oracle Database
Collecte de statistiques et suivi des applications
Les statistiques de base de données fournissent des informations sur le type de chargement de la base de données et sur les ressources internes et externes utilisées par la base. Pour diagnostiquer avec précision les problèmes de performances de la base de données à l'aide du moniteur ADDM, des statistiques doivent être disponibles.
Pour plus d'informations sur la collecte de statistiques, voir Oracle Database 2 Day + Performance Tuning Guide.
Note : Si Oracle Enterprise Manager n'est pas disponible, vous pouvez collecter des statistiques à l'aide des sous-programmes DBMS_MONITOR, décrits dans Informations de référence sur les ensembles et les types PL/SQL pour Oracle Database.
Oracle Database fournit plusieurs outils de traçage qui peuvent vous aider à surveiller et à analyser les applications Oracle Database. Pour plus de détails, voir Guide de réglage SQL pour Oracle Database.
Utiliser les fonctionnalités existantes
Une application qui utilise des fonctionnalités existantes est plus facile à développer et à gérer qu'une autre 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 :
-
Contraintes
Pour des informations d'introduction sur les contraintes, voir "Garantir l'intégrité des données dans les tables".
-
Fonctions SQL (fonctions "intégrées" en SQL)
Pour plus d'informations sur les fonctions SQL, voir Informations de référence sur le langage SQL pour Oracle Database.
-
Séquences (qui peuvent générer des valeurs séquentielles uniques)
-
Vérification (surveillance et enregistrement des actions sélectionnées de la base de données utilisateur)
Pour des informations de présentation sur la vérification, voir le guide de sécurité d'Oracle Database.
-
Réplication (processus de copie et de maintenance d'objets de base de données, tels que des tables, dans plusieurs bases de données qui comprennent un système de base de données distribué)
Pour plus d'informations sur la réplication, consultez la documentation sur Oracle GoldenGate.
-
Message en file d'attente (comment les applications d'affaires Web communiquent entre elles)
Pour plus d'informations sur Oracle Database Advanced Queuing (AQ), voir Oracle Database Advanced Queuing User's Guide.
-
Gestion de l'historique des modifications d'enregistrement
Pour des informations d'introduction sur Workspace Manager, voir Guide du développeur d'Oracle Database Workspace Manager.
Dans l'exemple 8-4, deux transactions concurrentes retirent les messages stockés dans une table (c'est-à-dire que chaque transaction trouve et verrouille la prochaine rangée non traitée de la table). Plutôt que d'appeler simplement la procédure DBMS_AQ.DEQUEUE (décrite dans Informations de référence sur les ensembles et les types PL/SQL pour Oracle Database), l'exemple crée un index basé sur une fonction sur la table, puis utilise cette fonction dans chaque transaction pour extraire les rangées et afficher les messages.
Le code de l'exemple 8-4 met en oeuvre une fonction similaire à un appel DBMS_AQ.DEQUEUE, mais avec moins de capacités. Le temps de développement économisé à l'aide des fonctionnalités existantes (dans ce cas, les index basés sur une fonction) peut être important.
Exemple 8-4 : Transactions concurrentes de mise en file d'attente
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' ) );
Remplissez 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ésultat :
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 transaction :
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ésultat :
Got row 2, payload 2
Transaction concurrente :
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ésultat :
Got row 4, payload 4
Voir aussi :
-
Guide des nouvelles fonctionnalités d'Oracle Database (avec chaque version)
-
Concepts relatifs à Oracle Database (avec chaque version)
Couvrir des tables de base de données avec des vues d'édition
Si votre application utilise des tables de base de données, recouvrez-les d'une vue d'édition afin que vous puissiez 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, réduisant ainsi ou éliminant les temps d'arrêt.
Pour plus d'informations sur la redéfinition basée sur l'édition, voir le guide de développement d'Oracle Database.