Prácticas de programación
Utilice las siguientes prácticas de programación.
Usar paquetes de instrumentación
Oracle Database proporciona paquetes de instrumentación cuyos subprogramas permiten a la aplicación generar información de rastreo cuando sea necesario. Con esta información de rastreo, puede depurar la aplicación sin un depurador e identificar el código que funciona mal.
La instrumentación proporciona a su aplicación una funcionalidad considerable; por lo tanto, no es una sobrecarga. La sobrecarga es algo que puedes eliminar sin perder mucho beneficio.
Oracle Database proporciona los siguientes paquetes de instrumentación:
-
DBMS_APPLICATION_INFO permite al administrador del sistema realizar un seguimiento del rendimiento de la aplicación por módulo.
Para obtener más información sobre DBMS_APPLICATION_INFO, consulte Referencia de tipos y paquetes PL/SQL de Oracle Database.
-
DBMS_SESSION permite a la aplicación acceder a la información de la sesión y definir preferencias y niveles de seguridad
Para obtener más información sobre DBMS_SESSION, consulte Referencia de tipos y paquetes PL/SQL de Oracle Database.
-
UTL_FILE permite que la aplicación lea y escriba archivos de texto del sistema operativo
Para obtener más información sobre UTL_FILE, consulte Referencia de tipos y paquetes PL/SQL de Oracle Database.
Consulte también: Referencia de tipos y paquetes PL/SQL de Oracle Database para obtener un resumen de los paquetes PL/SQL que proporciona Oracle Database
Recopilación de Estadísticas y Rastreo de Aplicaciones
Las estadísticas de las bases de datos proporcionan la información sobre el tipo de carga en las bases de datos y sobre los recursos internos y externos utilizados por la misma. Para diagnosticar con precisión los problemas de rendimiento de la base de datos con ADDM, las estadísticas deben estar disponibles.
Para obtener información sobre la recopilación de estadísticas, consulte la Guía de ajuste de rendimiento de Oracle Database 2 Day +.
Nota: Si Oracle Enterprise Manager no está disponible, puede recopilar estadísticas mediante subprogramas DBMS_MONITOR, que se describen en Referencia de tipos y paquetes PL/SQL de Oracle Database.
Oracle Database proporciona varias herramientas de rastreo que pueden ayudarle a supervisar y analizar las aplicaciones de Oracle Database. Para obtener más información, consulte Oracle Database SQL Tuning Guide.
Usar funcionalidad existente
Una aplicación que utiliza la funcionalidad existente es más fácil de desarrollar y mantener que una que no lo hace, y también se ejecuta más rápido.
Al desarrollar la aplicación, utilice la funcionalidad existente de su lenguaje de programación, su sistema operativo, Oracle Database y los paquetes y tipos PL/SQL que Oracle Database proporciona tanto como sea posible.
Entre los ejemplos de funcionalidad existente que reinventan muchos desarrolladores se incluyen las siguientes funciones:
-
Restricciones
Para obtener información introductoria sobre las restricciones, consulte "Garantía de Integridad de Datos en Tablas".
-
Funciones SQL (funciones que están "integradas" en SQL)
Para obtener más información sobre las funciones SQL, consulte Referencia del lenguaje SQL de Oracle Database.
-
Secuencias (que pueden generar valores secuenciales únicos)
Consulte "Creación y Gestión de Secuencias".
-
Auditoría (la supervisión y el registro de acciones del usuario seleccionado y de base de Datos)
Para obtener información introductoria sobre auditoría, consulte la Guía de seguridad de Oracle Database.
-
Replicación (el proceso de copiar y mantener objetos, como tablas, en varias bases, de datos que constituyen un sistema distribuido de base de Datos).
Para obtener información sobre la replicación, consulte la documentación de Oracle GoldenGate.
-
Colocación en cola de mensajes (cómo se comunican las aplicaciones de negocio basadas en web entre sí)
Para obtener información introductoria sobre Oracle Database Advanced Queuing (AQ), consulte la Guía del usuario de Oracle Database Advanced Queuing.
-
Mantenimiento de un historial de cambios de registros
Para obtener información introductoria sobre Workspace Manager, consulte la Guía del desarrollador de Oracle Database Workspace Manager.
En el ejemplo 8-4, dos transacciones simultáneas eliminan de la cola los mensajes almacenados en una tabla (es decir, cada transacción busca y bloquea la siguiente fila sin procesar de la tabla). En lugar de simplemente llamar al procedimiento DBMS_AQ.DEQUEUE (descrito en la Referencia de tipos y paquetes PL/SQL de Oracle Database), el ejemplo crea un índice basado en funciones en la tabla y, a continuación, utiliza esa función en cada transacción para recuperar las filas y mostrar los mensajes.
El código del Ejemplo 8-4 implementa una función similar a una llamada DBMS_AQ.DEQUEUE pero con menos capacidades. El tiempo de desarrollo ahorrado mediante el uso de la funcionalidad existente (en este caso, índices basados en funciones) puede ser grande.
Ejemplo 8-4 Transacciones simultáneas de eliminación de cola
Crear Tabla:
DROP TABLE t;
CREATE TABLE t
( id NUMBER PRIMARY KEY,
processed_flag VARCHAR2(1),
payload VARCHAR2(20)
);
Crear Índice en la Tabla:
CREATE INDEX t_idx ON
t( DECODE( processed_flag, 'N', 'N' ) );
Rellenar tabla:
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);
Mostrar tabla:
SELECT * FROM t;
Resultado:
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.
Primera operación:
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;
/
Resultado:
Got row 2, payload 2
Transacción simultánea:
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;
/
Resultado:
Got row 4, payload 4
Consulte además:
-
Guía de nuevas funciones de Oracle Database (con cada versión)
-
Conceptos de Oracle Database (con cada versión)
Cubrir tablas de base de datos con vistas de edición
Si la aplicación utiliza tablas de base de datos, cubra cada una con una vista de edición para que pueda utilizar la redefinición basada en edición (EBR) para actualizar el componente de base de datos de la aplicación mientras está en uso, lo que minimiza o elimina el tiempo de inactividad.
Para obtener información sobre la redefinición basada en edición, consulte la Guía de desarrollo de Oracle Database.