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:

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:

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:

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.