Subido por barac71027

ASGBD03 Contenidos

Anuncio
ASGBD03_Contenidos
Automatización de tareas: Construcción de guiones
de administración.
Caso práctico
En el descanso de media mañana Laro y Vindio salen con Noiba y Jana. Puesto
que hoy estaban haciendo un trabajo de BD y comentan sobre el tema.
Laro les explica que el DBA utiliza diversas herramientas para automatizar tareas,
de este modo consigue que sea más llevadera la cantidad de trabajos que debe
llevar a cabo.
Ellas preguntan por el origen y la funcionalidad de dichas herramientas.
Vindio dice que estas herramientas, se encuentran en todos los SGBD modernos
tanto comerciales como libres, consisten principalmente en el uso de rutinas
almacenadas, eventos y disparadores; además de la posibilidad de emplear
API para distintos lenguajes de programación.
Laro añade que no han de olvidar el uso de excepciones para el control de errores, ni tampoco la
documentación de todas estas herramientas.
Materiales formativos de FP Online propiedad del Ministerio de
Educación, Cultura y Deporte.
Aviso Legal
1 de 12
ASGBD03_Contenidos
Planificación de tareas: Técnicas y herramientas.
Caso práctico
A la vuelta del descanso, Vindio les plantea la posibilidad de mostrarles el uso de
las herramientas con las que cuenta el DBA para automatizar los procedimientos y
funciones.
Les dice que para crear las funciones y procedimientos almacenados pueden
hacer uso tanto de la consola, como de editores de texto plano o de GUI, como
MySQL Workbench.
¿De qué modo puede el DBA automatizar tareas?
Codificando las sentencias que se ejecutan frecuentemente en rutinas.
Conocemos como rutinas almacenadas a los procedimientos y las funciones.
Éstas facilitan la ejecución de varias sentencias SQL haciendo una única llamada
sin tener que teclear cada una de ellas.
¿Qué diferencia a los procedimientos y a las funciones?
Las funciones devuelven un solo valor, mientras que los procedimientos
pueden devolver varios o ninguno.
Las sentencias SELECT que se emplean dentro de una función no son mostradas al terminar la ejecución de la
misma; mientras que en los procedimientos si se muestran, salvo las del tipo SELECT...INTO que almacenan la
salida en variables.
La forma de invocarlos, mientras que la función se llama mediante: SELECT nombre_func, el procedimiento se
llama utilizando CALL nombre_proc . Hay que recordar que phpMyAdmin no admite el uso de la sentencia
CALL , lo que impide ejecutar procedimientos.
El uso de rutinas nos permite emplear elementos de programación avanzada, como
Además, podemos utilizar variables y otras estructuras de SQL, como los
cursores.
bucles y
condiciones.
Para incluir la rutina como si fuese una única sentencia es necesario cambiar el símbolo que se utiliza como
delimitador de sentencia, que normalmente es el punto y coma “;”, utilizando la sentencia DELIMITER antes de
comenzar con el CREATE propio de la rutina; y de nuevo al final para volver al delimitador habitual.
Las rutinas permiten incluir un nivel de seguridad que determina los privilegios necesarios para usarla mediante el
atributo DEFINER, lo que obliga a incluir la característica SQL SECURITY. Ésta puede tomar dos valores:
DEFINER , la rutina se ejecuta con los permisos del usuario definido en el código, independientemente de los
que posea el usuario invocante, quien necesariamente necesitará el permiso EXECUTE para lanzar el programa.
El usuario utilizado en DEFINER debe contar con los permisos necesarios para realizar las tareas especificadas
en el bloque BEGIN...END .
INVOKER , la rutina se ejecuta con los permisos del usuario que la invoca. Por ello, es necesario que éste tenga
los permisos necesarios para ejecutar las sentencias del bloque BEGIN...END , además del necesario para
hacer la llamada al procedimiento.
Un ejemplo del modo de codificar esta característica es la siguiente:
CREATE DEFINER = 'usuario'@'host' PROCEDURE mi_proc()
SQL SECURITY {DEFINER|INVOKER}
BEGIN ... END
2 de 12
ASGBD03_Contenidos
Debes conocer
En el siguiente enlace encontrarás información sobre los rutinas almacenadas.
Manual de MySQL sobre rutinas almacenados
En el siguiente enlace puedes encontrar una presentación que te ayudará en la codificación de rutinas.
Codificación de rutinas.
En el siguiente enlace puedes encontrar una presentación que te ayudará en la ejecución de rutinas.
Ejecución de rutinas.
3 de 12
ASGBD03_Contenidos
4 de 12
ASGBD03_Contenidos
Eventos.
Caso práctico
Noiba dice que recuerda que los eventos permiten codificar una tarea y fijar el
momento en que se ejecutan.
Laro le dice que se ejecuta sólo en el caso de que el programador de tareas esté
habilitado, no basta con programar el evento para asegurar su ejecución. Por ello,
es importante conocer el valor de la variable global event_sheduler, ya que esta
guarda el estado del programador de tareas.
Los eventos son tareas que se programan para que se ejecuten en un instante fijado con
anterioridad. Cada evento se identifica por un nombre y la base de datos a la que se asocia.
¿Cómo podemos saber si el programador de tareas está activo y, por tanto
ejecutará eventos?
Mediante la variable global del sistema event_scheduler. Sus posibles valores son:
ON : Activado. Ejecuta los eventos almacenados. Se puede detener con la
expresión:
SET GLOBAL event_scheduler = OFF;
OFF: Desactivado. Es la opción por defecto. Se puede pasar a ON
mediante la sentencia:
SET GLOBAL event_scheduler = ON;
DISABLED : Deshabilitado. No es posible ponerla a ON u OFF en tiempo de ejecución. Para deshabilitar la variable
es necesario hacerlo al arrancar el servidor, lo mismo que para habilitarla.
Las operaciones que un usuario puede realizar sobre un evento son: crear, eliminar y modificar. Hay que tener en
cuenta que para realizar cualquiera de ellas es imprescindible que el usuario cuente con el permiso EVENT. Las
sentencias utilizadas para realizar estas operaciones son:
Crear un evento:
CREATE EVENT [IF NOT EXISTS] nombre_evento ON SCHEDULE tiempo DO sentencias
Donde, el valor tiempo indica cuando comienza y termina la ejecución el evento.
Eliminar un evento:
DROP EVENT [IF EXISTS] nombre_evento
Modificar un evento:
ALTER EVENT nombre_evento y añadir las nuevas características.
Para ver los procesos que se ejecutan debes utilizar: SHOW PROCESSLIST. Este comando muestra los procesos que
se ejecutan sobre el servidor, aunque por motivos de formato de la salida es más habitual emplear SHOW
PROCESSLIST\G.
Debes conocer
5 de 12
ASGBD03_Contenidos
En este enlace puedes ver la estructura completa de la sentencia CREATE EVENT, con ejemplos que te
ayudarán a comprender su uso:
Manual MySQL sobre CREATE EVENT
En este enlace puedes ver la estructura completa de la sentencia ALTER EVENT, con ejemplos que te
ayudarán a utilizarla correctamente:
Manual MySQL sobre ALTER EVENT
Autoevaluación
Cuando event_scheduler
event_scheduler
está en modo DISABLED se puede cambiar usando: set
global
Verdadero.
Falso.
Correcto. Es importante que sepas que no es posible modificar el modo del programador de tareas
en tiempo de ejecución cuando su modo es DISABLED.
6 de 12
ASGBD03_Contenidos
Disparadores.
Caso práctico
Vindio les pregunta si no recuerdan los disparadores.
Noiba dice que le parece que son códigos que se ejecutaban
automáticamente cuando se realizaba una modificación sobre los
datos de una tabla a la que estaban asociados.
Los disparadores, más conocidos por el término en inglés trigger, sirven para realizar
operaciones sobre la base de datos de forma automática cuando sobre una tabla se realiza una
operación de modificación de datos, esto es: INSERT, UPDATE o DELETE.
Las operaciones más usuales en las que se utilizan son:
Control de variables de sesión.
Control de valores de entrada.
Mantenimientos de campos derivados.
Auditoría y registro.
Los disparadores pertenecen y se almacenan en la base de datos en la que se
definen. Por esta razón, no puede haber dos con el mismo nombre ni tampoco que actúen del mismo modo
sobre la misma tabla, porque quedan asociados a esta.
Para crear un disparador utilizamos la siguiente sentencia:
CREATE TRIGGER nombre_disp momento evento ON nombre_tabla
FOR EACH ROW sentencia
momento, representa cuando tiene que actuar el disparador y puede tomar los valores BEFORE o AFTER.
evento, hace referencia a la causa que hace que se ejecute. Los valores que puede tomar son: INSERT ,
UPDATE o DELETE .
sentencia es la operación que realiza el disparador.
Habitualmente se usa antes del CREATE la orden DELIMITER, para que el trigger sea interpretado como una única
sentencia. De este modo, se pueden incluir más de una sentencia utilizando un bloque: BEGIN ... END.
Para eliminar un disparador se utiliza la sentencia: DROP TRIGGER nombre_tabla.nombre_disp
Utilizando la sentencia SHOW TRIGGERS [nombre_BD] podemos consultar los disparadores definidos dentro de una
base de datos. Se puede filtrar la búsqueda empleando: LIKE patrón o WHERE expresión.
Se pueden utilizar las palabras clave OLD y NEW para hacer referencia a los valores de las columnas afectadas de la
tabla asociada al disparador, de este modo se pueden utilizar dentro del mismo sus valores antes de que actúe el
evento que causa el disparo del trigger, OLD.columna, o después, NEW.columna.
Debes conocer
En el presente enlace podrás leer más aspectos útiles relacionados con los disparadores.
Manual MySQL sobre disparadores
7 de 12
ASGBD03_Contenidos
Autoevaluación
Es posible que dos triggers estén definidos en la misma tabla si cumplen:
Las columnas no son derivadas de otras.
Selección correcta.
Tienen nombres distintos.
Selección correcta.
No actúan sobre las mismas columnas de la tabla.
Selección correcta.
No actúan del mismo modo, cambia el momento y el evento.
Selección correcta.
Mostrar Información
Es importante saber que no podemos definir dos triggers homónimos en una base de datos, ni
tampoco puede definirse sobre una tabla más de un trigger que actúen del mismo modo.
8 de 12
ASGBD03_Contenidos
Excepciones.
Caso práctico
Laro y Vindio se muestran muy satisfechos de los conocimientos teóricos de las
alumnas sobre este tema. Les preguntan sobre las excepciones.
Noiba dice que sirven para controlar errores, pero que no tiene muy claro el modo
de utilizarlos.
Las excepciones, o control de errores, es una de las tareas determinantes que es necesario tener
bajo control en el momento de codificar una función o un procedimiento.
A través de ellas podemos manejar cualquier situación no deseada que se produzca,
como por ejemplo querer insertar un registro duplicado, y darle una salida más airosa de
cara al usuario que un mensaje sin ningún sentido para él o directamente controlar la
situación dándole otra salida posible; como realizar una modificación en lugar de una
inserción siguiendo el ejemplo anterior.
Para manejar excepciones definimos un handler. Esta declaración va a continuación de la
declaración de variables o después de la declaración de un cursor, si es que este se
emplea en la rutina.
DECLARE tipo HANDLER FOR condición acciones
donde:
tipo, define el modo de actuar del manejador:
EXIT : cuando se da la condición hace que finalice la ejecución de la rutina. Para usar este valor es
necesario crear una situación que haga “saltar” el manejador, lo que se logra con una sentencia SELECT
... INTO en la que se pasa el valor a una variable. Además, si codificaste una función y quieres
provocar el fin de la misma, debes emplear la cláusula RETURN para sacar un mensaje utilizando el
manejador.
CONTINUE : la ejecución continúa en la siguiente línea a la que produjo la excepción.
condición, determina la situación en la que se hace actuar al handler:
SQLSTATE 'valor': valor hace referencia a un código de 5 caracteres que define una situación que se
desea controlar. Casos especiales de SQLSTATE son SQLEXCEPTION y SQLWARNING.
NOT FOUND: forma abreviada de expresar la condición SQLSTATE '02000' .
Código de error : código devuelto por MySQL al darse la situación a controlar. Podemos controlar el
código de error o el valor de SQLSTATE asociado.
acciones, hace referencia a lo que se va a ejecutar con la actuación del handler. Las opciones son muy
variadas: provocar la salida de un mensaje con una SELECT, darle valor a una variable con un SET o incluso se
puede utilizar un bloque de sentencias dentro de un bloque BEGIN...END.
Para saber más
Lista de los códigos de error y códigos de estado (SQLSTATE) en los que poder buscar la situación que
deseamos controlar:
9 de 12
ASGBD03_Contenidos
Códigos de error y SQL STATE
10 de 12
ASGBD03_Contenidos
Documentación.
Caso práctico
Jana les pregunta por el modo de documentar estas herramientas, si es que se
hace.
Laro y Vindio se ríen mientras comentan que, como siempre, es necesario
documentar todas aquellas modificaciones que se realizan sobre el SGBD y
guardarlas en la documentación general del mismo, incluyendo los eventos y
disparadores dentro de esas modificaciones.
Laro, además, insiste en la importancia de documentar los códigos en general y
las rutinas en particular, mediante un bloque de comentarios inicial donde se
describe la funcionalidad, las variables de I/O, la fecha de creación y el autor.
También les comenta que es importante aclarar, mediante comentarios, aquellas
partes complejas del código.
Como ya dijimos en unidades anteriores, la documentación debe ser mantenida a
lo largo de la vida del SGBD.
Siempre que creemos un procedimiento o una función debe ser recogida en la
documentación general; pero la documentación de estos elementos no se debe
limitar a ese documento. Es conveniente recoger en un bloque de líneas de
comentario al inicio del mismo, cuál es el propósito del procedimiento
almacenado, sobre qué tablas actúa y las variables que recibe y devuelve. Lo
mismo para las funciones. También se debe reflejar la versión del SGBD, fecha
de realización e incluso qué persona lo hizo.
Por otro lado, es útil comentar aquellos pasos relevantes o complejos, explicando brevemente que hacen y por qué se
realizan de esa manera.
Para los eventos y disparadores, se almacena en la documentación general que mantenemos del SGBD a qué tabla
está relacionado y cuál es la función que realiza, aparte de cualquier otra información que consideres relevante.
Autoevaluación
Al documentar una rutina:
Se explica brevemente la utilidad de la rutina.
Selección correcta.
Se indican las variables I/O de la rutina.
Selección correcta.
Se recoge la versión del SO sobre el que se ejecuta el SGBD en el que se define la rutina.
Selección correcta.
Se recoge la versión del SGBD y las tablas sobre las que actúa.
Selección correcta.
Mostrar Información
Al documentar una rutina NO se guarda información sobre el SO en el que se ejecuta el SGBD.
11 de 12
ASGBD03_Contenidos
Anexo.- Licencias de recursos.
Licencias de recursos utilizados en la Unidad de Trabajo.
Recurso (1)
Datos del recurso (1)
Recurso (2)
Datos del recurso (2)
Autoría: Alain Bachellier.
Licencia: CC By-nc-sa.
Procedencia:
http://www.flickr.com/photos
/alainbachellier/2947300508
/in/set-72157608481522787
Autoría: Alain Bachellier.
Licencia: CC By-nc-sa.
Procedencia:
http://www.flickr.com/photos
/alainbachellier/2984430126
/in/set-72157608481522787
Autoría: Evil Preacher.
Licencia: CC By-sa.
Procedencia:
http://www.flickr.com/photos
/7671610@N03/918185771/
Autoría: Alain Bachellier.
Licencia: CC By-nc-sa.
Procedencia:
http://www.flickr.com/photos
/alainbachellier/3678356779
/in/set-72157608481522787/
Autoría: ptufts.
Licencia: CC By-nc-sa.
Procedencia:
http://www.flickr.com/photos
/zippy/110047115/
Autoría: Alain Bachellier.
Licencia: CC By-nc-sa.
Procedencia:
http://www.flickr.com/photos
/alainbachellier/2983574231
/in/set-72157608481522787/
Autoría: jmtosses.
Licencia: CC By-nc.
Procedencia:
http://www.flickr.com/photos
/jmt/3998980553/
Autoría: Alain Bachellier.
Licencia: CC By-nc-sa.
Procedencia:
http://www.flickr.com/photos
/alainbachellier/3678357769
/in/set-72157608481522787/
Autoría: yewenyi.
Licencia: CC By-nc.
Procedencia:
http://www.flickr.com/photos
/yewenyi/3042762182/
Autoría: Alain Bachellier.
Licencia: CC By-nc-sa.
Procedencia:
http://www.flickr.com/photos
/alainbachellier/3678558585
/in/set-72157608481522787
Autoría: Velo Steve.
Licencia: CC By-sa.
Procedencia:
http://www.flickr.com/photos
/juniorvelo/3267647833/
12 de 12
Descargar