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 :
-
DBMS_APPLICATION_INFO permet à un administrateur système de suivre les performances de votre application par module.
Pour plus d'informations sur DBMS_APPLICATION_INFO, reportez-vous à Référence Oracle Database PL/SQL Packages and Types.
-
DBMS_SESSION permet à votre application d'accéder aux informations de session et de définir des préférences et des niveaux de sécurité
Pour plus d'informations sur DBMS_SESSION, reportez-vous à Référence des types et packages PL/SQL 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, reportez-vous au manuel Oracle Database PL/SQL Packages and Types Reference.
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 :
-
Contraintes
Pour obtenir des informations d'introduction sur les contraintes, reportez-vous à Assurance de l'intégrité des données dans les tables.
-
Fonctions SQL (fonctions intégrées au code SQL)
Pour plus d'informations sur les fonctions SQL, reportez-vous à Référence Oracle Database SQL Language.
-
Séquences (qui peuvent générer des valeurs séquentielles uniques)
Reportez-vous à Création et gestion des séquences.
-
Audit (la surveillance et l'enregistrement des actions d'utilisateur de base de donnée sélectionnées)
Pour obtenir des informations d'introduction sur l'audit, reportez-vous au Guide de sécurité Oracle Database.
-
Réplication (processus de copie et de maintenance des objets de base de données, tels que les tables, dans plusieurs bases de données qui composent un système de base de données distribuée)
Pour plus d'informations sur la réplication, reportez-vous à la documentation Oracle GoldenGate.
-
Mise en file d'attente des messages (comment les applications métier basées sur le Web communiquent entre elles)
Pour obtenir des informations d'introduction sur Oracle Database Advanced Queuing (AQ), reportez-vous au Guide de l'utilisateur Oracle Database Advanced Queuing.
-
Tenir à jour un historique des modifications d'enregistrement
Pour plus d'informations sur Workspace Manager, reportez-vous au Guide du développeur Oracle Database Workspace Manager.
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 :
-
Guide des nouvelles fonctionnalités d'Oracle Database (à chaque version)
-
Oracle Database Concepts (à chaque version)
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.