You are on page 1of 19

Pr acticas del Curso BDII

Carlos Alberto Olarte (carlosolarte@puj.edu.co)


Julio 2003

Indice general
1. Introducci on 4
2. Bases de Datos Distribuidas 5
2.1. Prerequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2. Descripci on del problema . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3. Metodologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4. Sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4.1. Creaci on de DB Links . . . . . . . . . . . . . . . . . . . . . . . 6
2.4.2. Creaci on de los Materialized V iew Log . . . . . . . . . . . . . 6
2.4.3. Creaci on de las Materialized V iew . . . . . . . . . . . . . . . . 7
2.4.4. Refresco de las Vistas Materializadas . . . . . . . . . . . . . . . 7
3. CORBA 8
3.1. Prerequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2. Descripci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.3. Dise no (IDL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.4. Implementaci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.4.1. ReceptorServant . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.4.2. EmisorServant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.4.3. AppServidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.4.4. AppReceptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.4.5. AppEmisor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.5. Puesta en Marcha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.6. Algunas Modicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4. Optimizaci on de Consultas 12
5. Tipos de Dato Multimedia 14
5.1. Prerequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.2. Metodologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.3. Aspectos Importantes en el c odigo . . . . . . . . . . . . . . . . . . . . . 15
5.3.1. Escritura de la imagen . . . . . . . . . . . . . . . . . . . . . . . 15
5.3.2. Recuperaci on de la Imagen . . . . . . . . . . . . . . . . . . . . . 15
5.4. BLOB en Postgresql . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.4.1. Inserci on de un objeto binario . . . . . . . . . . . . . . . . . . . 16
1

INDICE GENERAL 2
5.4.2. Recuperaci on de los objetos . . . . . . . . . . . . . . . . . . . . 16
5.5. Ejercicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6. OLAP 17

Indice de guras
6.1. E/R Banco ABC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3
Captulo 1
Introducci on
El siguiente documento presenta una serie de pr acticas que se deben realizar durante
el curso de Bases de Datos II, con el n de fortalecer la teora vista en clase y adquirir
habilidades en la implementaci on de Bases de Datos distribuidas y Sistemas distribui-
dos con ayuda del est andard CORBA. Adicionalmente, se pretende que es estudiante
interactue con un SGBD por medio de un lenguaje de programaci on como Java, PHP,
Python, etc.
4
Captulo 2
Bases de Datos Distribuidas
El siguiente taller pretende que el estudiante dise ne e implemente un sistema dis-
tribuido de bases de datos
2.1. Prerequisitos
1. Cliente SSH (http://escher.puj.edu.co/ colarte/Utils/ssh-win.exe)
2. Instancias lab, lab2 y lab3 de Oracle
3. $ORACLE HOME/network/admin/tnsnames.ora congurado correctamente
2.2. Descripci on del problema
La compa na de televisi on por cable Mundo TV cuenta con ocinas en las ciudades
de Bogot a, Lima y Caracas. Ellos mantienen informaci on de los planes de televisi on que
venden (Plan B asico, Plan Premium, etc) que son los mismos para todas las sucursales
y los clientes son locales para cada ciudad. Sin embargo, en la sucursal de Bogot a nor-
malmente llegan llamadas a la lnea 9800 atendiendo reclamos, cambios de planes, etc
para todos los usuarios. Se debe dise nar e implementar el sistema distribuido, de tal
manera que la mayora de consultas puedas ser localesmejorando el desempe no del
sistema.
2.3. Metodologa
1. Dise ne el esquema l ogico global de la aplicaci on, es decir, el diagrama ER que in-
tegre todas las relaciones a construir como si fuera una base de datos centralizada
2. Construya los esquemas l ogicos locales, es decir seleccione que relaciones va a
replicar, cuales va a fragmentar y en que nodo van a residir cada una de ellas.
Tenga presente que solo cuenta con tres posibles emplazamientos para la pr actica
5
CAP

ITULO 2. BASES DE DATOS DISTRIBUIDAS 6


3. Cree las tablas maestras en cada uno de los emplazamientos que corresponda
4. Implemente su sistema distribuido. Recuerde que debe:
a) Crear los Data Base Link
b) Crear los materialized view log sobre las tablas maestras
c) Crear las replicas o fragmentos (materialized view) en los emplazamientos
remotos
5. Adicione algunos datos de prueba sobre su sistema. Compruebe que todos los
nodos sean capaces de ver los mismos planes y que la ciudad de Bogot a tenga
acceso a todos los clientes de la compa na. Modique los planes en la tabla maestra
y verique su actualizaci on en las replicas.
2.4. Sintaxis
2.4.1. Creaci on de DB Links
CREATE DATABASE LINK DBLINK1
CONNECT TO CC10001 IDENTIFIED BY CC10001
USING CHIEF2;
En este caso, DBLINK1 es el nombre del Database link, CC10001 es el login y pass-
word (identied by) del usuario de la instancia de la base de datos a la que se conectar a y
CHIEF2 es el string de conexi on utilizado en el archivo tnsnames.ora para rederirse
en la base de datos. En este caso,
CHIEF2.PUJ.EDU.CO=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.6.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = lab2)
)
)
Para probar el Database link, se puede ejecurtar:
SELECT * FROM CAT@DBLINK1;
2.4.2. Creaci on de los Materialized V iew Log
CREATE MATERIALIZED VIEW LOG ON EMP
WITH PRIMARY KEY;
En este caso, se crea un Log de Vista Materializada sobre la tabla EMP.
CAP

ITULO 2. BASES DE DATOS DISTRIBUIDAS 7


2.4.3. Creaci on de las Materialized V iew
Las vistas materializadas son creadas en el emplazamiento remoto en d onde se cre o el
Database Link. Por ejemplo:
CREATE MATERIALIZED VIEW EMPREPLICA
REFRESH FAST START WITH SYSDATE
NEXT SYSDATE + 1/60
WITH PRIMARY KEY
AS SELECT * FROM EMP@DBLINK1;
2.4.4. Refresco de las Vistas Materializadas
Para refrescar las vistas materializadas manualmente, se puede hacer uso del paquete
dbms refresh de la siguiente forma:
BEGIN
DBMS_REFRESH.REFRESH(EMPREPLICA);
END;
/
Captulo 3
CORBA
El siguiente taller pretende que el estudiante implemente un peque no sistema distri-
buido con ayuda del est andar CORBA y su implementaci on en el JSDK2
3.1. Prerequisitos
1. JDK1.3 o superior. (Puede ser en el servidor)
2. Cliente SSH
3. Make
4. TGZ con los archivos de la pr actica
3.2. Descripci on
Se desea implementar un sistema de mensajera en el que se crea un emisor desde
el cual se pueden enviar mensajes a una serie de receptores conectados al mismo. Los
mensajes pueden ser cadenas de caracteres, enteros o el envo de un archivo (arreglo de
bytes).
3.3. Dise no (IDL)
Con el enunciado anterior, se puede construir el siguiente IDL:
module Mensajer a
{
/**
* Definicion de una excepcion
*/
exception MensajeriaException {};
8
CAP

ITULO 3. CORBA 9
/**
* Definici on de un arreglo de bytes
*/
typedef sequence<octet> ByteArray ;
/**
* Objeto encargado de recibir mensajes
*/
interface Receptor
{
// Recepci on
void recibirLong(in long Mensaje)
raises (MensajeriaException);
void recibirString(in string Mensaje)
raises (MensajeriaException);
void recibirArchivo(in ByteArray Mensaje)
raises (MensajeriaException);
};
/**
* Objeto encargado de enviar mensajes
*/
interface Emisor
{
readonly attribute long NumMensajesEnviados;
readonly attribute long NumReceptores;
// Emision
long enviarLong(in long Mensaje)
raises (MensajeriaException);
long enviarString(in string Mensaje)
raises (MensajeriaException);
long enviarArchivo(in ByteArray Mensaje)
raises (MensajeriaException);
// Cierre de un receptor
void close (in Receptor R)
raises (MensajeriaException);
// Adicion de un receptor
void add(in Receptor R)
raises (MensajeriaException);
};
};
Como se puede observar, se cuenta con un objeto receptor con sus metodos para
recibir cada uno de los tres tipos de mensajes y un objeto emisor con metodos para
enviar los mensajes y adicionar/eliminar receptores.
CAP

ITULO 3. CORBA 10
3.4. Implementaci on
3.4.1. ReceptorServant
Implementaci on de los metodos del Receptor descrito en el IDL. En este caso, cuando
se recibe un entero o una cadena, simplemente se imprime su valor en pantalla y en
el caso de archivos, se almacena localmente con el nombre MensajeX donde X se
incrementa con cada nuevo archivo que llega.
3.4.2. EmisorServant
Implementa los metodos del objeto Emisor. Mantienen un vector de receptores para
enviar los mensajes. Observe que cuando se envan mensajes hay la posibilidad de que
el cliente se haya desconectado, por tanto, se encierra dentro de un try catch.
3.4.3. AppServidor
Se encarga de instanciar un objeto tipo Emisor con ayuda de la clase EmisorServant
para posteriormente registrarlo en el servicio de nombre
3.4.4. AppReceptor
Por medio del servicio de nombre obtiene una referencia del objeto Emisor creado
(si existe) y luego crea un objeto Receptor por medio de ReceptorServant. Luego
adiciona al emisor el nuevo receptor y queda a la espera de los mensajes.
3.4.5. AppEmisor
Se encarga de obtener una referencia del objeto emisor con ayuda del servicio de
nombres, y dependiendo de los argumentos de la lnea de comandos, se enva un mensaje
por medio del emisor.
3.5. Puesta en Marcha
1. Correr el servicio de nombre
$>tnameserv -ORBInitialPort 2020
2. Correr AppServidor para instanciar un Emisor:
$>java AppServidor -ORBInitialPort 2020 -PRBInirialHost X
En esta caso X debe ser la direcci on IP d onde se est a corriendo el servicio de
nombres (si se omite se asume localhost)
CAP

ITULO 3. CORBA 11
3. Correr uno o dos Receptores por medio de :
$>java AppReceptor -ORBInitialPort 2020 -PRBInirialHost X
Nuevamente X es el servidor donde corre el servicio de nombres.
4. Finalmente ejecutar AppEmisor y enviar diferentes mensajes de la siguiente for-
ma:
$>java AppEmisor -ORBInitialPort 2020 -PRBInirialHost X STRING "HOLA"
$>java AppEmisor -ORBInitialPort 2020 -PRBInirialHost X INT 3
$>java AppEmisor -ORBInitialPort 2020 -PRBInirialHost X FILE Arch.txt
Los mensajes enviados deben ser escuchados por los receptores creados. Tra-
te de que los receptores se ejecuten en m aquinas diferentes a d onde se ejecuto
AppServidor.
3.6. Algunas Modicaciones
Modique el ejemplo anterior de tal forma que el emisor implemente un metodo
que retorne la lista (arreglo) de receptores conectados al mismo. Luego implemente
los metodos de envio de mensajes pero brind ande la posibilidad de seleccionar (en un
arreglo) los receptores a los cuales les debe llegar el mensaje (mensajes en privado)
Captulo 4
Optimizaci on de Consultas
El siguiente taller pretende que el estudiante verique los metodos de evaluaci on de
consultas vistos en clase y compruebe c omo se pueden optimizar las consultas en una
base de datos relacional.
Para cada una de las consultas que se presentan a continuaci on, se debe escribir
el plan de ejecuci on esperado para la misma, para posteriormente vericarlo con la
herramienta tkprof de Oracle.
1. Crear las siguientes Tablas sin crear las restricciones de llaves primarias y for aneas:
Universidad (#Codigo,Nombre),
Facultad (#Codigo, Nombre, Uni_Codigo)
Estudiante (#Codigo, Nombre, Fac_Codigo)
Y las siguientes secuencias:
SEC_UNIVERSIDAD
SEC_FACULTAD
SEC_ESTUDIANTE
2. Adicione 3 Universidades, 5 Facultades por universidad y 100 estudiantes por ca-
da facultad de cada carrera.
Puede utilizar el siguiente script en PL/SQL
DECLARE
I NUMBER;
Begin
FOR I IN 1..10 LOOP
INSERT INTO ESTUDIANTE....;
END LOOP;
END;
.
/
12
CAP

ITULO 4. OPTIMIZACI

ON DE CONSULTAS 13
3. Ejecute ALTER SESSION SET SQL TRACE=TRUE; y luego SELECT MI
NOMBRE from DUAL; para saber cual es el archivo TRC generado por su sesi on
4. Realice una consulta de igualdad sobre el c odigo y luego sobre el nombre de las
facultades.
5. Cree todas las llaves primarias y las for aneas as como un ndice sobre el nombre
de la facultad y ejecute nuevamente las consultas del numeral anterior .
Sugerencia: La creaci on de ndices y de las llaves realcelas en otra terminal para
no contaminar el archivo trace.
6. Ejecute una reuni on natural entre las 3 relaciones, proyectando el nombre del
estudiante, su facultad y la universidad.
7. Adicione a su consulta anterior, un criterio de selecci on sobre el nombre del estu-
diante
8. Ejecute una consulta conjuntiva entre el c odigo del estudiante y su nombre
9. Ejecute una consulta disyuntiva entre el c odigo del estudiante y su nombre
10. Escriba un ndice que mejore el desempe no de la consulta del numeral anterior y
vuelva a ejecutar su consulta.
11. Cierre la sesi on SQL. Entre al directorio $ORACLE BASE/admin/lab/udump y
ejecute grep -i MI NOMBRE*.trc para encontrar el archivo correspondiente a
su sesi on
12. Ejecute tkprof miarchivo.trc /tmp/minombre.output para generar el archivo expli-
cado y compruebe sus suposiciones acerca del plan de ejecuci on de las consultas
Vs los utilizados por el gestor de transacciones de la base de datos.
Captulo 5
Tipos de Dato Multimedia
El siguiente taller pretende que el estudiante practique la utilizaci on de tipos BLOB
dentro de la base de datos para almacenar contenido multimedia
5.1. Prerequisitos
1. Cliente SSH instalado (http://escher.puj.edu.co/ colarte/Utils/ssh-win.exe)
2. Instancia Lab de Oracle
3. JDK1.3 o superior instalado (puede ser en el servidor)
4. JAR o ZIP con las clases del JDBC para Oracle 9i
5. 2 o 3 archivos JPG
6. Archivos (.java) de la pr actica (http://escher.puj.edu.co/ colarte/bdatos2/...
7. Instancia de Postgresql
8. JAR o ZIP con las clases del JDBC para Postgresql
5.2. Metodologa
1. Cree la siguiente tabla en la base de datos:
CREATE TABLE ANIMALES
( CODIGO NUMBER PRIMARY KEY,
NOMBRE VARCHAR2(50) NOT NULL,
FOTO BLOB);
2. Cree la secuencia para el c odigo del Animal:
CREATE SEQUENCE SEC_ANIMALES;
14
CAP

ITULO 5. TIPOS DE DATO MULTIMEDIA 15


3. Compile las clases de java de la pr actica y utilice el main de la clase Animal para
adicionar algunos animales y luego visualcelos con la clase AnimalViewer
5.3. Aspectos Importantes en el c odigo
5.3.1. Escritura de la imagen
La escritura de la imagen se realiza obteniendo una referencia del BLOB almace-
nando, y escribiendo en su ujo de salida. Observe que para realizar la inserci on se hace
uso del procedimiento empty blob() de Oracle para especicar un BLOB vaco y luego
se hace un Select for update para modicar el BLOB almacenado como se muestra a
continuaci on:
// Inserci on del Registro
St.executeUpdate("INSERT INTO ANIMALES(CODIGO,NOMBRE,FOTO) " +
"VALUES (" + Codigo + "," + Nombre + ",empty_blob())");
// ...
// Recuperar el registro
Rs = St.executeQuery("Select foto from ANIMALES " +
" where codigo = " + Codigo + " FOR UPDATE");
// ...
// Obtener la referencia al BLOB
// y escritura del arreglo de bytes
B = ((OracleResultSet)Rs).getBLOB(1);
B.getBinaryOutputStream().write(Foto);
5.3.2. Recuperaci on de la Imagen
La recuperaci on se realiza obteniendo una referencia al BLOB y luego extrayendo
su arreglo de bytes de la siguiente forma:
ResultSet Rs = St.executeQuery("Select Nombre, Foto from Animales " +
" where Codigo = " + Codigo);
// ...
// Recuperaci on del BLOB
Blob b = Rs.getBlob(2);
this.Foto = b.getBytes((long)1,(int)b.length());
5.4. BLOB en Postgresql
Postgresql tambien ofrece tipos de datos para almacenar datos binarios. Uno de ellos
es el tipo OID que permite almacenar una referencia a un objeto binario almacenado.
CAP

ITULO 5. TIPOS DE DATO MULTIMEDIA 16


5.4.1. Inserci on de un objeto binario
Haciendo uso de la clase PreparedStatement es posible realizar dicha inserci on de la
siguiente forma:
PreparedStatement St = Con.prepareStatement(
"INSERT INTO PALABRAS (PALABRA, IMAGEN) VALUES (?,?)");
org.postgresql.largeobject.LargeObjectManager lobj =
((org.postgresql.Connection)Con).getLargeObjectAPI();
int oid = lobj.create(LargeObjectManager.READ | LargeObjectManager.WRITE);
LargeObject obj = lobj.open(oid, LargeObjectManager.WRITE);
// Escritura en el blob de un arreglo de bytes
obj.write(Imagen);
obj.close();
// Modificaci on del par ametro 2 de la consulta
St.setInt(2, oid);
//...
St.executeUpdate();
Como se puede ver, se crea una instancia de un Manejador de OIDs, luego se crea un
OID (que es el id del objeto binario) y luego se crea el objeto binario para escribir en
el mismo. Finalmente se modica el Statement en su segundo atributo y se ejecuta la
sentencia.
5.4.2. Recuperaci on de los objetos
ResultSet rs = Sr.executeQuery("Select Imagen from Palabras where codigo=4);
int oid = rs.getInt(1);
LargeObject obj = lobj.open(oid, LargeObjectManager.READ);
byte buf[] = new byte[obj.size()];
obj.read(buf, 0, obj.size());
obj.close();
En este caso se recupera el OID y luego se construye un Objeto Binario con el mismo.
Finalmente se obtiene el contenido del objeto con el metodo read.
5.5. Ejercicio
Implementar la aplicaci on de Animales escrita para Oracle para que funcione en
Postgresql.
Captulo 6
OLAP
Este taller pretende que el estudiante pr actique el uso de instrucciones OLAP, para
implementar consultas an aliticas sobre una base de datos relacional
El banco ABC cuenta con un sistema de base de datos con el siguiente modelos
E/R:
Genere el script de instalaci on de tablas y de datos b asicos para el MER y luego
construya las consultas SQL para extraer la informaci on que se solicita a continuaci on:
1. El total de las cuentas bancarias por ciudad , sucursal y regi on
2. El total de las cuentas creadas en el mes anterior por da y por semana
3. Clasicar las cuentas de mayor a menor seg un el n umero de transacciones que
han efectuado en el ultimo mes
4. Clasicar de mayor a menor seg un el monto, las transacciones de una cuenta X
de acuerdo si son retiros o dep ositos
5. Construir un histograma que clasique todas las cuentas seg un el monto en 10
partes iguales
6. Construir una curva que muestre el monto acumulado durante un periodo de
tiempo X para una cuenta Y
7. Construir una tabla din amica en d onde se pueda seleccionar la ciudad y que
muestre el n umero de cuentas creadas por cada sucursal en cada mes del a no en
curso
8. Construir un cubo en el que se muestre por mes del a no, sucursal y tipo (D/R)
el monto de las transacciones efectuadas por las cuentas
17
CAP

ITULO 6. OLAP 18
Figura 6.1: E/R Banco ABC
Cliente
Ciudad
Departamento
Region _
_
Sucursal
_
Cuenta
Transaccin
Cod
Nom
Cod
Nom
Cod
Nom
Cod
Nom
Id
cc
Nom
_
_
Num
C/D
Fecha
Id
Fecha
C/R
$
_
Saldo

You might also like