sábado, 24 de febrero de 2007

guia bases de datos

GUÍA BASES DE DATOS

TRANSACCIÓN
Una transacción es la ejecución de ciertas instrucciones que accesan a una base de datos. En un sistema de gestión de bases de datos (SGBD), es un conjunto de órdenes que se ejecutan formando una unidad de trabajo, es decir, en forma indivisible o atómica, preservando la consistencia del sistema. Una transacción es también la invocación a un procedimiento remoto que ejecuta un conjunto de operaciones sobre una base de datos bajo el principio de todo o nada. Esta abstracción de una ejecución atómica y confiable de una aplicación se conoce como una transacción.

Un SGBD se dice transaccional si es capaz de mantener la integridad de los datos, haciendo que estas transacciones no puedan finalizar en un estado intermedio. Cuando por alguna causa el sistema debe cancelar la transacción, empieza a deshacer las órdenes ejecutadas hasta dejar la base de datos en su estado inicial (llamado punto de integridad), como si la orden de la transacción nunca se hubiese realizado.

El traspaso de una cantidad de dinero entre cuentas bancarias. Normalmente se realiza mediante dos operaciones distintas, una en la que se decrementa el saldo de la cuenta origen y otra en la que incrementamos el saldo de la cuenta destino. Para garantizar la consistencia del sistema (es decir, para que no aparezca o desaparezca dinero), los dos operaciones deben ser atómicas, es decir, el sistema debe garantizar que, bajo cualquier circunstancia (inclusive una caída del sistema), el resultado final es que, o bien se han realizado las dos operaciones, o bien no se ha realizado ninguna.

Tipos de transacciones- Atomicidad: La atomicidad de una transacción garantiza que todas sus acciones sean realizadas o ninguna sea ejecutada, en el procesamiento de transacciones no se aceptan resultados parciales. En el caso de la transacción bancaria o se ejecuta tanto el "deposito-deducción" o ninguna acción será realizada. La atomicidad nos dice que la transacción se hizo entera o no se hizo, conservando así la coherencia de los datos.

- Aislamiento: Una transacción en ejecución no puede revelar sus resultados a otras transacciones concurrentes antes de finalizar. Más aún, si varias transacciones se ejecutan concurrentemente, los resultados deben ser los mismos que si ellas se hubieran ejecutado de manera secuencial. Esto garantiza que las transacciones que se estén realizando en el sistema sean invisibles a todos los usuarios hasta que estas hayan sido declaradas finales. Este aislamiento garantiza que los usuarios del sistema no observen estos cambios intermedios hasta que sea finalizada la última acción de actualización.

- Seriabilidad: Si varias transacciones se ejecutan concurrentemente, los resultados deben ser los mismos que si ellas se hubieran ejecutado de manera secuencial. Se define sobre un conjunto de transacciones y especifica un orden entrelazado de la ejecución de las operaciones de las transacciones. define el orden de ejecución de todas las operaciones.

- Durabilidad: La durabilidad de una transacción garantiza que al instante en el que se finaliza la transacción esta perdure a pesar de otras consecuencias, esto es, si el disco duro falla, el sistema aún será capaz de recordar todas la transacciones que han sido realizadas en el sistema.

BITÁCORA
Mecanismo que guarda copia de todas las actualizaciones que una transacción realiza. El DBMS (Sistema Manejador de Bases de Datos) mantiene una bitácora o diario en cinta o en disco, en el cual se registran los detalles de todas las operaciones de actualización, en particular, los valores inicial y final del objeto modificado. Por tanto, si resulta necesario anular alguna modificación específica, el sistema puede utilizar la entrada correspondiente de la bitácora para restaurar el valor original del objeto restaurado.

La bitácora es la estructura que guarda las modificaciones a la base de datos. Cada registro describe una única escritura. Contiene los datos: nombre de la transacción, nombre del dato, valor antiguo y el valor nuevo. Cuando ocurre un fallo se consulta la bitácora para determinar que transacciones necesitan volver a hacerse y cuales necesitan deshacerse.

Si una transacción termina de manera exitosa se dice que la transacción hace un commit. Si la transacción se detiene sin terminar su tarea, se dice que la transacción aborta. Cuando la transacción es abortada, su ejecución es detenida y todas sus acciones ejecutadas hasta el momento son deshechas regresando a la base de datos al estado antes de su ejecución; a esta operación también se le conoce como rollback.

CANDADOS
En los algoritmos basados en candados, las transacciones indican sus intenciones solicitando candados al despachador (el administrador de candados). Los candados son de lectura (rl), también llamados compartidos, o de escritura (wl), también llamados exclusivos.

En los candados de dos fases una transacción le pone un candado a un objeto antes de usarlo. Cuando un objeto es bloqueado con un candado por otra transacción, la transacción solicitante debe esperar. Cuando una transacción libera un candado, ya no puede solicitar más candados. Así una transacción que utiliza candados de dos fases, en la primera fase solicita y adquiere todos los candados sobre los elementos que va a utilizar y en la segunda fase libera los candados obtenidos uno por uno.
La importancia de los candados de dos fases es que se ha demostrado de manera teórica que todos las calendarizaciones generadas por algoritmos de control de concurrencia que obedecen a los candados de dos fases son serializables.
Puede suceder que si una transacción aborta después de liberar un candado, otras transacciones que hayan accesado el mismo elemento de datos aborten también provocando lo que se conoce como abortos en cascada. Para evitar lo anterior, los despachadores para candados de dos fases implementan lo que se conoce como los candados estrictos de dos fases en los cuales se liberan todos los candados juntos cuando la transacción termina (con commit o aborta).

ABRAZO MORTAL
El abrazo mortal son procesos en un estado de espera tal que ninguno de ellos tiene suficientes criterios para continuar su ejecución. El abrazo mortal ocurre si dos o más clientes, accidentalmente o no, deciden acceder al mismo archivo al mismo tiempo pueden producirse conflictos. En un abrazo mortal, los procesos nunca terminan de ejecutarse y los recursos del sistema están amarrados, evitando que otros procesos puedan siquiera empezar.

Este problema se presenta cuando se han bloqueado en una secuencia tal que un grupo de transacciones no pueden ser despachadas porque hay transacciones que se esperan mutuamente. Como ejemplo, si un cliente necesita acceder a varios archivos, como ocurre de forma común cuando se efectúan transferencias de dinero en aplicaciones bancarias, hay una posibilidad de abrazo mortal.

La solución utilizada es permitir a los usuarios el uso de bloqueos sobre los archivos de trabajo. La idea es sencilla, mientras un usuario esta trabajando sobre una parte de los datos, otros no podrán hacerlo de manera que las distintas actualizaciones se efectuaran en forma sucesiva y ordenada sin interferencias. Se utilizan dos clases de bloqueos: Los bloqueos compartidos que por lo general se usan para lectura, y los bloqueos exclusivos que normalmente se usan para escritura. Un conjunto de procesos está en un abrazo mortal cuando todos los procesos en ese conjunto están esperando un evento que sólo puede ser causado por otro proceso en el conjunto. Los eventos a los cuales nos estamos refiriendo son concernientes con la asignación y liberación de recursos principalmente.

La sincronización entre procesos es necesaria para prevenir y corregir errores debido al acceso concurrente de recursos compartidos, tales como estructuras de datos o dispositivos de E/S, de procesos contendientes. La sincronización entre procesos también permite intercambiar señales de tiempo entre procesos cooperantes para garantizar las relaciones específicas de precedencia impuestas por el problema que se resuelva.
Sin una sincronización adecuada entre procesos, la actualización entre variables compartidas puede inducir a errores de tiempo relacionadas con la concurrencia que son con frecuencia difíciles de depurar. Una de las causas principales de este problema es que procesos concurrentes puedan tener valores temporalmente inconsistentes de una variable compartida mientras se actualizan.

Los semáforos son un mecanismo sencillo pero poderoso de sincronización entre procesos. Los semáforos satisfacen la mayoría de los requerimientos que hemos especificado para un buen mecanismo de control de concurrencia, sin incluir suposiciones sobre las velocidades y prioridades relativas de los procesos contendientes y sin saber nada sobre los otros contendientes excepto que existen probablemente. Mediante el uso de semáforos se pueden resolver algunos problemas bien conocidos de sincronización, como los de PRODUCTOR/CONSUMIDOR y LECTORES/ESCRITORES. Los procesos cooperantes deben sincronizarse siempre que intenten usar recursos compartidos por varios de ellos, tales como estructuras de datos o dispositivos físicos comunes. Existen dos métodos. El de prevención de abrazos mortales y el de evasión de abrazos mortales.

PROTOCOLO DE DOS FASESEs un protocolo que asegura la atomicidad de las transacciones distribuidas. Extiende los efectos de una operación local de commit a transacciones distribuidas poniendo de acuerdo a todos los nodos involucrados en la ejecución de una transacción antes de que los cambios hechos por la transacción sean permanentes.
Las fases del protocolo son las siguientes:
• Fase 1: el coordinador hace que todos los participantes estén listos para escribir los resultados en la base de datos.
• Fase 2: Todos escriben los resultados en la base de datos.

La terminación de una transacción se hace mediante la regla del compromiso global:
• El coordinador aborta una transacción si y solamente si al menos un participante vota por que se aborte.
• El coordinador hace un commit de la transacción si y solo si todos los participantes votan por que se haga el commit.

La operación del compromiso de dos fases entre un coordinador y un participante en ausencia de fallas, en donde los círculos indican los estados y las líneas entrecortadas indican mensajes entre el coordinador y los participantes. Las etiquetas en las líneas entrecortadas especifican la naturaleza del mensaje.


RAIDS
RAID "arreglo de discos", ‘conjunto redundante de discos’, también se le llama ‘conjunto redundante de discos independientes’. Es un sistema de almacenamiento informático que usa múltiples discos duros entre los que distribuye o replica los datos. Dependiendo de su configuración, los beneficios de un RAID respecto a un único disco son uno o varios de los siguientes: mayor integridad, mejor tolerancia a fallos, más rendimiento y más capacidad. En sus implementaciones originales, su ventaja clave era la habilidad de combinar varios dispositivos de bajo costo y tecnología más antigua en un conjunto que ofrecía mayor capacidad, fiabilidad, velocidad o una combinación de éstas que un solo dispositivo de última generación y costo más alto.

En el nivel más simple, RAID combina múltiples discos en una sola unidad lógica. En lugar de ver diferentes discos, el sistema operativo solo ve uno. Con el descenso en precios de los discos duros y la amplia variedad de opciones RAID, se encuentran también como opción en los ordenadores personales más avanzados. Esto es especialmente frecuente en los computadores dedicados a tareas intensivas de almacenamiento, como edición de audio y vídeo.

La especificación RAID original sugería cierto número de «niveles RAID» o combinaciones diferentes de discos. Cada una tenía ventajas y desventajas teóricas. Con el paso de los años, han aparecido diferentes implementaciones del concepto RAID. La mayoría difieren sustancialmente de los niveles RAID idealizados originales, pero se ha conservado la costumbre de llamarlas con números.

La misma definición de RAID ha estado en disputa durante años. El uso de término «redundante» hace que muchos objeten sobre que el RAID 0 sea realmente un RAID. De igual forma, el cambio de «barato» a «independiente» confunde a muchos sobre el pretendido propósito del RAID. Incluso hay algunas implementaciones del concepto RAID que usan un solo disco.

Los niveles RAID más comúnmente usados son:
• RAID 0: Conjunto dividido
• RAID 1: Conjunto en espejo
• RAID 5: Conjunto dividido con paridad distribuida

Un RAID 0 (también llamado conjunto dividido o volumen dividido) distribuye los datos equitativamente entre dos o más discos sin información de paridad para proporcionar redundancia, es decir, no ofrece tolerancia al fallo (si ocurriese alguno, la información de los discos se perdería y debería restaurarse desde una copia de seguridad). Es importante señalar que el RAID 0 no era uno de los niveles RAID originales y que no es redundante.

El RAID 0 se usa normalmente para incrementar el rendimiento, aunque también puede utilizarse como forma de crear un pequeño número de grandes discos virtuales a partir de un gran número de pequeños discos físicos. Un RAID 0 puede ser creado con discos de diferentes tamaños, pero el espacio de almacenamiento añadido al conjunto estará limitado al tamaño del disco más pequeño (por ejemplo, si un disco de 120 GB se divide con uno de 100 GB, el tamaño del conjunto resultante será 200 GB).

El RAID 0 es útil para configuraciones tales como servidores NFS de solo lectura en las que montar muchos discos es un proceso costoso en tiempo y la redundancia es irrelevante. Otro uso es cuando el número de discos está limitado por el sistema operativo: por ejemplo, en Microsoft Windows el número de unidades lógicas está limitado a 24, por lo que el RAID 0 es una forma de usar más discos (en Windows 2000 Professional y posteriores es posible montar particiones en directorios, de forma parecida a Unix, eliminando así la necesidad de asignar una letra a cada unidad). El RAID 0 es también una opción popular para sistemas destinados a juegos en los que se desea un buen rendimiento y la integridad no es muy importante, si bien el costo es una preocupación para la mayoría de los usuarios.

Un RAID 1 crea una copia exacta (o espejo) de un conjunto de datos en dos o más discos (array). Esto resulta útil cuando el rendimiento en lectura es más importante que la capacidad y también desde el punto de vista de la seguridad, pues un RAID 0 por ejemplo no es tolerante al fallo de uno de los discos, mientras que un RAID 1 sí, al disponer de la misma información en cada disco.

Un RAID 1 clásico consiste en dos discos en espejo, lo que incrementa la fiabilidad respecto a un solo disco; es decir, la probabilidad de fallo del conjunto es igual al producto de las probabilidades de fallo de cada uno de los discos (pues para que el conjunto falle es necesario que lo hagan todos sus discos).

Adicionalmente, dado que todos los datos están en dos o más discos, con hardware habitualmente independiente, el rendimiento de lectura se incrementa, es decir, un RAID 1 puede estar leyendo simultáneamente dos datos diferentes en dos discos diferentes, por lo que su rendimiento se duplica. Para maximizar los beneficios sobre el rendimiento del RAID 1 se recomienda el uso de controladoras de disco independientes, una para cada disco. El RAID 1 es un sistema apropiado en entornos donde la disponibilidad es crítica 24 horas al día.

Un RAID 5: usa división de datos a nivel de bloques distribuyendo la información de paridad entre todos los discos miembros del conjunto. El RAID 5 ha logrado popularidad gracias a su bajo costo de redundancia. Generalmente, el RAID 5 se implementa con soporte hardware para el cálculo de la paridad.

Este tipo incluye un grupo rotatorio de paridad, con lo que resuelve las limitaciones de escritura en RAID-4. Así, todas las operaciones de lectura y escritura pueden superponerse. El Raid 5 almacena información de paridad pero no datos redundantes (aunque la información de paridad puede usarse para reconstruir datos). El RAID-5 exige al menos tres y usualmente cinco discos en el conjunto. Es mejor para los sistemas multiusuario en los cuales el rendimiento no es crítico, o que realizan pocas operaciones de escritura.

Existen otros tipos de RAID, aunque menos usados.
• RAID-3. Este tipo usa bandeado y dedica un disco al almacenamiento de información de paridad. La información de verificación de errores (ECC) incrustada se usa para detectar errores. La recuperación de datos se consigue calculando el O exclusivo (XOR) de la información registrada en los otros discos. Dado que una operación I/O accede a todos los discos al mismo tiempo, el RAID-3 no puede traslapar I/O. Por esta razón, el RAID-3 es mejor para sistemas de un solo usuario con aplicaciones que contengan grandes registros.

RAID-4. Este tipo usa grandes bandas, lo cual significa que podemos leer registros de cualquier disco individual. Esto nos permite aprovechar la I/O traslapada para las operaciones de lectura. Dado que todas las operaciones de escritura tienen que actualizar el disco de paridad, no es posible la superposición I/O para ellas. El RAID-4 no ofrece ninguna ventaja sobre el RAID-5.

RAID-6. Este tipo es similar al RAID-5, pero incluye un segundo esquema de paridad distribuido por los distintos discos y por tanto ofrece tolerancia extremadamente alta a los fallos y las caídas de disco. Hay pocos ejemplos comerciales en la actualidad.

RAID-7. Este tipo incluye un sistema operativo incrustado de tiempo real como controlador, haciendo las operaciones de caché a través de un bus de alta velocidad y otras características de un ordenador sencillo. Un vendedor ofrece este sistema.

RAID-10. Este tipo ofrece un conjunto de bandas en el que cada banda es un grupo de discos RAID-1. Esto proporciona mejor rendimiento que el RAID-1, pero a un costo mucho mayor.

• RAID-53. Este tipo ofrece un conjunto de bandas en el cual cada banda es un conjunto de discos RAID-3. Esto proporciona mejor rendimiento que el RAID-3, pero a un costo mucho mayor.


TIPOS DE BASES DE DATOS
Clasificación de acuerdo a los datos almacenados:
• Bases de datos estáticas:
- De sólo lectura
- Utilizados para almacenar datos históricos,
- Estudiarlos posteriormente para la toma de decisiones

• Bases de datos dinámicas:
- La información se modifica con el tiempo
- Permite la actualización, adición y consulta de datos


Clasificación según el contenido:
• Bases de datos bibliográficas:
- Contienen parte de la base de datos
- Contiene información sobre el autor, fecha de publicación, título
- Contiene un resumen del texto original

• Bases de datos de texto completo:
- Almacenan las fuentes primarias
- Colección de revistas

• Directorios:
- Información como guías telefónicas

• Banco de imágenes:
- Almacena información como Audio, video, multimedia

• Bases de datos de información biológica:
- Almacena información concerniente a la medicina y la vida


Modelos de bases de datos
Se clasifican según como se administren los datos:
• Bases de datos jerárquicas:
- Son útiles cuando se manejan grandes volúmenes de información y que se necesite gran rendimiento en el flujo de los datos
- Los datos se organizan en forma similar a un árbol (al revés)
- Cada nodo puede tener varios hijos

• Bases de datos de red:
- Ofrece solución a la redundancia de datos
- Muy utilizado por programadores

• Bases de datos relacional:
- Administra datos dinámicamente, se fundamente en el uso de “relaciones”
- Fácil de entender y de utilizar para usuarios esporádicos

• Bases de datos orientadas a objetos:
- Incorpora el paradigma de los objetos como encapsulamiento, herencia, polimorfismo

• Bases de datos documentales:
- Permite indexar información completa, para realizar búsquedas más potentes

• Bases de datos deductivas:
- Se llaman bases de datos lógicas, porque se basan en la lógica matemática



Sistema de base de datos distribuidos homogéneos
- Tiene múltiples colecciones de datos
- Integra múltiples recursos de datos
- Los datos se distribuyen en varios sitios comunicados por la red
- No existen usuarios locales y todos accesan a la base de datos a través de una interfaz

Sistema de base de datos distribuidos heterogéneos
- Se caracteriza por manejar diferentes bases de datos en nodos locales
- Un sistema multi-bases de datos, que pueden ser de tipos diferentes
- La integración se realiza mediante subsistemas de software
- Existen usuario locales y globales

ARQUITECTURA DE UNA BASE DE DATOSUna base de datos se puede clasificar como:
- Nivel físico: En este nivel se almacenan los datos en registros, lleva una representación de los datos y a esto se le llama esquema físico.
- Nivel conceptual: Se tiene la visión de los datos en el mundo real, es decir tratamos la entidad sin importar como está almacenado
- Nivel visión: Aquí se tiene acceso a pequeñas parte de la información, la que realmente se necesita

FRAGMENTACIÓN
La fragmentación se refiere al particionamiento de la información para distribuir cada parte a los diferentes sitios de la red. Existen tres tipos de fragmentación de datos:
- Fragmentación horizontal
- Fragmentación vertical
- Fragmentación híbrida
- Fragmentación horizontal: Consiste del particionamiento en tuplas (atributos) de una relación global en subconjuntos, donde cada subconjunto puede contener datos que tienen propiedades comunes y se puede definir expresando cada fragmento como una operación de selección sobre la relación global.
- Fragmentación vertical: La fragmentación vertical es la subdivisión de atributos en grupos. Los fragmentos se obtienen proyectando la relación global sobre cada grupo. La fragmentación es correcta si cada atributo se mapea en al menos un atributo del fragmento.
El objetivo de la fragmentación vertical es particionar una relación en un conjunto de relaciones más pequeñas de manera que varias de las aplicaciones de usuario se ejecutarán sobre un fragmento. En este contexto, una fragmentación "óptima" es aquella que produce un esquema de fragmentación que minimiza el tiempo de ejecución de las consultas de usuario.
- Fragmentación híbrida: La fragmentación híbrida consiste en aplicar la fragmentación vertical seguida de la fragmentación horizontal o viceversa.

martes, 13 de febrero de 2007

Taller Base de Datos

1. Fases del desarrollo de base de datos El diseño de la base de datos contempla las siguientes fases:

  • Diseño Conceptual
  • Diseño lógico
  • Diseño Fisico

2. Actividades y finalidad en el modelamiento conceptual de datos, diseño de bases de datos, construcción de bases de datos

Diseño Conceptual

Parte de los requerimientos y su resultado es el esquema conceptual de la base de datos. Un esquema conceptual es una descripción de alto nivel de la estructura de la base de datos, independiente del software de manejador de bases de datos que se llegue a utilizar.

Los diagramas de datos más ampliamente usados para del diseño conceptual de base de datos son los diagramas entidad-relación (ER), UML (Unified Modeling Language) o OMT (object modeling tecniques).

Diagrama Entidad-Relación (E-R) El diagrama entidad-relación se basa en "una percepción del mundo real que consiste en una colección de objetos básicos llamados entidades y relaciones entre estos objetos".

El diagrama entidad-relación es el modelo más ampliamente usado para el diseño conceptual de bases de datos y fue introducido por Peter Chen en 1976.

Elementos Básicos

Los elementos básicos son entidades, interrelaciones y atributos.

Entidades. Las entidades se definen como: "Una entidad es un objeto que se distingue de otros objetos por medio de un conjunto específico de atributos" Las entidades representan clases de objetos de la realidad. PERSONA, MUNICIPIO, PAÍS.

Las entidades se representan gráficamente por rectángulos Relaciones. Es una asociación entre varias entidades. Se representan por rombos Atributos. Representan las propiedades básicas de las entidades. Se representan por elipses.

El Diagrama E-R, muestra además propiedades de opcionalidad y cardinalidad. Opcionalidad u obligatoriedad. Una entidad puede tener o no relaciones de pertenencia u ocurrencia con relación a otra entidad. Cardinalidad. Indica el grado de relación de entre las entidades, que puede ser: Uno a Uno, Uno a muchos, o muchos a muchos.

Diseño Lógico Parte del esquema conceptual y da como resultado un esquema lógico. Un esquema lógico es una descripción de la estructura de una base de datos que puede procesar el software de SGBD. Diseño Físico Parte del esquema lógico y da como resultado un esquema físico.

Un esquema físico es una descripción de la implantación de la base de datos en la memoria secundaria; describe las estructuras de almacenamiento y los métodos usados para tener un acceso efectivo a los datos, por lo anterior el esquema físico se adapta al SGBD específico

4 Que es una entidad: "Una entidad es un objeto que se distingue de otros objetos por medio de un conjunto específico de atributos" Las entidades representan clases de objetos de la realidad. PERSONA, MUNICIPIO, PAÍS. Las entidades se representan gráficamente por rectángulos

5 Que es una Relacion. Es una asociación entre varias entidades. Se representan por rombos Relacion Uno a uno, Uno a muchos y muchos a uno.

6. Que es Atributos. Representan las propiedades básicas de las entidades. Se representan por elipses. El Diagrama E-R, muestra además propiedades de opcionalidad y cardinalidad. Opcionalidad u obligatoriedad. Una entidad puede tener o no relaciones de pertenencia u ocurrencia con relación a otra entidad. Un atributo es un Identificador que permite manipular en forma individual las características de un objeto (entidades); representan las propiedades básicas de las entidades y de las relaciones.

Tipos de atributos:
- Atributo simple: Este atributo tiene un solo componente, que no se puede dividir en partes mas pequeñas que tengan un significado propio.

- Atributo Compuesto: Es un atributo con varios componentes, cada uno con un significado por sí mismo. Un grupo de atributos se representa mediante un atributo compuesto cuando tienen afinidad en cuanto a su significado, o en cuanto a su uso. Se representa gráficamente mediante un óvalo.


- Atributo Monovalente: Atributo que tiene un solo valor para cada ocurrencia de la entidad o relación a la que pertenece.


- Atributo Polivalente: Atributo que tiene varios valores para cada ocurrencia de la entidad o relación a la que pertenece. también se les denomina multivaluados, y pueden tener un número máximo y un número mínimo de valores dada por la cardinalidad.

8. Que es un UID. El parámetro UID indica el login para acceder al servidor SQL Server. Este ejemplo utiliza el login sa, sin embargo, es comveniente utilizar otro login, por cuestiones de seguridad.

Registro Visitas