Programmierpraktiken
Verwenden Sie die folgenden Programmierverfahren.
Instrumentierungspakete verwenden
Oracle Database stellt Instrumentierungspackages bereit, deren Unterprogramme die Anwendung bei Bedarf Trace-Informationen generieren lassen. Mit diesen Trace-Informationen können Sie Ihre Anwendung ohne Debugger debuggen und Code identifizieren, der schlecht funktioniert.
Instrumentierung bietet Ihrer Anwendung eine beträchtliche Funktionalität; daher ist es kein Overhead. Overhead ist etwas, das Sie entfernen können, ohne viel Nutzen zu verlieren.
Die folgenden Instrumentierungspackages werden von Oracle Database bereitgestellt:
-
Mit DBMS_APPLICATION_INFO kann ein Systemadministrator die Performance Ihrer Anwendung nach Modul verfolgen.
Weitere Informationen zu DBMS_APPLICATION_INFO finden Sie in der Oracle Database PL/SQL-Packages and Types-Referenz.
-
Mit DBMS_SESSION kann Ihre Anwendung auf Sessioninformationen zugreifen und Voreinstellungen und Sicherheitsebenen festlegen
Weitere Informationen zu DBMS_SESSION finden Sie in der Oracle Database PL/SQL-Packages and Types-Referenz.
-
Mit UTL_FILE kann die Anwendung Textdateien des Betriebssystems lesen und schreiben
Weitere Informationen zu UTL_FILE finden Sie in der Oracle Database PL/SQL Packages and Types Reference.
Siehe auch: Oracle Database PL/SQL Packages and Types Reference für eine Zusammenfassung der PL/SQL-Packages, die Oracle Database bereitstellt
Statistiksammlung und Anwendungs-Tracing
Datenbankstatistiken bieten Informationen über den Lasttyp in der Datenbank und die von der Datenbank verwendeten internen und externen Ressourcen. Um Performanceprobleme mit der Datenbank mithilfe von ADDM genau diagnostizieren zu können, müssen Statistiken verfügbar sein.
Informationen zur Erfassung von Statistiken finden Sie in der Dokumentation Oracle Database 2 Day + Performance Tuning Guide.
Hinweis: Wenn Oracle Enterprise Manager nicht verfügbar ist, können Sie Statistiken mit DBMS_MONITOR-Unterprogrammen erfassen, die in der Oracle Database PL/SQL Packages and Types Reference beschrieben werden.
Oracle Database bietet mehrere Tracing-Tools, mit denen Sie Oracle Database-Anwendungen überwachen und analysieren können. Einzelheiten finden Sie in der Dokumentation SQL Tuning für Oracle Database.
Vorhandene Funktionen verwenden
Eine Anwendung, die vorhandene Funktionen verwendet, ist einfacher zu entwickeln und zu warten als eine Anwendung, die dies nicht tut, und sie wird auch schneller ausgeführt.
Verwenden Sie bei der Entwicklung Ihrer Anwendung die vorhandene Funktionalität Ihrer Programmiersprache, Ihres Betriebssystems, der Oracle Database und der PL/SQL-Packages und -Typen, die Oracle Database so weit wie möglich bereitstellt.
Beispiele für vorhandene Funktionen, die viele Entwickler neu erfinden, sind die folgenden Funktionen:
-
Constraints
Einführende Informationen zu Constraints finden Sie unter "Datenintegrität in Tabellen sicherstellen".
-
SQL-Funktionen (Funktionen, die in SQL integriert sind)
Informationen zu SQL-Funktionen finden Sie in der Oracle Database SQL Language Reference.
-
Sequenzen (die eindeutige sequenzielle Werte generieren können)
Siehe "Sequenzen erstellen und verwalten".
-
Auditing (Überwachung und Aufzeichnung ausgewählter Benutzerdatenbankaktionen)
Einführende Informationen zum Auditing finden Sie in der Dokumentation Oracle Database Security Guide.
-
Replikation (der Prozess zum Kopieren und Verwalten von Datenbankobjekten, wie Tabellen, in mehreren Datenbanken, aus denen ein verteiltes Datenbanksystem besteht)
Informationen zur Replikation finden Sie in der Oracle GoldenGate-Dokumentation.
-
Nachrichtenwarteschlange (wie webbasierte Geschäftsanwendungen miteinander kommunizieren)
Einführende Informationen zu Oracle Database Advanced Queuing (AQ) finden Sie in der Dokumentation Oracle Database Advanced Queuing - Benutzerdokumentation.
-
Historie der Datensatzänderungen verwalten
Einführende Informationen zu Workspace Manager finden Sie im Oracle Database Workspace Manager Developer's Guide.
In Beispiel 8-4 entpacken zwei nebenläufige Transaktionen Nachrichten, die in einer Tabelle gespeichert sind (d.h. jede Transaktion findet und sperrt die nächste nicht verarbeitete Zeile der Tabelle). Anstatt einfach die Prozedur DBMS_AQ.DEQUEUE aufzurufen (in Oracle Database PL/SQL Packages and Types Reference beschrieben), erstellt das Beispiel einen funktionsbasierten Index für die Tabelle und verwendet diese Funktion dann in jeder Transaktion, um die Zeilen abzurufen und die Nachrichten anzuzeigen.
Der Code in Beispiel 8-4 implementiert ein Feature, das einem DBMS_AQ.DEQUEUE-Aufruf ähnelt, jedoch weniger Funktionen aufweist. Die durch die Verwendung vorhandener Funktionen eingesparte Entwicklungszeit (in diesem Fall funktionsbasierte Indizes) kann groß sein.
Beispiel 8-4: Gleichzeitige Dequeuing-Transaktionen
Tabelle erstellen:
DROP TABLE t;
CREATE TABLE t
( id NUMBER PRIMARY KEY,
processed_flag VARCHAR2(1),
payload VARCHAR2(20)
);
Index in Tabelle erstellen:
CREATE INDEX t_idx ON
t( DECODE( processed_flag, 'N', 'N' ) );
Tabelle ausfüllen:
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);
Tabelle anzeigen:
SELECT * FROM t;
Ergebnis:
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.
Erste Transaktionen:
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;
/
Ergebnis:
Got row 2, payload 2
Hintergrundtransaktion:
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;
/
Ergebnis:
Got row 4, payload 4
Siehe:
-
Oracle Database New Features Guide (mit jedem Release)
-
Oracle Database Concepts (mit jedem Release)
Datenbanktabellen mit Editionsansichten abdecken
Wenn Ihre Anwendung Datenbanktabellen verwendet, decken Sie jede Datenbanktabelle mit einer Editionsansicht ab, sodass Sie die Datenbankkomponente Ihrer Anwendung mit einer Editions-basierten Neudefinition (EBR) aktualisieren können, während sie verwendet wird. Dadurch wird die Ausfallzeit minimiert oder eliminiert.
Informationen zur Editions-basierten Neudefinition finden Sie im Oracle Database Development Guide.