Desde mi punto de vista, la funcionalidad Edition-Based Redefinition, cuya traducción directa sería "redefinición basada en ediciones", se trata de la característica más interesante de la release 2 de la base de datos Oracle 11g. En pocas palabras se trata de la posibilidad de actualizar nuestra aplicación PL/SQL sin tener que poner en modo restringido la base de datos, es decir, a partir de esta versión de la base de datos Oracle es posible realizar online la actualización de nuestra aplicación. Explicado de esta manera tan sencilla la mencionada funcionalidad suena como si se ratase de un juego de niños, pero en realidad es algo cuya verdadera dimensión resulta difícil de medir por sus enormes implicaciones.
Programación PL/SQL
El lenguaje de programación de bases de datos Oracle PL/SQL. Librerías y funciones estándar SQL y PLSQL.
Anuncios en tutorial de programación PLSQL
martes, 14 de enero de 2025
miércoles, 11 de diciembre de 2024
Cómo usar la utilidad de trazado del SQL de Oracle
La utilidad de trazado del SQL de las bases de datos Oracle nos permite analizar el rendimiento de un determinado programa PL/SQL. Esta funcionalidad nos va a permitir obtener información acerca del rendimiento de todas las sentencias SQL que se ejecuten durante la ejecución del programa PLSQL.
Para utilizar la herramienta de trazado del PL/SQL de Oracle deberemos seguir cinco pasos:
1) Inicializar los parámetros relativos a esta funcionalidad SQL.
2) Activar la traza SQL.
3) Ejecutar la aplicación que queremos analizar y desactivar la traza cuando termine.
4) Formatear el fichero producido por la traza SQL con el comando TKPROF.
5) Interpretar la salida del comando TKPROF y, si es necesario, optimizar nuestro programa PLSQL.
lunes, 18 de noviembre de 2024
Memoria PGA frente a espacio de almacenamiento temporal en las bases de datos Oracle
Recientemente he recibido en este blogs sobre programación PL/SQL algunas preguntas referentes a las diferencias entre el tipo de operaciones que la base de datos Oracle realiza en la memoria del área global de programa (PGA - Program Global Area) frente a las que realiza en el espacio del almacenamiento temporal (TEMP space). Primero os comentaré que las versiones antiguas de las bases de datos Oracle solían utilizar los parámetros SORT_AREA_SIZE y HASH_AREA_SIZE para controlar cuanta memoria PGA era posible utilizar antes de empezar a tener que usar el espacio de disco temporal (TEMP).
No obstante en las nuevas versiones de las bases de datos Oracle, la gestión de la memoria PGA se realiza de forma automática y mucho más dinámica.
miércoles, 30 de octubre de 2024
Manejo de excepciones en PL/SQL (excepciones predefinidas)
Los errores que se producen durante la ejecución de un bloque de código PL/SQL pueden ser manejados a gusto del programador, es decir, si durante la ejecución de una sentencia PLSQL se produce un error, podemos hacer que el programa realice unas acciones u otras dependiendo del tipo de error que se haya generado, esto es algo parecido a lo que se puede hacer cuando programamos en C++ o Java. Para conseguir esto debemos añadir dentro del bloque de código PL/SQL una sección para tratamiento de las excepciones.
Existen dos tipos de excepciones:
- Excepciones predefinidas.
- Excepciones definidas por el usuario.
En este artículo voy a hablar sólo de las excepciones predefinidas.
miércoles, 16 de octubre de 2024
Tuning y constraints (o restricciones en la base de datos Oracle)
En este artículo continuaré con el caso de tuning PL/SQL planteado en el artículo Tuning de consultas SELECT COUNT(*) y determinaré cómo es posible mejorar aún más el rendimiento de la consulta SELECT objeto del mencionado artículo. Eso sí, para poder profundizar en el estudio del rendimiento, tuve que solicitar al lector que me hizo la pregunta inicial que me enviase los datos del esquema de la base de datos Oracle para las tablas involucradas en la consulta PLSQL SELECT. Después de un par de correos pude disponer de toda la información que necesitaba, los campos de las tablas, los índices asociados, las claves primarias (primary keys), las claves extranjeras (foreign keys), y las diferentes restricciones (constraints) aplicadas sobre las mencionadas tablas.
En suma, disponía de la siguiente información incluida en las siguientes sentencias SQL:
lunes, 23 de septiembre de 2024
Hints en PL/SQL para determinar el método de acceso
Ya hemos hablado de los hints para el modo optimización. En este segundo artículo continuaré hablando de los hints pero, en concreto, de aquellos que permiten indicar al optimizador Oracle el modo en que se debe acceder a los datos de las tablas. Este tipo de hints resultan extremadamente eficaces a la hora de optimizar una sentencia SQL.
En su día ya indiqué cual es la sintaxis de los hints pero creo que no está de más que la muestre de nuevo:
{ DELETE | INSERT | SELECT | UPDATE } /*+ HINT (parámetros) */
o
{ DELETE | INSERT | SELECT | UPDATE } --+ HINT (parámetros)
Los hints básicos que sirven para determinar el metodo de acceso a los datos de una tabla Oracle son los siguientes:
martes, 3 de septiembre de 2024
Hints en PL/SQL para el modo de optimización
Los hints son pistas que se dan al optimizador SQL de Oracle para que elabore el plan de ejecución de una sentencia DML (sentencias de manipulación de datos como select, insert, update, delete, etc) según nosotros le aconsejemos. En este primer artículo sobre los hints voy a empezar hablando de aquellos que se utilizan para seleccionar el modo de trabajar del optimizador Oracle. Estos hints, hablando desde un punto de vista práctico, no son muy utilizados, aunque no por ello pueden dejar de ser útiles en determinadas circunstancias.
Los hints se incorporan a una sentencia DML en forma de comentario y deben ir justo detrás del comando principal. Por ejemplo, si se tratara de una sentencia SELECT el formato sería el siguiente:
SELECT /*+ COMANDO-HINT */ ...
martes, 13 de agosto de 2024
Cláusula CONSTRAINT para mejorar el rendimiento de las consultas PL/SQL
Resulta bastante interesante mencionar la importancia de que, al crear las tablas de nuestra base de datos Oracle, utilicemos, cuando sea posible, la cláusula CONSTRAINT para mejorar el rendimiento de las consultas PLSQL que utilicen dicha tabla. Muchos desarrolladores de PL/SQL piensan que la utilización de la cláusula CONSTRAINT sólo sirve para garantizar la integridad de los datos, lo cual es cierto, pero esta cláusula también la utiliza el optimizador Oracle para determinar el plan de ejecución óptimo.
De hecho, el optimizador PLSQL utiliza como entradas:
- La consulta SQL que se va a optimizar.
- Todas las estadísticas disponibles de los objetos de la base de datos.
- De estar disponibles, las estadísticas del sistema (velocidad de CPU, velocidad de los dispositivos de entrada/salida, etcétera).
- Los parámetros de inicialización.
- Las constraints (restricciones).
lunes, 24 de junio de 2024
Utilidad del paquete estándar PL/SQL DBMS_ROWID
Hace unas semanas me llegó una consulta sobre PL/SQL en la que se me preguntaba si era posible conocer, utilizando una consulta SQL, el nombre de la partición en la que se encontraba almacenado un determinado registro de una tabla. El paquete estándar PLSQL DBMS_ROWID nos puede ayudar a obtener esta información mediante la extracción del ROWID_OBJECT que identifica de manera única el segmento donde se encuentran los datos. Después bastará que asociemos este identificador con una de las vistas XXX_OBJECTS (donde XXX puede ser DBA, ALL o USER) para obtener el nombre de la partición (ver ejemplo a continuación).
SELECT sh.order_number , do.subobject_name , do.data_object_id FROM oe.so_headers_all sh , dba_objects do WHERE do.data_object_id = DBMS_ROWID.ROWID_OBJECT(sh.rowid) AND sh.order_number = '123456' ORDER_NUMBER SUBOBJECT_NAME DATA_OBJECT_ID ------------ -------------- -------------- 123456 PART1 15107
miércoles, 29 de mayo de 2024
Cómo evitar el uso de constantes fijas (hard-coded) en PL/SQL
Esta claro que la mayoría de los programas y aplicaciones PLSQL tienen su propio conjunto de constantes que determinan las características de dicha aplicación. Por lo general, estos valores constantes tienen que ser utilizados en distintos lugares del código. En muchas ocasiones estos valores permanecerán invariables durante todo el ciclo de vida de la aplicación pero, en muchos otros casos, cambiarán de forma periódica (por ejemplo, una vez al año).
Pongamos un ejemplo, supongamos que en un programa PL/SQL establecemos que el salario anual de un empleado no puede superar los 50.000 euros. Podemos codificar esta norma utilizando la siguiente subrutina: