Prácticas recomendadas de programación

Utilice las siguientes prácticas de programación recomendadas.

Usar paquetes de instrumentación

Oracle AI 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.

Algunos paquetes de instrumentación que proporciona Oracle AI Database son:

Consulte también: Referencia de tipos y paquetes PL/SQL de Oracle AI Database para obtener un resumen de los paquetes PL/SQL que proporciona Oracle AI 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 Oracle AI Database Get Started with Performance Tuning.

Nota: Si Oracle Enterprise Manager no está disponible, puede recopilar estadísticas mediante subprogramas DBMS_MONITOR como se describe en Referencia de tipos y paquetes PL/SQL de Oracle AI Database.

Oracle AI Database proporciona varias herramientas de rastreo que pueden ayudarle a supervisar y analizar aplicaciones de base de datos. Para obtener más información, consulte Oracle AI 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 su aplicación, utilice la funcionalidad existente de su lenguaje de programación, su sistema operativo, Oracle AI Database y los paquetes y tipos PL/SQL que Oracle AI Database proporciona tanto como sea posible.

Algunos ejemplos de funcionalidades existentes que reinventan muchos desarrolladores son:

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 AI 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 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 AI Database.