Existen otras bases de datos relacionales, tanto bases de datos comerciales y de código abierto están disponibles, para este estudio se va a analizar Mysql como base de datos de código abierto y Oracle como base de datos comercial.
Mysql en los últimos años ha tenido un crecimiento vertiginoso. Es la base de datos de código abierto más popular del mundo. Código abierto significa que todo el mundo puede acceder al código fuente, es decir, al código de programación de Mysql, esto significa que también todos pueden contribuir con ideas, elementos, mejoras o sugerir optimizaciones. Y así es que Mysql ha pasado de ser una pequeña base de datos a una completa herramienta. Su rápido desarrollo se debe en gran medida a la contribución de mucha gente al proyecto, así como la dedicación del equipo de Mysql.
A diferencia de los proyectos propietarios, en los que el código fuente es desarrollado por un número reducido de personas y se protege atentamente, los proyectos de código abierto no excluyen a nadie interesado en aportar ideas, si disponen de los conocimientos necesarios.
Lo que en un tiempo se consideró como un sencillo juguete para uso en sitios Web, se ha convertido en la actualidad en una solución viable y de misión crítica para la administración de datos.
Mysql es un sistema de administración de bases de datos relacional (RDBMS). Se trata de un programa capaz de almacenar una enorme cantidad de datos de gran variedad y de distribuirlos para cubrir las necesidades de cualquier tipo de organización, desde pequeños establecimientos comerciales a grandes empresas y organismos administrativos. Mysql compite con sistemas RDBMS propietarios como Oracle, Sql Server y Db2.
Mysql incluye todos los elementos necesarios para instalar el programa, preparar diferentes niveles de acceso de usuario, administrar el sistema y proteger los datos. Puede desarrollar sus propias aplicaciones de bases de datos en la mayor parte de lenguajes de programación utilizados en la actualidad y ejecutarlos en casi todos los sistemas operativos, incluyendo algunos de los que probablemente no ha oído hablar nunca. Mysql utiliza el lenguaje de consulta estructurado (SQL).
Antes Mysql se consideraba como la opción ideal de sitios web; sin embargo, ahora
incorpora muchas de las funciones necesarias para otros entornos y conserva su gran velocidad. Mysql es una base de datos robusta que se la puede comparar con una base de datos comercial, es incluso más veloz en el procesamiento de las transacciones y dispone de un sistema de permisos elegante y potente, y ahora, además, incluye un motor de almacenamiento InnoDb[17] compatible con ACID[18], además dispone de store procedures, triggers, vistas.
Mysql es rápido, y una solución accesible para administrar correctamente los datos de una empresa. MysqlAB es la compañía responsable del desarrollo de Mysql, dispone de un sistema de asistencia eficiente y a un precio razonable, y, como ocurre con la mayor parte de las comunidades de código abierto, se puede encontrar una gran cantidad de ayuda en la Web.
Son muchas las razones para escoger a Mysql como una solución de misión crítica para la administración de datos:
Mysql utiliza varios tipos de tablas. El tipo de tabla predeterminado es MyISAM que está optimizado para la velocidad del comando SELECT.
La mayor parte de los sitios Web utilizan esta tabla, ya que estos sitios suelen utilizar la instrucción SELECT mucho más que las instrucciones INSERT o UPDATE.
Existen tres tipos fundamentales de columnas: numéricas, de cadena y de fecha.
Por regla general se debe seleccionar el tipo de columna de menor tamaño, ya que de esta forma se ahorra espacio y se logra una mayor velocidad de acceso y actualización. Sin embargo, si se selecciona un tipo de columna demasiado pequeño, puede dar como resultado la pérdida de datos o que se recorten al introducirlos.
Las columnas numéricas están diseñadas para almacenar todo tipo de datos numéricos, como precios, edades y cantidades. Hay dos tipos principales de tipos numéricos: tipos enteros y de punto flotante.
Tabla # 3: Tipos de datos numéricos Mysql
|
Tipo |
|
TINYINT |
|
BIT |
|
BOOL |
|
SMALLINT |
|
MEDIUMINT |
|
INT |
|
INTEGER |
|
BIGINT |
|
FLOAT |
|
DOUBLE |
|
DEC |
|
NUMERIC |
Fuente: Mysql Avanzado
Autor: Diego Burbano
Los tipos de columna de cadena se utiliza para almacenar todo tipo de datos compuestos de caracteres como nombres, direcciones.
Tabla #4: Tipo de datos Cadena Mysql
|
Tipo |
|
CHAR |
|
VARCHAR |
|
TINYBLOB |
|
TINYTEXT |
|
BLOB |
|
TEXT |
|
MEDIUMBLOB |
|
MEDIUMTEXT |
|
LONGBLOB |
|
LONGTEXT |
|
ENUM |
|
SET |
Fuente: Mysql Avanzado
Autor: Diego Burbano
Los tipos de columna de fecha y hora están diseñados para trabajar con las necesidades especiales que exigen los datos de tipo temporal y se puede utilizar para almacenar datos tales como la hora del día o fechas de nacimiento.
Tabla #5: Tipos de datos fecha y hora Mysql
Fuente: Mysql Avanzado
Autor: Diego Burbano
|
Tipo |
|
DATETIME |
|
DATE |
|
TIMESTAMP |
|
TIME |
|
YEAR |
Existen dos tipos de tablas de transacción segura (Innodb y BDB). El resto (ISAM; MyISAM, MERGE y HEAP) no son de transacción segura. La elección del tipo de tabla adecuado puede afectar enormemente al rendimiento.
Las tablas de tipo de Método de acceso secuencial indexado (ISAM) era el estándar antiguo de Mysql. Estas fueron sustituidas por las tablas MyiSAM en la versión 3.23. Por lo tanto, es probable que solo se tope con este tipo de tablas si está trabando con bases de datos antiguas. La principal diferencia entre las dos, es el índice de las tablas MyISAM es mucho más pequeño que el de las tablas ISAM, de manera que un SELECT con un índice sobre una tabla MyISAM utilizará mucho menos recursos del sistema.
Las tablas estáticas tienen longitud fija. Cada registro tiene asignado exactamente 10 Bytes.
Este tipo de tablas se caracterizan por:
Las columnas de las tablas dinámicas tienen diferentes tamaños. Auque este tipo de dato ahorra espacio, resulta sin embargo más complejo.
Las tablas de tipo dinámico presentan las siguientes características:
Las tablas comprimidas son tablas de solo lectura que utilizan mucho menos espacio en disco.
Son ideales para su uso con datos comprimidos que no cambien (que solo se pueden leer y no escribir) y donde no exista mucho espacio disponible.
Las tablas comprimidas presentan las siguientes características:
Las tablas Merge son la fusión de las tablas MyISAM iguales.
Por lo general se usa cuando las tablas MyISAM comienzan a resultar demasiado grandes.
Entre las ventajas de estas tablas se pueden mencionar las siguientes:
Desventajas de la tabla Merge:
Las tablas Heap son el tipo de tabla más rápido porque se almacena en memoria y utilizan un índice asignado. La contrapartida es que como se almacenan en memoria, en el caso de una falla del sistema, los datos se pierden.
Las tablas Innodb son tablas de transacción segura (lo que significa que dispone de las funciones COMMIT y ROLLBACK). En una tabla MyISAM, la tabla entera se bloquea al realizar funciones de inserción. Durante esa fracción de segundo, no se puede ejecutar ninguna otra instrucción sobre la tabla. Innodb utiliza funciones de bloqueo a nivel de fila de manera que solo se bloquee dicha fila y no toda la tabla, y se puedan seguir aplicando instrucciones sobre otras filas.
Las consultas sobre la base de datos se ejecutan una después de otra. En el caso de un sitio Web que sirva páginas, da lo mismo el orden en que la base de datos realice las consultas, siempre y cuando lo haga rápidamente. Sin embargo, ciertos tipos de consultas necesitan realizarse en un orden dado, como las que dependen de los resultados de una consulta anterior, o grupos de actualizaciones que necesitan realizarse en conjunto. Todos los tipos de tabla pueden utilizar la función de bloqueo, pero sólo los tipos innodb y BDB disponen de funciones transaccionales integradas.
La potencia de las tablas innodb procede del uso de transacciones o instrucciones SQL agrupadas en una. Un ejemplo típico son las transacciones bancarias.
Por ejemplo, si se transfiere una cantidad de dinero desde la cuenta de una persona a otra, se realizan al menos dos consultas:
UPDATE Persona1 SET Valor = ValorDisponible – ValorADebitar;
UPDATE Persona2 SET Valor = ValorDisponible + ValorADebitar;
El proceso parece claro, pero que ocurriría si algo sale mal durante el proceso y el sistema falla entre las dos consultas sin que llegue a completarse la segunda. Se habrá retirado los fondos de la cuenta de la primera persona, se creerá que el pago se ha realizado. Sin embargo, la segunda persona no estará muy contenta porque el pago no se ha realizado. En este tipo de transacciones, resulta fundamental asegurarse de que las dos consultas se levan a cabo o que no se hace ninguna de las dos. Para ello, se empaquetan en los que se conoce como una transacción, con una instrucción BEGIN para indicar el inicio de la transacción y una instrucción COMMIT para indicar el final. Solo tras procesar la instrucción COMMIT, las consultas se habrán convertido en permanentes. Si algo sale mal a media ejecución, podemos utilizar el comando ROLLBACK para invertir la parte incompleta de la transacción.
De manera predeterminada, las tablas innodb realizan una lectura coherente. Esto significa que al realizar una consulta de selección, Mysql devuelve los valores presentes de la base de datos hasta la última transacción completada. Si en el momento de realizar la consulta existe alguna transacción en progreso, los resultados de las instrucciones UPDATE o INSERT no se reflejarán, con una excepción: la transacción abierta puede modificarse (puede que haya observado que al realizar la consulta BEGIN-INSERT-SELECT, se visualizó el resultado insertado). Para poder verlo, necesita tener dos ventanas abiertas y estar conectado a la base de datos.
Las lecturas coherentes no siempre resultan adecuadas. Por ejemplo, que ocurriría si varios usuarios están intentando agregar un nuevo registro en una tabla innotest? Cada nuevo registro inserta un número ascendente exclusivo, este campo no es clave principal o un campo de incremento automático, por lo tanto nada impide que cree el registro duplicado. Sin embargo, no queremos que eso ocurra. Lo que desearíamos es leer el valor actual e insertar un nuevo valor, incrementando en una unidad. Pero esta acción no garantiza un valor único.
La forma de evitar resultados erróneos es realizando un bloqueo de actualización sobre la operación de selección. Si indicamos a Mysql, que estamos realizando una lectura de actualización, no permitirá que nadie más lea el valor hasta que nuestra transacción se haya completado.
Existe otro tipo de bloqueo de lectura que no devuelve un valor si el valor que está leyendo ha sido modificado por una transacción incompleta. Devuelve el último valor, pero no forma parte de una transacción cuya intención es modificar el valor.
Las tablas BDB procesan las transacciones de forma ligeramente diferente a las tablas Innodb. Si una persona está realizando una transacción sobre una tabla x, si esta transacción no está completa, ninguna persona podrá consultar los datos de esta tabla mientras la transacción no finalice.
El periodo de tiempo que puede significar al llevar a cabo esta consulta es demasiado. El hecho de que no se trate de una consulta de selección "rápida" en las tablas BDB significa que todas las transacciones que se pospongan pueden dar lugar a graves problemas de rendimiento.
Como en el caso de las tablas innodb, el modo predeterminado de AUTOCOMMIT = 1. Esto significa que a menos que coloque sus cambios dentro de una transacción (comenzando con BEGIN), se completarán inmediatamente.
Existe una serie de comandos adicionales que finalizan automáticamente una transacción (en otras palabras, que se comportan como si hubiéramos realizado una operación de confirmación):
Hay que tener mucho cuidado cuando se realizan transacciones ya que al ejecutar cualquiera de estos comandos cuando las transacción este a medias, automáticamente se realizará un COMMIT.
Mysql maneja bloqueo a nivel de fila como lo revisamos anteriormente en el análisis de las tablas innodb y BDB. Los bloqueos a nivel de fila son mucho más eficaces cuando se necesita realizar una gran cantidad de inserciones o actualizaciones en la tabla. El bloqueo a nivel de fila, sin embargo, solo está disponible para los tipos de tabla de transacción segura (BDB e Innodb). Mysql incorpora la función de bloqueo a nivel de tablas, que está disponible para todos los tipos de tabla.
Existen dos tipos de bloqueos de tabla: los bloqueos de lectura y los bloqueos de escritura. Los bloqueos de lectura solo permiten realizar lecturas sobre la tabla, quedando bloqueadas las operaciones de escritura. Los bloqueos de escritura impiden la realización de operaciones de lectura o escritura sobre la tabla durante el bloqueo.
Se debe evitar los bloqueos sobre tablas que necesiten realizar un gran volumen de actualizaciones, ya que, en el caso de los bloqueos de escritura, no se puede leer o escribir ningún registro de la tabla durante el bloqueo.
Además, como los bloqueos de escritura tienen prioridad sobre los de lectura de manera predeterminada, no se puede leer ningún registro hasta que todas las operaciones de actualización e inserción se completen, lo que puede provocar que Mysql se atasque de forma terrible. Existen varias formas de evitar los bloqueos de tabla. Una de ellas consiste en realizar la operación de lectura y actualización dentro de la misma instrucción (es lo que se conoce como actualización incremental).
Se puede modificar el comportamiento predeterminado al trabajar con transacciones mediante el establecimiento del nivel de transacción. Existen varios niveles de transacción en Mysql. En concreto admite los siguientes niveles de aislamiento de transacción.
Este nivel permite transacciones para leer datos sin confirmar desde otras transacciones (es lo que se conoce como lectura sucia).
Este nivel no permite lecturas no susceptibles de repetición (que son las que se dan cuando otra transacción ha modificado los datos, incluso si se han confirmado).
Este nivel no permite lecturas fantasma, que tienen lugar cuando otra transacción ha confirmado una nueva fila que coincide con los resultados de nuestra consulta. Los datos serán los mismos en cada ocasión.
Es posible agilitar la velocidad en las consultas mediante el uso de métodos básicos.
El uso inteligente de índices ayudará a que la consulta, la actualización sea más rápida.
El ajuste correcto del servidor también contribuye a lograr mejoras notables.
Al realizar una consulta sobre una tabla X de la base de datos, los registros son recuperados mediante un barrido completo de la tabla si la misma no utiliza índices, el problema es notorio cuando queremos buscar información con cierto criterio de búsqueda, haciendo que la consulta se demore demasiado.
La operación de recorrer la tabla de esta forma (de principio a fin, examinando todos los registros) se conoce como examen completo de la tabla. Cuando las tablas son de gran tamaño, esta operación resulta poco eficiente ya que la labor de examinar tablas compuestas de varios cientos de miles de registros puede resultar muy lenta. Para evitar este problema, se debe ordenar los registros. Sin embargo, puede ocurrir que deseemos buscar registros de la tabla utilizando otro criterio de búsqueda. La solución es crear listas separadas para cada campo que se desee ordenar, a este ordenamiento se le conoce como índice.
En Mysql existen cuatro tipos de índice: clave primaria, un índice exclusivo, un índice de texto completo, y un índice ordinario.
Una clave primaria es un índice establecido sobre un campo en el que cada valor es exclusivo y ninguno de los valores puede ser nulo.
Para establecer una clave primaria al crear la tabla, se debe utilizar la instrucción PRIMARY KEY al final de las definiciones del campo, es importante la palabra clave NOT NULL, es además obligatoria al crear un campo primario, esto indica a la base de datos que no se admiten valores nulos ni valores duplicados ya que la clave primaria es única.
Los índices que no son primarios, permiten valores duplicados (a menos que los campos se especifiquen como únicos). Un índice exclusivo permite realizar búsquedas por un solo registro de la tabla que no necesariamente es único pero que la gran cantidad de registros almacenados amerita la creación de este índice.
Se puede crear este tipo de índice sobre cualquier campo Char, Varchar o Text. Los índices de texto completo están diseñados para facilitar la búsqueda sobre palabras clave en capos de texto de tablas grandes.
Para devolver los resultados de una búsqueda de texto completo, se utiliza la función MATCH(), y se busca la correspondencia de un campo con un valor.
Un índice ordinario es aquel que por necesidad del programador o de la consulta es necesario la creación del índice, este puede ser de uno o varios registros. Hay que tener cuidado en la creación de este tipo de índices, ya que pueden degradar el correcto funcionamiento de la base de datos, no se puede crear porque sí, es necesario examinar detenidamente si es óptimo o no.
Cada tipo de tabla tiene su propio comportamiento en materia de índices y cada una de ellas lo procesa de manera diferente. No todos los tipos de índices están disponibles para los distintos tipos de tabla. Es importante tener claro como se va a utilizar una tabla y los índices que se van a necesitar ante de seleccionar el tipo de tabla. En ocasiones, lo que parece ser el tipo de tabla perfecta se convierte en la peor elección porque o se puede utilizar un determinado tipo de índice en ella.
A continuación se enlista las funciones y las diferencias de índices para cada tipo de tabla. Las tablas MyISAM presentan las siguientes características:
Las tablas MERGE presentan las siguientes características:
Las tablas HEAP presentan las siguientes características:
Las tablas ISAM utilizan un índice B-TREE almacenado en archivos con la extensión .ism.
Las tablas InnoDB no pueden utilizar índices de texto completo.
Las tablas con pocos índices devolverán los resultados muy rápido. Pero la inclusión de demasiados índices, aunque no suele ser normal, también ocasiona degradación de la base de datos. Los índices ocupan espacio de disco y, como están ordenados, cada vez que se realice una operación de inserción o de actualización, es necesario volver a organizar el índice para incluir los cambios, lo que da como resultado una carga de trabajo adicional significativa. La eficiencia en el uso de los índices depende también de la configuración de Mysql.
El uso más común de un índice consiste en recuperar filas que cumplan una condición incluida en la cláusula WHERE.
Es muy importante crear el índice correcto, sobre el campo correcto, revisando siempre que forme parte de la condición.
Al buscar valores máximos o mínimos, Mysql, sólo necesita tomar el primer valor o el último de una tabla ordenada con un índice, lo que resulta extremadamente rápido.
Si se solicita con frecuencia valores máximos o mínimos, resulta muy útil crear un índice sobre el campo pertinente.
Comenzando por la parte izquierda de la lista de campos del índice, Mysql puede utilizar cada uno de ellos, uno tras otro, siempre y cuando sigan la secuencia empezando por la izquierda.
Para una mejor comprensión de este concepto se va a utilizar el siguiente índice:
Tabla: Customer, INDEX(surname, inicial, first_name).
Si se realiza una consulta incluyendo los tres campos que forman parte del índice, lograríamos el mayor provecho del índice creado;
SELECT * FROM customer WHERE surname = ‘Clegg’ AND inicial = ‘X’ AND first_name = ‘Yvonne’.
También sacaríamos el máximo partido del índice si buscamos por el apellido y la inicial.
SELECT * FROM customer WHERE surname = ‘Clegg’ AND inicial = ‘X’.
O simplemente por el apellido:
SELECT * FROM customer WHERE surname = ‘Clegg’.
Sin embargo, si se rompe la secuencia de disposición más a la izquierda y realiza la búsqueda por el nombre o la inicial o por ambos campos, Mysql no utilizará el índice:
SELECT * FROM customer WHERE inicial = ‘X’ AND first_name = ‘Yvonne’.
SELECT * FROM customer WHERE first_name = ‘Yvonne’.
SELECT * FROM customer WHERE inicial = ‘X’.
Ninguna de las anteriores consultas utiliza el índice.
Se debe tomar en cuenta los siguientes consejos antes de seleccionar un índice:
Mientras mayor sea el número de tablas que se combinan, mayor será la cantidad de filas examinadas. Parte del buen diseño de las bases de datos consiste en hallar un equilibrio entre las tablas pequeñas de las bases de datos que necesitan más combinaciones y las tablas de mayor tamaño que resultan más difíciles de mantener.
Lo principal para que una consulta sea óptima es la selección correcta del índice y la cláusula WHERE correctamente definida, tomando en cuenta la prefijación más a la izquierda.
En Mysql un detalle importante es el comando EXPLAIN, que ayuda al programador a conocer en detalle que índice se está utilizando, cuantos registros revisó para sacar la consulta, como es procesada la instrucción SELECT, esta instrucción es de gran ayuda para escribir consultas optimas y seleccionar el índice adecuado a la consulta.
Cuando más complejos sean los permisos, mayor será la carga de trabajo que experimentan las consultas.
Una operación de actualización es prácticamente igual a una operación de selección con la diferencia de que se realiza una operación de escritura al final.
Es posible optimizar una instrucción UPDATE de la misma forma con la que haríamos con la instrucción SELECT. Así mismo, hay que tener en cuenta que cuando menor sea el número de índices y el número de datos, más rápida resultará la operación.
La velocidad de la instrucción DELETE depende del número de índices. Al eliminar registros, resulta necesario suprimir, cada uno de ellos de todos los índices.
El mejor método para insertar datos consiste en utilizar LOAD DATA en lugar de INSERT, ya que puede resultar 20 veces más rápido.
Oracle es un sistema de administración de base de datos (o RDBMS Relational Data Base Management System por las siglas en inglés), fabricado por Oracle corporation, básicamente una herramienta cliente/servidor para la gestión de Bases de Datos. Es un producto vendido a nivel mundial, aunque la gran potencia que tiene y su elevado precio hace que sólo se vea en empresas muy grandes y multinacionales, por norma general. En el desarrollo de páginas web pasa lo mismo: como es un sistema muy caro no está tan extendido como otras bases de datos, por ejemplo, Access, Mysql, Sql Server, etc.
Para desarrollar en Oracle utilizamos PL/SQL un lenguaje de 5ª generación, bastante potente para tratar y gestionar la base de datos, también por norma general se suele utilizar SQL.
Oracle es sin duda una de las mejores bases de datos que tenemos en el mercado, es un sistema gestor de base de datos robusto, tiene muchas características que nos garantizan la seguridad e integridad de los datos; que las transacciones se ejecuten de forma correcta, sin causar inconsistencias; ayuda a administrar y almacenar grandes volúmenes de datos; estabilidad, escalabilidad y es multiplataforma.
Aunque su dominio en el mercado de servidores empresariales ha sido casi total hasta hace poco, recientemente sufre la competencia de gestores de bases de datos comerciales y de la oferta de otros con licencia Software Libre como PostgreSql, Mysql o FireBird. Las últimas versiones de Oracle han sido certificadas para poder trabajar bajo Linux.
Gráfico # 5: Instancia de Oracle

Fuente: Manual de Oracle
Autor: Diego Burbano
Por cada instancia de Oracle se tiene una sola base de datos.
En un servidor se pueden crear varias instancias, pero no es recomendable ya que cada instancia consume muchos recursos.
Gráfico # 6: Diagrama de arquitectura Oracle

Fuente: Manual de Oracle
Autor: Diego Burbano
Una instancia de Oracle está conformada por varios procesos de fondo y espacios de memoria compartida denominada System Global Area (SGA) que son necesarios para acceder a la información contenida en la base de datos.
La instancia está conformada por procesos del usuario, procesos que se ejecutan en el background de Oracle y los espacios de memoria que comparten estos procesos.
El SGA es utilizado para el intercambio de datos entre el servidor y los clientes.
Una instancia de oracle solo puede abrir una sola base de datos a la vez
El SGA es un área de memoria compartida que se utiliza para almacenar información de control y de datos de la instancia. Se crea cuando la instancia es levantada y se borra cuando ésta se deja de usar (cuando se hace shutdown). La información que se almacena en esta área consiste de los siguientes elementos, cada uno de ellos con un tamaño fijo:
El buffer de caché (database buffer cache): almacena los bloques de datos utilizados recientemente (se hayan o no confirmado sus cambios en el disco). Al utilizarse este buffer se reducen las operaciones de entrada y salida y por esto se mejora el rendimiento.
El buffer de redo log: Guarda los cambios efectuados en la base de datos. Estos buffers escriben en el archivo físico de redo log tan rápido como se pueda sin perder eficiencia. Este último archivo se utiliza para recuperar la base de datos ante eventuales fallas del sistema.
El área shared pool: Esta sola área almacena estructuras de memoria compartida, tales como las áreas de código SQL compartido e información interna del diccionario. Una cantidad insuficiente de espacio asignado a esta área podría redundar en problemas de rendimiento. En resumen, contiene las áreas del caché de biblioteca y del caché del diccionario de datos.
Esta área de memoria contiene datos e información de control para los procesos que se ejecutan en el servidor de Oracle (relacionados con la base de datos, por supuesto). El tamaño y contenido de la PGA depende de las opciones del servidor que se hayan instalado.
Dentro de los procesos que forman parte de las base de datos tenemos:
De la relación de servicios creados durante la instalación de Oracle, por ahora nos interesa básicamente dos.
Para una correcta conexión, estos dos servicios deben estar ejecutándose.

Fuente: Manual de Oracle
Autor: Diego Burbano

Fuente: Manual de Oracle
Autor: Diego Burbano
Oracle tiene su herramienta de red que permite a las aplicaciones en general conectarse a servidores Oracle. Para que una aplicación pueda conectarse a un servidor Oracle, es necesario que el Proceso Escucha se encuentre ejecutándose en el servidor(OracleOraHome92TNSListener).
El esquema de conexión remota se puede apreciar en el gráfico # 8.
El proceso se describe a continuación:
Los tipos de datos Oracle se agrupan en los siguientes conjuntos:
Tabla # 6: Tipos de datos Oracle
|
Alfanuméricos |
Numéricos |
Fecha |
Binarios |
Otros |
|
CHAR |
NUMBER |
DATE |
RAW |
ROWID |
|
VARCHAR(2) |
FLOAT |
TIMESTAMP |
LONG RAW |
UROWID |
|
VARCHAR |
TIMESTAMP WITH TIME ZONE |
BLOB |
||
|
NCHAR |
INTERVAL |
CLOB |
||
|
NVARCHAR(2) |
NLOB |
|||
|
LONG |
BFILE |
Fuente: Manual de Oracle
Autor: Diego Burbano
Los valores alfanuméricos van encerrados entre comilla simple.
Los valores numéricos son número simple: 123
Las fechas van encerradas entre comillas simples ejm: ‘14/09/1977’.
Los valores binarios no pueden ser representados, son videos, fotos.
Para los textos, oracle dispone de los siguientes tipos:
En todos estos tipos se indica el tamaño en paréntesis tras el nombre del tipo, este tamaño, en el caso de los tipos VARCHAR(2), es obligatorio, en el caso de los tipos CHAR son opcionales (si no se pone toma uno como default).
El tipo de dato Number es un tipo de dato versátil, que permite representar todo tipo de números de entre 10E-130 y 9,99999999999 * 10E128. Fuera de estos rangos, oracle devuelve un error.
Los números decimales, se indican con NUMBER (p, s), donde p es la precisión máxima y s es la escala.
El tipo de dato DATE, permite almacenar fechas. Las fechas se puede escribir en formato día, mes, año entre comillas. El separador puede ser /, - y casi cualquier símbolo.
El tipo de dato TIMESTAMP, es una extensión del anterior, almacena valores de día, mes, año, junto con la hora, minutos y segundos, con lo que representa un instante concreto en el tiempo.
El tipo de dato INTERVAL representa intervalos de tiempo.
El tipo de dato RAW sirve para almacenar valores binarios de hasta 2000 bytes (se puede especificar el tamaño máximo entre paréntesis).
LOB, son varios tipos de datos que permiten almacenar valores muy grandes. Incluye BLOB, CLOB, NCLOB y BFILE.
El tipo ROWID, es un valor hexadecimal que representa la dirección única de una fila en su tabla.
Se denomina transacción al espacio de tiempo que transcurre desde la primera sentencia DML que no sea SELECT (INSERT, UPDATE O DELETE) hasta que damos por finalizada la transacción explícitamente (con las sentencias apropiadas) o implícitamente (finalizando la sesión). Una base de datos está en estado consistente si, obedece todas las restricciones de integridad definidas sobre ella. Durante la transacción, todas las modificaciones realizadas sobre la base de datos, no son definitivas, más concretamente, se realizan en un TABLESPACE especial que se denomina ROOLLBACK o RBS (Roolback segment). Este tablespace, tiene reservado un espacio para cada sesión activa en el servidor, y es en este espacio donde, se almacenan cada una de las modificaciones de la transacción. Una vez que la transacción se ha finalizado, las modificaciones temporales almacenadas en el RBS, se vuelcan al tablespace original, donde está almacenada nuestra tabla. Esto permite que ciertas modificaciones que se realizan en varias sentencias, se puedan validar todas a la vez, o rechazar todas a la vez. Es importante asegurar siempre que la base de datos nunca este en un estado de inconsistencia. Sin embargo, durante la ejecución de una transacción, la base de datos puede estar temporalmente en un estado inconsistente. El punto importante aquí, es que la base de datos regrese al estado consistente al final de la transacción.
Gráfico #9: Estado transaccional de la base de datos

Fuente: Manual Administración de Oracle
Autor : Diego Burbano
El siguiente gráfico, ilustra el funcionamiento de una transacción, cuando es confirmada y cuando es cancelada.
Gráfico #10: Ejecución de transacciones

Fuente: Manual Administración de Oracle
Autor : Diego Burbano
El inicio de una transacción es de manera automática cuando ejecutamos una sentencia insert, update o delete. La ejecución de cualquiera de estas sentencias da inicio a una transacción. Las instrucciones que se ejecuten a continuación formarán parte de la misma transacción.
Para confirmar los cambios realizados durante una transacción, utilizamos la sentencia COMMIT.
Para cancelar los cambios realizados durante una transacción, utilizamos la sentencia ROLLBACK.
Opcionalmente existe la sentencia SAVEPOINT para establecer puntos de transacción.
Si el número de sentencias es tan grande que el RBS se llena, Oracle hará un rollback, por lo que perdemos todos los datos. Así que es recomendable hacer COMMIT cada vez que el estado de la base de datos sea consistente.
Si terminamos la sesión, con una transacción pendiente, Oracle consultará el parámetro AUTOCOMMIT, y si este está en TRUE, hará COMMIT, si está en FALSE hará ROLLBACK.
Hay que tener en cuenta que cualquier instrucción DDL (como alter table por ejemplo), o una instrucción DCL (como grant), si es ejecutada durante la transacción, ese instante pasan a ser definitivas y finaliza toda la transacción.
También es importante tomar en cuanta que si el usuario que inicia la transacción, realiza una consulta a los datos, está, mostrará los datos ya modificados, el resto de usuarios, ve los datos tal y como estaban antes de la transacción, de hecho, los registros afectados por la transacción, aparecen bloqueados hasta que la transacción finalice. Tras la transacción, todos los usuarios ven los datos que quedan al final de la transacción. Los bloqueos son liberados y los puntos de ruptura borrados.
Se pueden diferenciar dos clases de cloqueos:
Es importante notar que no es necesario bloquear un registro de la base de datos durante la duración de la transacción ya que esto incrementaría la posibilidad de que ocurra un bloqueo mutuo (dead lock), por esta razón, el bloqueo se lo podría hacer solamente durante el acceso real al objeto.
Para resolver el conflicto creado por bloqueo mutuo, lo más usual es deshacer alguna de las transacciones. En Oracle se escoge aquella que tenga la menor cantidad de trabajo realizado.
Consideremos el siguiente ejemplo:
En este punto, ni T1 ni T2 pueden proceder porque están bloqueadas mutuamente. La estrategia para resolver este tipo de problemas, es , permitir que los bloqueos mutuos ocurran, detectarlos y resolverlos. La técnica de detección de un bloqueo mutuo (dead lock) puede ser muy costosa si el nivel de granularidad es alto.
El bloqueo en Oracle es completamente automático y no requiere intervención del usuario. No obstante, también se le permite al usuario bloquear cuando lo considere necesario, deshabilitando el bloqueo por defecto.
La forma de hacerlo es:
LOCK TABLE tabla1 IN {SHARE | SHARE UPDATE | EXCLUSIVE} MODE [NOWAIT].
Candado.- impide que una transacción, accese a un registro reservado previamente por otra transacción, hasta que la transacción libere el registro o el campo.
Granularidad.- es el tamaño del item sobre el cual se ejerce el bloqueo. Este item, puede ser una página, bloque, una tabla o toda la base de datos.
Oracle tiene soporte extensivo para constructores relacionales orientados a objetos, incluyendo:
Oracle tiene dos lenguajes procedimentales principales, PL/SQL y Java. PL/SQL fue el lenguaje original de Oracle para los procedimientos almacenados y tiene una sintaxis similar al utilizado en el lenguaje Ada. Java se soporta mediante una máquina virtual Java dentro del motor de base de datos. Oracle proporciona un paquete para encapsular procedimientos, funciones y variables relacionadas en unidades únicas.
Oracle proporciona varios tipos de disparadores y varias opciones para el momento y forma en que se invocan. Los disparadores se pueden escribir en PL/SQL o java o como llamadas a C.
Para los disparadores que se ejecutan sobre instrucciones DML tales como insert, update o delete, Oracle soporta disparadores de filas (row) y disparadores de instrucciones (statement). Lo disparadores de filas se pueden ejecutar una vez por cada fila que se vea afectada (actualización o borrado, por ejemplo) por la operación DML. Un disparados de instrucciones, se ejecuta solamente una vez por instrucción. En cada caso, el disparador se puede definir tanto como un disparador "before" o "alter" dependiendo de si se va a invocar antes o después de que se lleva a cabo la operación DML.
Oracle también tiene disparadores que ejecutan otros eventos, tales como el inicio o finalización de la base de datos, mensajes de error del servidor, inicio o finalización de sesión de un usuario e instrucciones DDL tales como instrucciones create, alter o drop.
La base de datos Oracle se divide en unidades lógicas denominadas TABLESPACES. Cada TABLESPACE, consiste en una o más estructuras físicas denominadas DATAFILES.
Un TableSpace no es un fichero físico en disco, simplemente es el nombre que tiene un conjunto de propiedades de almacenamiento que se aplican a los objetos (tablas, secuencias…) que se crean en la base de datos bajo el tablespace indicado.
Un objeto en la base de datos debe estar almacenado obligatoriamente dentro de un tablespace.
Las propiedades que se asocian a un tablespace son:
Cuando un objeto se crea dentro de un tablespace, este objeto adquiere todas las propiedades antes descritas del tablespace utilizado.
Si creamos por ejemplo una tabla llamada Artículo, esta se almacena dentro del tablespaceA, y que por lo tanto tendrá todas las propiedades del TableSpaceA que pueden ser:
Si nos fijamos, se puede apreciar que es posible tener una tabla en un Tablespace, y los índices de esta tabla en otro tablespace. Esto es debido a que los índices no son más que objetos independientes dentro de la base de datos, como lo son las tablas. Y al ser objetos independientes, pueden ir en tablespaces independientes.
En las bases de datos Oracle encontramos el tablespace SYSTEM es un tablespace por defecto en todas las bases de datos Oracle. En él se almacenan todos los datos del sistema, el catálogo y todo el código fuente y compilado de procedimientos PL/SQL. También es posible utilizar el mismo tablespace para guardar datos del usuario. Este tablespace contiene además, el diccionario de datos, almacenamiento para disparadores y los procedimientos almacenados.
Por otra parte, también existe un tablespace Temporal. Este tablespace representa las propiedades que tendrán los objetos que la base de datos cree temporalmente para sus cálculos internos (normalmente para ordenaciones y agrupaciones).
El tablespace se puede crear con ciertas restricciones como por ejemplo un tablespace de solo lectura (Read Only), que por lo tanto, todos los objetos en el contenidos pueden recibir ordenes de consulta de datos, pero no de modificación de datos.
Un tablespace puede estar en línea o fuera de ella (OnLine o OffLine), esto es que el tablespace completo está a disposición de los usuarios o está desconectado para restringir el uso.
Un datafile es la representación física de un tablespace. Son los "Archivos de datos" donde se almacena la información físicamente.
Un datafile puede tener cualquier nombre y extensión (siempre dentro de las limitaciones del sistema operativo), y puede estar localizado en cualquier directorio del disco duro, aunque su localización típica suele ser $ORACLE_HOME/Database.
Un datafile tiene un tamaño predefinido en su creación (por ejemplo 100Mb) y este puede ser alterado en cualquier momento.
Cuando se cree un datafile, este ocupará tanto espacio en disco como hayamos indicado en su creación, aunque internamente esté vacío. Oracle hace esto para direccionar espacio continuo en disco y evitar así la fragmentación. Conforme se vayan creando objetos en el tablespace, se irá ocupando el espacio definido.
Un datafile está asociado a un solo tablespace y un tablespace está asociado a uno o varios datafiles.
Es decir, la relación lógica entre tablespaces y datafiles es de 1-N, maestro-detalle.
En la estructura manejada por Oracle un TableSpace está compuesto (físicamente) por uno o más. Estos datafiles son los ficheros físicos que soportan los objetos contenidos dentro del tablespace.
Aunque siempre se dice que los objetos están dentro del tablespace, en realidad las tablas están dentro del datafile, pero tienen propiedades asociadas al tablespace.
Cada uno de los datafiles utilizados está ocupado un tamaño en disco ( 50 mb los dos primeros y 25 mb el último) aunque en realidad solo contenga dos objetos y estos objetos no llenen el espacio asignado para los datafiles.
Los datafiles tienen un propiedad llamada AUTOEXTEND, que si está activa se encarga de que el datafile crezca automáticamente (según un tamaño indicado) cada vez que se necesite espacio y no exista.
Al igual que los tablespaces, los datafiles también pueden estar en línea o fuera de ella.
El espacio en un espacio de tablas se divide en unidades denominadas segmentos, cada una de las cuales contiene los datos para una estructura de datos específica.
Hay cuatro tipos de segmentos:
Trabajos relacionados
Ver mas trabajos de Computacion |
|
Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.