Analisis comparativo de mysql vs oracle

2,511 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,511
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
99
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Analisis comparativo de mysql vs oracle

  1. 1. 15240271780 UNIVERSIDAD VERACRUZANA<br />FACULTAD DE ADMINISTRACIÓN<br />CARRERA:<br />SISTEMAS COMPUTACIONALES ADMINISTRATIVOS<br />EXPERIENCIA:<br />BASE DE DATOS<br />análisis comparativo de mysql vs oracle<br />CATEDRÁTICO:<br />DR. CARLOS ARTURO TORRES GASTELÚ<br />INTEGRANTES:<br />FLORES RUANO EVA PATRICIA<br />MORA PÉREZ SERGIO FRANCISCO<br />ORTIZ REYES JULIETA<br />H. VERACRUZ, VER. OCTUBRE DEL 2010<br />ÍNDICE Introducción PAGEREF _Toc275027625 h 3 Comparación general PAGEREF _Toc275027625 h 4 TOC o " 1-3" h z u Control de concurrencia PAGEREF _Toc275027625 h 5 Técnicas de bloqueo PAGEREF _Toc275027625 h 6 Tipos de columnas PAGEREF _Toc275027625 h 7 Análisis de los tipos de tablas PAGEREF _Toc275027625 h 8 Transacciones y lecturas PAGEREF _Toc275027625 h 10 Niveles de transacción11 PAGEREF _Toc275027625 h Índices PAGEREF _Toc275027625 h 12 Optimización de selecciones PAGEREF _Toc275027625 h 14 Proceso servidor PAGEREF _Toc275027625 h 16 Características relacionales orientadas a objetos PAGEREF _Toc275027625 h 17 Almacenamiento e indexación TableSpace PAGEREF _Toc275027625 h 18 Sistemas operativos que soporta PAGEREF _Toc275027625 h 19 2.1 Seguridad de base de datos PAGEREF _Toc275027604 h 242.1.1 Base de datos de autenticación PAGEREF _Toc275027605 h 252.1.2 Privilegios PAGEREF _Toc275027606 h 252.2.2Nombres de objetos de esquema PAGEREF _Toc275027607 h 272.2.3 Consideraciones acerca del diseño de tabla PAGEREF _Toc275027608 h 272.2.4 Migrar múltiples bases de datos PAGEREF _Toc275027609 h 292.2.5 Esquema migraciones Consideraciones para MySQL PAGEREF _Toc275027610 h 292.3 Tipos de datos PAGEREF _Toc275027611 h 312.3.1 Tipos de datos de Oracle PAGEREF _Toc275027612 h 31Tablas de los tipos de datos de Oracle compatibles SQL Developer. PAGEREF _Toc275027613 h 312.3.3 Comparación de tipos de datos PAGEREF _Toc275027614 h 342.4 Conceptos de almacenamiento de datos PAGEREF _Toc275027615 h 363.Triggers y procedimientos almacenados PAGEREF _Toc275027616 h 383.1 Triggers PAGEREF _Toc275027617 h 383.2 Procedimientos almacenados PAGEREF _Toc275027618 h 393.2.1 Individuales instrucciones de SQL PAGEREF _Toc275027619 h 393.2.2 Variables en procedimientos almacenados PAGEREF _Toc275027620 h 413.2.3 Error de manejo en procedimientos almacenados PAGEREF _Toc275027621 h 464. Solución de problemas PAGEREF _Toc275027622 h 484.1 Definir la cuenta de usuario PAGEREF _Toc275027623 h 484.2 Dumping datos de MySQL PAGEREF _Toc275027624 h 484.3 Optimizar las opciones de línea de comandos PAGEREF _Toc275027625 h 50Conclusión PAGEREF _Toc275027625 h 51 Bibliografia PAGEREF _Toc275027625 h 52 <br />INTRODUCCIÓN<br />Un sistema que procese un gran número de pequeñas transacciones puede mejorar su productividad realizando muchas transacciones en paralelo. Un sistema que procese transacciones más largas puede mejorar tanto su productividad como sus tiempos de respuesta realizando en paralelo cada una de las subtareas de cada transacción. Las ganancias en este tipo de SGBD se pueden dar en términos de velocidad (menor tiempo de ejecución para una tarea dada) y ampliabilidad (capacidad de procesar<br />tareas más largas en el mismo tiempo).<br />En esta investigación se realiza un análisis comparativo entre un sistema manejador base de datos relacional de código abierto (Mysql) y un sistema manejador de base de datos relacional de código cerrado (Oracle).<br />Hoy en día el software de código abierto como Mysql ha ido ganando terreno y se ha convertido en una muy alternativa para ofrecer los servicios de una base de datos relacional a un menor costo y un mayor alcance en la economía de las pequeñas empresas ya que posee muchas de las funcionalidades necesarias.<br />Oracle en cambio es un software de código cerrado vendido a nivel mundial, aunque la gran potencia que tiene y su elevado precio hacen que sólo se vea en empresas muy grandes y multinacionales.<br />La cuestión está en si estas herramientas tienen la misma calidad, y pueden garantizar el mismo soporte a las empresas que las utilicen.<br />Para comparar a estos dos sistemas se tomaron en cuenta algunos criterios como son entre otros:<br />Seguridad<br />Performance (rendimiento)<br />Disponibilidad<br />Tipos de datos<br />Tipos de almacenamiento<br />Tipos de sistemas operativos<br />Control de concurrencia<br />.<br />Comparación general<br />MysqlOracleNombre de la empresaMysql ABOracle Corporation1er realease publico19961977Ultima versión estable5.010g reléase 2Tipo de licenciamientoGpl o propietariopropietario<br />Mysql es muy popular por su velocidad de procesamiento, además el tipo de licencia<br />que maneja es Gpl (General Public Licence). MySQL es excelente cuando se lee de alta velocidad se puede utilizar para la web, juegos y pequeñas y medianas bodegas de datos y los sistemas OLTP. También se puede utilizar con las empresas de inicio y proyectos más pequeños, ya que puede ser fácil de usar a un bajo costo.No tiene una fracción de las características de Oracle, pero para las empresas que utilizan MySQL a menudo son la construcción de la mayor parte de la funcionalidad en el nivel medio y no necesitan mucho de la funcionalidad de la base de datos.No tiene una gran cantidad de software que rodea a apoyar un ambiente de MySQL. Tercero de software y software libre son de uso frecuente para ejecutar MySQL en un entorno empresarial. Nagios y Memcache se utilizan mucho en entornos MySQL.<br />Oracle es una base de datos robusta, es una de las bases de datos más confiables que<br />existen en el mercado. Oracle ofrece muchas características de XML, los tipos definidos por el usuario, un montón de herramientas de gestión de base de datos. Se puede utilizar con Oracle Express, una base de datos que ofrece muchas funciones para el proyecto comienza a ejecutar las aplicaciones de negocios más grandes del mundo. Tiene toneladas de características que suelen minimizar la necesidad de software de 3 ª Parte. Oracle está poniendo un mayor énfasis en dos áreas:1.Enterprise aplicaciones de negocio con Oracle Business Suite, Siebel, JD Edwards, PeopleSoft, Retek, Oracle, etc. Próxima generación de Oracle Fusion Applications van a tener un impacto importante en las aplicaciones de negocio en los próximos años.2. Oracle Fusion Middleware y la tecnología que rodea el nivel medio con servidores de aplicaciones J2EE, BPEL, SOA, XML, Servicios Web. La posibilidad de obtener diferentes aplicaciones de trabajar juntos son la clave para las aplicaciones Oracle Fusion. Compra de Oracle de BEA muestra el énfasis de Oracle es puesta en el nivel medio para ejecutar aplicaciones de negocios.<br />Confiabilidad. Puesto que los sistemas de base de datos en línea no pueden<br />fallar.<br />Disponibilidad. Debido a que los sistemas de base de datos en línea deben<br />estar actualizados correctamente todo el tiempo.<br />Tiempos de Respuesta.- En sistemas de este tipo, el tiempo de respuesta de<br />las transacciones no debe ser mayor a diez segundos.<br />Throughput. Los sistemas de base de datos en línea requieren procesar<br />miles de transacciones por segundo.<br />Atomicidad. En el procesamiento de transacciones no se aceptan resultados<br />parciales.<br />Permanencia. No se permite la eliminación en la base de datos de los<br />efectos de una transacción que ha culminado con éxito.<br />Performance (rendimiento). Es la capacidad de respuesta (el nivel de rapidez). cumplir con las expectaciones de rendimiento de cualquier sistema, ya sea un sistema de procesamiento transaccional de alta velocidad, o un sitio web de gran volúmen sirviendo un billón de consultas diarias <br />SEGURIDAD<br />Para lograr tal nivel de seguridad hay que adoptar medidas en varios niveles:<br />• Sistema de base de datos. Dar acceso a los datos a usuarios de acuerdo al<br />tipo de usuario, esto quiere decir, que se debe dar los permisos<br />correspondientes a una parte limitada de la base. Por ejemplo, a ciertos<br />usuarios de la base de datos se les puede dar permiso para consulta pero no se<br />les permite la modificación. Es responsabilidad del sistema gestor de base de<br />datos asegurarse de que no se violen estas restricciones de autorización.<br />• Sistema Operativo. La debilidad del sistema operativo puede servir como<br />medio de acceso no autorizado a los datos. Lo importante aquí es que el<br />sistema operativo debe ser seguro para minimizar la posibilidad de que se<br />pueda ingresar a la base de datos.<br />• Red. Este es un punto muy importante porque hoy en día casi todos los<br />sistemas de base de datos permiten el acceso remoto desde terminales, la<br />seguridad a nivel de red juega un papel muy importante.<br />• Físico. Los sitios que contienen los sistemas informáticos como el lugar.<br />CONTROL DE CONCURRENCIA<br />El control de concurrencia en las bases de datos permite que la información se<br />maneje en forma eficiente, permite además la ejecución de transacciones en paralelo,<br />accesando a información compartida y, por lo tanto, interfiriendo potencialmente<br />unas con otras.<br />donde están los servidores por ejemplo, deben tener seguridades contra<br />intrusos.<br />• Humano. Los usuarios administradores de la base de datos deben ser<br />cuidadosamente elegidos para reducir la posibilidad de que alguno de ellos dé<br />acceso a personas no autorizadas.<br />El objetivo del control de concurrencia y recuperación es asegurar que dichas<br />transacciones se ejecuten atómicamente.<br />Técnicas de bloqueo<br />Es una variable asociada a cada elemento de datos que describe el estado de dicho<br />elemento respecto a las posibles operaciones (recuperación o actualización) que se<br />pueden realizar sobre ellos en cada momento.<br />Las transacciones pueden llevar a cabo bloqueos, impidiendo a otros usuarios la<br />recuperación o actualización de los elementos bloqueados, para evitar inconsistencias<br />en el acceso concurrente.<br />Los SGBD tienen bloqueos (por registro, por tabla) para asegurar la consistencia.<br />Los usuarios también pueden bloquear explícitamente los objetos, impidiendo el<br />acceso por parte de otros usuarios.<br />cuando se quiere actualizar datos.<br />• Bloqueo compartido: cuando una transacción bloquea en este modo, permite<br />que otras transacciones retengan también el objeto en bloque compartido,<br />pero no exclusivo. Este tipo se utiliza cuando no se requiere actualizar datos,<br />pero se desea impedir cualquier modificación mientras los datos son<br />consultados.<br />El algoritmo que se utiliza se llama bloqueo de dos fases (two phase locking).<br />El problema de las técnicas de bloqueo es que puede producirse un interbloqueo<br />(deadlock), dos o mas transacciones están esperando cada una de ellas que la otra<br />libere algún objeto antes de seguir<br />Se puede solucionar:<br />• Prevenir el deadlock: obliga a que las transacciones bloqueen todos los<br />elementos que necesitan por adelantado. En caso de no poder conseguir todos<br />esos elementos no bloquea ninguno y se queda en espera hasta volver a<br />intentarlo.<br />• Detectar el deadlock: Se controla de forma periódica si se ha producido un<br />deadlock. Se construye un grafo en espera, cada nodo es una transacción en<br />ejecución y un arco de una transacción Ti a Tj, en caso que Ti esté esperando<br />un elemento que ocupa Tj. Si existe un ciclo en el grafo tenemos un deadlock.<br />La solución es escoger transacciones víctimas y deshacerlas, hasta que desaparezca el deadlock. 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.<br />A diferencia de los proyectos propietarios, en los que el código fuente es<br />desarrollado por un número reducido de personas y se protege atentamente, los<br />proyectos de código abierto no excluyen a nadie interesado en aportar ideas, si<br />disponen de los conocimientos necesarios.<br />Mysql es una base de datos robusta que se la puede comparar con una<br />base de datos comercial, es incluso más veloz en el procesamiento de las<br />transacciones y dispone de un sistema de permisos elegante y potente, y ahora,<br />además, incluye un motor de almacenamiento InnoDb19[17] compatible con<br />ACID20[18], además dispone de store procedures, triggers, vistas.<br />Mysql es rápido, y una solución accesible para administrar correctamente los datos de una empresa. Son muchas las razones para escoger a Mysql como una solución de misión crítica para la administración de datos:<br />Costo: Mysql es gratuito para la mayor parte de los usos y su servicio de<br />asistencia resulta económico.<br />Asistencia: MysqlAB ofrece contratos de asistencia a precios razonables y<br />existe una nutrida y activa comunidad Mysql.<br />Velocidad: Mysql es mucho más rápido que la mayoría de sus rivales.<br />Funcionalidad: Mysql dispone de muchas de las funciones que exigen los<br />desarrolladores profesionales, como compatibilidad completa con ACID,<br />compatibilidad para la mayor parte de SQL ANSI21[19], volcados online,<br />duplicación, funciones SSL e integración con la mayor parte de los entornos<br />de programación.<br />Portabilidad: Mysql se ejecuta en la inmensa mayoría de sistemas operativos<br />y, la mayor parte de los casos, los datos se pueden transferir de un sistema a<br />otro sin dificultad.<br />Facilidad de uso: Mysql resulta fácil de utilizar y de administrar. Las<br />herramientas de Mysql son potentes y flexibles, sin sacrificar su capacidad de<br />uso.<br />INNODB es un tipo de tabla de Mysql que permite trabajar con transacciones, y<br />definir reglas de integridad referencial.<br />Mysql utiliza varios tipos de tablas. El tipo de tabla predeterminado es MyISAM que<br />está optimizado para la velocidad del comando SELECT.<br />La mayor parte de los sitios Web utilizan esta tabla, ya que estos sitios suelen utilizar<br />la instrucción SELECT mucho más que las instrucciones INSERT o UPDATE.<br />Análisis de los distintos tipos de columnas<br />Existen tres tipos fundamentales de columnas: numéricas, de cadena y de fecha.<br />Por regla general se debe seleccionar el tipo de columna de menor tamaño, ya que de<br />esta forma se ahorra espacio y se logra una mayor velocidad de acceso y<br />actualización. Sin embargo, si se selecciona un tipo de columna demasiado pequeño,<br />puede dar como resultado la pérdida de datos o que se recorten al introducirlos.<br />Tipos de columna numéricos<br />Las columnas numéricas están diseñadas para almacenar todo tipo de datos<br />numéricos, como precios, edades y cantidades. Hay dos tipos principales de tipos<br />numéricos: tipos enteros y de punto flotante.<br />Tipos de columna de cadena<br />Los tipos de columna de cadena se utilizan para almacenar todo tipo de datos<br />compuestos de caracteres como nombres, direcciones.<br />TipoCHARVARCHARTINYBLOBTINYTEXTBLOBTEXTMEDIUMBLOBMEDIUMTEXTLONGBLOBLONGTEXTENUMSET<br />TipoTINYINTBITBOOLSMALLINTMEDIUMINTINTINTEGERBIGINTFLOATDOUBLEDECNUMERIC<br />Tabla # 3: Tipos de datos numéricos Mysql. Tabla #4: Tipo de datos Cadena Mysql.<br />Tipos de cadena de fecha y hora<br />Los tipos de columna de fecha y hora están diseñados para trabajar con las<br />necesidades especiales que exigen los datos de tipo temporal y se puede utilizar para<br />almacenar datos tales como la hora del día o fechas de nacimiento.<br />Tabla #5: Tipos de datos fecha y hora Mysql<br />Fuente: Mysql Avanzado<br />Autor: Diego Burbano<br />Análisis de los distintos tipos de tablas<br />Existen dos tipos de tablas de transacción segura (Innodb y BDB). El resto (ISAM;<br />MyISAM, MERGE y HEAP) no son de transacción segura. La elección del tipo de<br />tabla adecuado puede afectar enormemente al rendimiento.<br />Tablas ISAM<br />Las tablas de tipo de Método de acceso secuencial indexado (ISAM) era el estándar<br />antiguo de Mysql. Estas fueron sustituidas por las tablas MyISAM en la versión 3.23.<br />Por lo tanto, es probable que solo se tope con este tipo de tablas si está trabando con<br />bases de datos antiguas. La principal diferencia entre las dos, es el índice de las<br />tablas MyISAM es mucho más pequeño que el de las tablas ISAM, de manera que un<br />SELECT con un índice sobre una tabla MyISAM utilizará mucho menos recursos del<br />sistema.<br />Tablas estáticas<br />Las tablas estáticas tienen longitud fija. Cada registro tiene asignado exactamente 10<br />Bytes.<br />Este tipo de tablas se caracterizan por:<br />• Ser muy rápidas (ya que Mysql sabe que el segundo nombre comienza<br />siempre en el carácter número once)<br />• Resultan sencillas de almacenar en caché.<br />• Resultan sencillas para reconstruir tras un fallo.<br />• Requieren más espacio de disco.<br />Tablas Dinámicas<br />Las columnas de las tablas dinámicas tienen diferentes tamaños. Aunque este tipo de<br />dato ahorra espacio, resulta sin embargo más complejo.<br />Las tablas de tipo dinámico presentan las siguientes características:<br />• Todas las columnas de cadena son dinámicas.<br />• Por regla general, ocupan mucho menos espacio de disco que las tablas fijas.<br />• Las tablas requieren un mantenimiento regular para evitar su fragmentación.<br />• No resulta tan sencillo de reconstruir tras un fallo, especialmente si las tablas<br />están muy fragmentadas.<br />Tablas comprimidas<br />Las tablas comprimidas son tablas de solo lectura que utilizan mucho menos espacio<br />en disco.<br />Son ideales para su uso con datos comprimidos que no cambien (que solo se pueden<br />leer y no escribir) y donde no exista mucho espacio disponible.<br />Las tablas comprimidas presentan las siguientes características:<br />• Las tablas son mucho más pequeñas.<br />• Como cada registro se comprime de forma separada, la carga de acceso es<br />reducida.<br />Cada columna se podría comprimir de forma diferente, utilizando distintos<br />algoritmos de compresión.<br />• Se puede comprimir formatos de tabla fija y dinámica.<br />Tablas Merge<br />Las tablas Merge son la fusión de las tablas MyISAM iguales.<br />Por lo general se usa cuando las tablas MyISAM comienzan a resultar demasiado<br />grandes.<br />Entre las ventajas de estas tablas se pueden mencionar las siguientes:<br />• Resultan más rápidas en determinadas situaciones.<br />• El tamaño de la tabla es más pequeño<br />Desventajas de la tabla Mergo:<br />• Resultan mucho más lentas en búsquedas.<br />• El comando REPLACE no funciona sobre ellas.<br />Tablas Ha<br />Las tablas Ha son el tipo de tabla más rápido porque se almacena en memoria y<br />utilizan un índice asignado. La contrapartida es que como se almacenan en memoria,<br />en el caso de una falla del sistema, los datos se pierden.<br />Tablas Innodb<br />Las tablas Innodb son tablas de transacción segura (lo que significa que dispone de<br />las funciones COMMIT y ROLLBACK). En una tabla MyISAM, la tabla entera se<br />bloquea al realizar funciones de inserción. Durante esa fracción de segundo, no se<br />puede ejecutar ninguna otra instrucción sobre la tabla. Innodb utiliza funciones de<br />bloqueo a nivel de fila de manera que solo se bloquee dicha fila y no toda la tabla, y<br />se puedan seguir aplicando instrucciones sobre otras filas.<br />Transacciones y bloqueos<br />Las consultas sobre la base de datos se ejecutan una después de otra. En el caso de un<br />sitio Web que sirva páginas, da lo mismo el orden en que la base de datos realice las<br />consultas, siempre y cuando lo haga rápidamente. Sin embargo, ciertos tipos de<br />consultas necesitan realizarse en un orden dado, como las que dependen de los<br />resultados de una consulta anterior, o grupos de actualizaciones que<br />Las transacciones en las tablas Indo<br />La potencia de las tablas innoble procede del uso de transacciones o instrucciones<br />SQL agrupadas en una. Un ejemplo típico son las transacciones bancarias.<br />Por ejemplo, si se transfiere una cantidad de dinero desde la cuenta de una persona a<br />otra, se realizan al menos dos consultas:<br />UPDATE Persona1 SET Valor = Valor Disponible – Valora Debitar;<br />UPDATE Persona2 SET Valor = Valor Disponible + Valora Debitar;<br />El proceso parece claro, pero que ocurriría si algo sale mal durante el proceso y el<br />sistema falla entre las dos consultas sin que llegue a completarse la segunda. Se<br />habrá retirado los fondos de la cuenta de la primera persona, se creerá que el pago se<br />ha realizado. Sin embargo, la segunda persona no estará muy contenta porque el pago<br />no se ha realizado. En este tipo de transacciones, resulta fundamental asegurarse de<br />que las dos consultas se levan a cabo o que no se hace ninguna de las dos. Para ello,<br />se empaquetan en los que se conoce como una transacción, con una instrucción<br />BEGIN para indicar el inicio de la transacción y una instrucción COMMIT para<br />indicar el final. Solo tras procesar la instrucción COMMIT, las consultas se habrán<br />convertido en permanentes. Si algo sale mal a media ejecución, podemos utilizar el<br />comando ROLLBACK para invertir la parte incompleta de la transacción.<br />Lecturas coherentes<br />De manera predeterminada, las tablas innoble realizan una lectura coherente. Esto<br />significa que al realizar una consulta de selección, Mysql devuelve los valores<br />presentes de la base de datos hasta la última transacción completada. Si en el<br />momento de realizar la consulta existe alguna transacción en progreso, los resultados<br />de las instrucciones UPDATE o INSERT no se reflejarán, con una excepción: la<br />transacción abierta puede modificarse (puede que haya observado que al realizar la<br />consulta BEGIN-INSERT-SELECT, se visualizó el resultado insertado). Para poder<br />verlo, necesita tener dos ventanas abiertas y estar conectado a la base de datos.<br />Lectura de Bloqueos para actualizaciones<br />Las lecturas coherentes no siempre resultan adecuadas. Por ejemplo, que ocurriría si<br />varios usuarios están intentando agregar un nuevo registro en una tabla innotest?<br />Cada nuevo registro inserta un número ascendente exclusivo, este campo no es clave<br />principal o un campo de incremento automático, por lo tanto nada impide que cree el<br />registro duplicado. Sin embargo, no queremos que eso ocurra. Lo que desearíamos es<br />leer el valor actual e insertar un nuevo valor, incrementando en una unidad. Pero esta<br />acción no garantiza un valor único.<br />La forma de evitar resultados erróneos es realizando un bloqueo de actualización<br />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.<br />Bloqueos de lectura en modo compartido<br />Existe otro tipo de bloqueo de lectura que no devuelve un valor si el valor que está<br />leyendo ha sido modificado por una transacción incompleta. Devuelve el último<br />valor, pero no forma parte de una transacción cuya intención es modificar el valor.<br />Transacciones en tablas BDB<br />Las tablas BDB procesan las transacciones de forma ligeramente diferente a las<br />tablas Innodb. Si una persona está realizando una transacción sobre una tabla x, si<br />esta transacción no está completa, ninguna persona podrá consultar los datos de esta<br />tabla mientras la transacción no finalice.<br />El periodo de tiempo que puede significar al llevar a cabo esta consulta es<br />demasiado. El hecho de que no se trate de una consulta de selección “rápida” en las<br />tablas BDB significa que todas las transacciones que se pospongan pueden dar lugar<br />a graves problemas de rendimiento.<br />Como en el caso de las tablas innoble, el modo predeterminado de AUTOCOMMIT =<br />1. Esto significa que a menos que coloque sus cambios dentro de una transacción<br />(comenzando con BEGIN), se completarán inmediatamente.<br />Otros comportamientos transaccionales<br />Existe una serie de comandos adicionales que finalizan automáticamente una<br />transacción (en otras palabras, que se comportan como si hubiéramos realizado una<br />operación de confirmación):<br />• BEGIN<br />• ALTER TABLE<br />• CREATE INDEX<br />• RENAME TABLE<br />• TRUNCATE<br />• DROP TABLE<br />• DROP DATABASE<br />• LOCK TABLES<br />Bloqueo de tablas<br />Mysql maneja bloqueo a nivel de fila como lo revisamos anteriormente en el análisis<br />de las tablas innoble y BDB. Los bloqueos a nivel de fila son mucho más eficaces<br />cuando se necesita realizar una gran cantidad de inserciones o actualizaciones en la<br />tabla. El bloqueo a nivel de fila, sin embargo, solo está disponible para los tipos de<br />tabla de transacción segura (BDB e Innodb). Mysql incorpora la función de bloqueo<br />a nivel de tablas, que está disponible para todos los tipos de tabla.<br />Existen dos tipos de bloqueos de tabla: los bloqueos de lectura y los bloqueos de<br />escritura. Los bloqueos de lectura solo permiten realizar lecturas sobre la tabla,<br />quedando bloqueadas las operaciones de escritura. Los bloqueos de escritura impiden<br />la realización de operaciones de lectura o escritura sobre la tabla durante el bloqueo.<br />Cómo evitar los bloqueos de tabla<br />Se debe evitar los bloqueos sobre tablas que necesiten realizar un gran volumen de<br />actualizaciones, ya que, en el caso de los bloqueos de escritura, no se puede leer o<br />escribir ningún registro de la tabla durante el bloqueo.<br />Además, como los bloqueos de escritura tienen prioridad sobre los de lectura de<br />manera predeterminada, no se puede leer ningún registro hasta que todas las<br />operaciones de actualización e inserción se completen, lo que puede provocar que<br />Mysql se atasque de forma terrible. Existen varias formas de evitar los bloqueos de<br />tabla. Una de ellas consiste en realizar la operación de lectura y actualización dentro<br />de la misma instrucción (es lo que se conoce como actualización incremental).<br />Niveles de transacción<br />Se puede modificar el comportamiento predeterminado al trabajar con transacciones<br />mediante el establecimiento del nivel de transacción. Existen varios niveles de<br />transacción en Mysql. En concreto admite los siguientes niveles de aislamiento de<br />transacción.<br />READ UNCOMMITTED<br />Este nivel permite transacciones para leer datos sin confirmar desde otras<br />transacciones (es lo que se conoce como lectura sucia).<br />REPEATABLE READ<br />Este nivel no permite lecturas no susceptibles de repetición (que son las que se dan<br />cuando otra transacción ha modificado los datos, incluso si se han confirmado).<br />SERIALIZABLE<br />Este nivel no permite lecturas fantasma, que tienen lugar cuando otra transacción ha<br />confirmado una nueva fila que coincide con los resultados de nuestra consulta. Los<br />datos serán los mismos en cada ocasión.<br />Índices y optimización de consultas<br />Es posible agilitar la velocidad en las consultas mediante el uso de métodos básicos.<br />El uso inteligente de índices ayudará a que la consulta, la actualización sea más<br />rápida.<br />El ajuste correcto del servidor también contribuye a lograr mejoras notables.<br />Compresión de los índices<br />Al realizar una consulta sobre una tabla X de la base de datos, los registros son<br />recuperados mediante un barrido completo de la tabla si la misma no utiliza índices,<br />el problema es notorio cuando queremos buscar información con cierto criterio de<br />búsqueda, haciendo que la consulta se demore demasiado.<br />La operación de recorrer la tabla de esta forma (de principio a fin, examinando todos<br />los registros) se conoce como examen completo de la tabla. Cuando las tablas son de<br />gran tamaño, esta operación resulta poco eficiente ya que la labor de examinar tablas<br />compuestas de varios cientos de miles de registros puede resultar muy lenta. Para<br />evitar este problema, se debe ordenar los registros. Sin embargo, puede ocurrir que<br />deseemos buscar registros de la tabla utilizando otro criterio de búsqueda. La<br />solución es crear listas separadas para cada campo que se desee ordenar, a este<br />ordenamiento se le conoce como índice.<br />En Mysql existen cuatro tipos de índice: clave primaria, un índice exclusivo, un<br />índice de texto completo, y un índice ordinario.<br />Clave primaria<br />Una clave primaria es un índice establecido sobre un campo en el que cada valor es<br />exclusivo y ninguno de los valores puede ser nulo.<br />Para establecer una clave primaria al crear la tabla, se debe utilizar la instrucción<br />PRIMARY KEY al final de las definiciones del campo, es importante la palabra<br />clave NOT NULL, es además obligatoria al crear un campo primario, esto indica a la<br />base de datos que no se admiten valores nulos ni valores duplicados ya que la clave<br />primaria es única.<br />Índice exclusivo<br />Los índices que no son primarios, permiten valores duplicados (a menos que los<br />campos se especifiquen como únicos). Un índice exclusivo permite realizar<br />búsquedas por un solo registro de la tabla que no necesariamente es único pero que la<br />gran cantidad de registros almacenados amerita la creación de este índice.<br />Índice de texto completo<br />Se puede crear este tipo de índice sobre cualquier campo Char, Varchar o Text. Los<br />Índices de texto completo están diseñados para facilitar la búsqueda sobre palabras<br />clave en capos de texto de tablas grandes.<br />Para devolver los resultados de una búsqueda de texto completo, se utiliza la función<br />MATCH(), y se busca la correspondencia de un campo con un valor.<br />Índice ordinario<br />Un índice ordinario es aquel que por necesidad del programador o de la consulta es<br />necesario la creación del índice, este puede ser de uno o varios registros. Hay que<br />tener cuidado en la creación de este tipo de índices, ya que pueden degradar el<br />correcto funcionamiento de la base de datos, no se puede crear porque sí, es<br />necesario examinar detenidamente si es óptimo o no.<br />Tipos de Tabla e índices<br />Cada tipo de tabla tiene su propio comportamiento en materia de índices y cada una<br />de ellas lo procesa de manera diferente. No todos los tipos de índices están<br />disponibles para los distintos tipos de tabla. Es importante tener claro como se va a<br />utilizar una tabla y los índices que se van a necesitar ante de seleccionar el tipo de<br />tabla. En ocasiones, lo que parece ser el tipo de tabla perfecta se convierte en la peor<br />elección porque o se puede utilizar un determinado tipo de índice en ella.<br />A continuación se enlista las funciones y las diferencias de índices para cada tipo de<br />tabla. Las tablas MyISAM presentan las siguientes características:<br />• Los índices se almacenan con la extensión .MYI<br />• Los índices de número se almacenan con el byte alto primero par permitir una<br />mejor compresión del índice.<br />• Se puede utilizar índices BLOB y TEXT.<br />• Se permiten valores nulos en los índices.<br />• Los datos y el índice se pueden incluir en directorios diferentes ( lo que<br />permite una mayor velocidad).<br />Las tablas MERGE presentan las siguientes características:<br />• Las tablas MERGE no contienen índices propios.<br />• El archivo .MRG contiene una lista de los archivos .MYI de índice<br />procedentes de las tablas MyISAM integrantes.<br />• Sigue siendo necesario especificar los índices al crear la tabla MERGE.<br />Las tablas HEAP presentan las siguientes características:<br />• Utilizan un índice de asignación almacenado en memoria, que resulta muy<br />rápido.<br />• Solo puede utilizar índices con los operadores = y <=>.<br />• No puede usar un índice en una columna que permita valores nulos.<br />• Los índices no se pueden utilizar con la cláusula ORDER BY.<br />• Mysql no puede determinar el número aproximado de filas que existen entre<br />los dos valores (este resultado es utilizado por el optimizador de consultas<br />para seleccionar el índice más eficaz que utilizar).<br />Las tablas ISAM utilizan un índice B-TREE almacenado en archivos con la<br />extensión .ism.<br />Las tablas InnoDB no pueden utilizar índices de texto completo.<br />Uso eficaz de los índices<br />Las tablas con pocos índices devolverán los resultados muy rápido. Pero la inclusión<br />de demasiados índices, aunque no suele ser normal, también ocasiona degradación de<br />la base de datos. Los índices ocupan espacio de disco y, como están ordenados, cada<br />vez que se realice una operación de inserción o de actualización, es necesario volver<br />a organizar el índice para incluir los cambios, lo que da como resultado una carga de<br />trabajo adicional significativa. La eficiencia en el uso de los índices depende también<br />de la configuración de Mysql.<br />Dónde utilizar los índices<br />El uso más común de un índice consiste en recuperar filas que cumplan una<br />condición incluida en la cláusula WHERE.<br />Es muy importante crear el índice correcto, sobre el campo correcto, revisando<br />siempre que forme parte de la condición.<br />Al buscar valores máximos o mínimos, Mysql, sólo necesita tomar el primer valor o<br />el último de una tabla ordenada con un índice, lo que resulta extremadamente rápido.<br />Si se solicita con frecuencia valores máximos o mínimos, resulta muy útil crear un<br />índice sobre el campo pertinente.<br />Sistema de prefijación más a la izquierda<br />Comenzando por la parte izquierda de la lista de campos del índice, Mysql puede<br />utilizar cada uno de ellos, uno tras otro, siempre y cuando sigan la secuencia<br />empezando por la izquierda<br />Optimización de Selecciones<br />Mientras mayor sea el número de tablas que se combinan, mayor será la cantidad de<br />filas examinadas. Parte del buen diseño de las bases de datos consiste en hallar un<br />equilibrio entre las tablas pequeñas de las bases de datos que necesitan más<br />combinaciones y las tablas de mayor tamaño que resultan más difíciles de mantener.<br />Lo principal para que una consulta sea óptima es la selección correcta del índice y la<br />cláusula WHERE correctamente definida, tomando en cuenta la prefijación más a la<br />izquierda.<br />En Mysql un detalle importante es el comando EXPLAIN, que ayuda al programador<br />a conocer en detalle que índice se está utilizando, cuantos registros revisó para sacar<br />la consulta, como es procesada la instrucción SELECT, esta instrucción es de gran<br />ayuda para escribir consultas optimas y seleccionar el índice adecuado a la consulta.<br />Cuando más complejos sean los permisos, mayor será la carga de trabajo que<br />experimentan las consultas.<br />Optimización de actualizaciones, eliminaciones e inserciones<br />Una operación de actualización es prácticamente igual a una operación de selección<br />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.<br />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.<br />Oracle es un sistema de administración de base de datos (o RDBMS Relational Data<br />Base Management System por las siglas en inglés), fabricado por Oracle corporation,<br />básicamente una herramienta cliente/servidor para la gestión de Bases de Datos. Es<br />un producto vendido a nivel mundial, aunque la gran potencia que tiene y su elevado<br />precio hace que sólo se vea en empresas muy grandes y multinacionales, por norma<br />general. En el desarrollo de páginas web pasa lo mismo: como es un sistema muy<br />caro no está tan extendido como otras bases de datos, por ejemplo, Access, Mysql,<br />Sql Server, etc.<br />Para desarrollar en Oracle utilizamos PL/SQL un lenguaje de 5ª generación, bastante<br />potente para tratar y gestionar la base de datos, también por norma general se suele<br />utilizar SQL.<br />Oracle es sin duda una de las mejores bases de datos que tenemos en el mercado, es<br />un sistema gestor de base de datos robusto, tiene muchas características que nos<br />garantizan la seguridad e integridad de los datos; que las transacciones se ejecuten de<br />forma correcta, sin causar inconsistencias; ayuda a administrar y almacenar grandes<br />volúmenes de datos; estabilidad, escalabilidad y es multiplataforma.<br />Por cada instancia de Oracle se tiene una sola base de datos.<br />En un servidor se pueden crear varias instancias, pero no es recomendable ya que<br />cada instancia consume muchos recursos.<br />Una instancia de Oracle está conformada por varios procesos de fondo y espacios de<br />memoria compartida denominada System Global Area (SGA) que son necesarios<br />para acceder a la información contenida en la base de datos.<br />La instancia está conformada por procesos del usuario, procesos que se ejecutan en el<br />background de Oracle y los espacios de memoria que comparten estos procesos.<br />El SGA es utilizado para el intercambio de datos entre el servidor y los clientes.<br />Una instancia de Oracle solo puede abrir una sola base de datos a la vez.<br />Conexión a la instancia Oracle<br />De la relación de servicios creados durante la instalación de Oracle, por ahora nos<br />interesa básicamente dos.<br />• El servicio relacionado con la instancia y la base de datos, cuyo nombre tiene<br />la siguiente estructura: OracleServiceXXX, donde XXX representa el nombre<br />de la instancia.<br />• El servicio relacionado con la disponibilidad de servidor para el acceso<br />remoto, el nombre del servicio es: OracleOraHome92TNSListener.<br />Proceso Usuario. Programa, aplicación ó herramienta que usa el usuario para<br />iniciar un proceso de usuario y establecer una conexión.<br />Proceso Servidor. Una vez que el proceso del usuario estable ce conexión,<br />un proceso servidor es iniciado, el cual manejará las peticiones del usuario.<br />Un proceso servidor puede ser dedicado, es decir solo atiende las peticiones<br />de un solo proceso usuario, ó puede ser compartido, con lo cual puede atender<br />USUARIO DE LA<br />BASE DE DATOS<br />Proceso<br />Usuario<br />Proceso<br />Servidor<br />SERVIDOR ORACLE<br />Conexión Establecida<br />Sesión Creada<br />• Sesión. Una sesión es una conexión específica de un usuario a un servidor<br />Oracle. Se inicia cuando el usuario es validado por el servidor Oracle.<br />Finaliza cuando el usuario termina la sesión en forma normal (logout) ó<br />aborta la sesión.<br />Oracle tiene su herramienta de red que permite a las aplicaciones en general<br />conectarse a servidores Oracle. Para que una aplicación pueda conectarse a un<br />servidor Oracle, es necesario que el Proceso Escucha se encuentre ejecutándose en el<br />servidor (OracleOraHome92TNSListener).<br />El esquema de conexión remota se puede apreciar en el gráfico # 8.<br />El proceso se describe a continuación:<br />1. El cliente establece una conexión al proceso Escucha usando el protocolo<br />configurado y envía un paquete CONNECT.<br />2. El proceso Escucha comprueba que el SID esté definido. Si es así, genera un<br />nuevo proceso para ocuparse de la conexión. Una conexión, se establece en el<br />proceso Escucha y el nuevo proceso del servidor para pasarle la información<br />del proceso de inicialización. Luego la conexión es cerrada.<br />El proceso del servidor envía un paquete al cliente.<br />4. Un nuevo paquete CONNECT es enviado al proceso servidor dedicado.<br />5. El proceso del servidor dedicado acepta la conexión entrante y remite un<br />mensaje de ACEPTADO al nuevo cliente.<br />Transacciones y bloqueos<br />Transacciones<br />Se denomina transacción al espacio de tiempo que transcurre desde la primera<br />sentencia DML que no sea SELECT (INSERT, UPDATE O DELETE) hasta que<br />damos por finalizada la transacción explícitamente (con las sentencias apropiadas) o<br />implícitamente (finalizando la sesión). Una base de datos está en estado consistente<br />si, obedece todas las restricciones de integridad definidas sobre ella. Durante la<br />transacción, todas las modificaciones realizadas sobre la base de datos, no son<br />definitivas, más concretamente, se realizan en un TABLESPACE especial que se<br />denomina ROOLLBACK o RBS (Roolback segment). Este tablespace, tiene<br />reservado un espacio para cada sesión activa en el servidor, y es en este espacio<br />donde, se almacenan cada una de las modificaciones de la transacción. Una vez que<br />la transacción se ha finalizado, las modificaciones temporales almacenadas en el<br />RBS, se vuelcan al tablespace original, donde está almacenada nuestra tabla. <br />Esto permite que ciertas modificaciones que se realizan en varias sentencias, se puedan<br />validar todas a la vez, o rechazar todas a la vez. Es importante asegurar siempre que<br />la base de datos nunca este en un estado de inconsistencia. Sin embargo, durante la<br />ejecución de una transacción, la base de datos puede estar temporalmente en un<br />estado inconsistente. El punto importante aquí, es que la base de datos regrese al<br />estado consistente al final de la transacción.<br />Se pueden diferenciar dos clases de cloqueos:<br />• Un bloqueo de lectura que da acceso de solo lectura a un objeto y evita que<br />cualquier otra transacción actualice el objeto, esta clase de bloqueo se llama a<br />menudo, de lectura compartida puesto que varias transacciones pueden tener<br />este tipo de bloqueo al mismo tiempo.<br />• Un bloqueo de escritura que otorga un acceso exclusivo de lectura-escritura y<br />previene a la fuerza, que otras transacciones lean o escriban sobre el mismo<br />objeto.<br />Es importante notar que no es necesario bloquear un registro de la base de datos<br />durante la duración de la transacción ya que esto incrementaría la posibilidad de que<br />ocurra un bloqueo mutuo (dead lock), por esta razón, el bloqueo se lo podría hacer<br />solamente durante el acceso real al objeto.<br />Para resolver el conflicto creado por bloqueo mutuo, lo más usual es deshacer alguna<br />de las transacciones. En Oracle se escoge aquella que tenga la menor cantidad de<br />trabajo realizado.<br />Características relacionales orientadas a objetos<br />Oracle tiene soporte extensivo para constructores relacionales orientados a objetos,<br />incluyendo:<br />• Tipos de objetos. Se soporta un único modelo de herencia para las jerarquías<br />de tipos.<br />• Tipos de colecciones. Oracle soporta varrays, que son arrays de longitud<br />variable, y tablas anidadas.<br />• Tablas de objetos. Se utilizan para almacenar objetos mientras se<br />proporciona una vista relacional de los atributos de los objetos.<br />• Funciones de tablas. Son funciones que producen conjuntos de filas como<br />salida y se pueden utilizar en la cláusula From de una consulta.<br />• Vistas de objetos. Proporcionan una vista de tablas de objetos virtuales de<br />datos almacenados en una tabla relacional normal. Permite acceder a ver los<br />datos en un estilo orientado a objetos incluso si los datos están realmente<br />almacenados en un formato relacional tradicional.<br />• Métodos. Se pueden escribir en PL/SQL, Java o C.<br />• Tipos de datos XML. Se pueden utilizar para almacenar e indexar<br />documentos XML.<br />Oracle tiene dos lenguajes procedimentales principales, PL/SQL y Java. PL/SQL fue<br />el lenguaje original de Oracle para los procedimientos almacenados y tiene una<br />sintaxis similar al utilizado en el lenguaje Ada. Java se soporta mediante una<br />máquina virtual Java dentro del motor de base de datos. Oracle proporciona un<br />paquete para encapsular procedimientos, funciones y variables relacionadas en<br />unidades únicas.<br />Disparadores<br />Oracle proporciona varios tipos de disparadores y varias opciones para el momento y<br />forma en que se invocan. Los disparadores se pueden escribir en PL/SQL o java o<br />como llamadas a C.<br />Para los disparadores que se ejecutan sobre instrucciones DML tales como insert,<br />update o delete, Oracle soporta disparadores de filas (row) y disparadores de<br />instrucciones (statement). Lo disparadores de filas se pueden ejecutar una vez por<br />cada fila que se vea afectada (actualización o borrado, por ejemplo) por la operación<br />DML. Un disparados de instrucciones, se ejecuta solamente una vez por instrucción.<br />En cada caso, el disparador se puede definir tanto como un disparador “before” o<br />“alter” dependiendo de si se va a invocar antes o después de que se lleva a cabo la<br />operación DML.<br />Oracle también tiene disparadores que ejecutan otros eventos, tales como el inicio o<br />finalización de la base de datos, mensajes de error del servidor, inicio o finalización<br />de sesión de un usuario e instrucciones DDL tales como instrucciones create, alter o<br />drop.<br />Almacenamiento e indexación<br />TableSpace (Espacio de tablas)<br />La base de datos Oracle se divide en unidades lógicas denominadas<br />TABLESPACES. Cada TABLESPACE, consiste en una o más estructuras físicas<br />denominadas DATAFILES.<br />Un TableSpace no es un fichero físico en disco, simplemente es el nombre que tiene<br />un conjunto de propiedades de almacenamiento que se aplican a los objetos (tablas,<br />secuencias…) que se crean en la base de datos bajo el tablespace indicado.<br />Segment (Segmento, trozo, sección)<br />El espacio en un espacio de tablas se divide en unidades denominadas segmentos,<br />cada una de las cuales contiene los datos para una estructura de datos específica.<br />Hay cuatro tipos de segmentos:<br />• Segmento de datos.- cada tabla en un espacio de tablas tiene su propio<br />segmento de datos donde se almacenan los datos de la tabla a menos que ésta<br />se encuentre dividida; si esto ocurre, existe un segmento de datos por división<br />( regularmente esta división se da por partición de las tablas).<br />• Segmento de índices.- cada índice en un espacio de tablas posee su propio<br />segmento de índices, excepto los índices divididos, los cuales mantienen un<br />segmento de índice por división.<br />• Segmentos temporales.- son segmentos utilizados cuando una operación de<br />ordenación necesita escribir datos al disco o cuando éstos se insertan en una<br />taba temporal.<br />• Segmento de retroceso.- se trata de segmentos que contienen información<br />para deshacer los cambios de las transacciones de forma de que pueda<br />deshacer una copia no terminada. También juegan un papel muy importante<br />en el modelo de control de concurrencia en Oracle y para la recuperación de<br />la base de datos.<br />Sistemas operativos que soporta<br />Peso Mysql pesoOracle Peso Windows10Si10Si10Linux10Si10Si10Mac OS x10Si10Si10Free BSD10Si100IBM AIX10Si10Si10Solaris10Si10Si10HP UUX10Si10Si10QNX10Si10Si10SCO Unix10Si10Si10Novell Netware10Si10Si10SGI Irix10Si10Si10110110100<br />Mysql ofrece los conectores indicados en la tabla que pueden ser usados para<br />desarrollar aplicaciones utilizando mysql como base de datos. Cuando una aplicación<br />es desarrollada con Php, Java, .net, perl, ODBC, Mysql dispone de un driver que se<br />encarga de realizar este trabajo.<br />Oracle maneja PL/SQL que es un lenguaje de programación propio de Oracle, la<br />base de datos incluye un compilador Java y JVM con la ingeniería de la base de<br />datos. Esto permite a los desarrolladores escribir procedimientos almacenados,<br />triggers y funciones en el estándar de programación Java incluido en lenguaje Pl/sql.<br />Los desarrolladores compilan los programas Java directamente en la base de datos o<br />leer una clase java utilizando la utilidad de Oracle llamada LoadJava. Mysql no<br />permite almacenar o ejecutar programas java en la base de datos.<br />Mysql ofrece los conectores indicados en la tabla que pueden ser usados para<br />desarrollar aplicaciones utilizando mysql como base de datos. Cuando una aplicación<br />es desarrollada con Php, Java, .net, perl, ODBC, Mysql dispone de un driver que se<br />encarga de realizar este trabajo.<br />Oracle maneja PL/SQL que es un lenguaje de programación propio de Oracle, la<br />base de datos incluye un compilador Java y JVM con la ingeniería de la base de<br />datos. Esto permite a los desarrolladores escribir procedimientos almacenados,<br />triggers y funciones en el estándar de programación Java incluido en lenguaje Pl/sql.<br />Los desarrolladores compilan los programas Java directamente en la base de datos o<br />leer una clase java utilizando la utilidad de Oracle llamada LoadJava. Mysql no<br />permite almacenar o ejecutar programas java en la base de datos.<br />El motor de base de datos Mysql es mucho más rápido que Oracle en el procesamiento de transacciones, esta es otra característica válida que en ambientes críticos de producción toma gran importancia el tiempo de respuesta de la base de datos en lo que satisfacción del cliente se refiere y en ambientes grandes de información como dataware house para la toma de decisiones.<br />Con referencia a la prueba que se efectuó acerca de Oracle, se ha hecho una prueba relativamente sencilla entre MySQL (en InnoDB) y Oracle 11g (Enterprise Edition) con similares H / W de configuración, pero con un sencillo esquema de la base que consta de sólo unas pocas tablas y ningún índice alternativo adicional. El programa de prueba se ejecuta (en múltiples hilos) para insertar y actualizar registros en la base de datos de forma continua hasta un total de 100M registros fueron creados y luego el tiempo total registrado en milisegundos. Como resultado, encontramos que Oracle fue capaz de entregar un rendimiento de inserción 86K / s, mientras que MySQL fue la entrega de inserción 28K / s (que es sólo 1 / 3 de la figura de Oracle), ambos con el mismo H / W y configuraciones de almacenamiento SAN.<br />Oracle ofrece la partición de tablas y compresión de datos. Estas características solo puede ser suficiente para justificar la diferencia de costes entre Oracle y MySQL, ya que pueden hacer grandes diferencias, tanto en rendimiento de las consultas y el tamaño total de DB. Y, Oracle ofrece RAC y Data Guard para apoyar los objetivos de HA.<br />Oracle Database 11g Standard Edition One y HP ProLiant proporcionaron el más alto rendimiento por procesador de cualquier resultado TPC-C que haya sido publicadaRedwood Shores, CA - 30 de marzo 2009.<br />Oracle anunció un nuevo récord mundial de referencia TPC-C para un sistema de dos sockets con Oracle ® Database 11g Standard Edition One que se ejecuta en Oracle Enterprise Linux, (1) demostrando un rendimiento superior de clase empresarial, escalabilidad y flexibilidad de la base de datos Oracle para los clientes de todos los tamaños.<br />Logro de 631,766 transacciones por minuto con una relación precio / rendimiento de $ 1.08/tpmC, Oracle Database 11g Standard Edition One ejecutando Oracle Enterprise Linux en un servidor HP ProLiant DL370 G6 equipado con dos procesadores Intel ® Xeon ® X5570 de cuatro núcleos procesadores de 2,93 GHz, entregó el más rápido resultado de un sistema de dos sockets, así como el más alto de transacciones por minuto-por-procesador de cualquier resultado TPC-C que haya sido publicada. El subsistema de almacenamiento consiste en HP StorageWorks MSA2324fc y recintos MSA70.<br />Escuchar<br />Leer fonéticamente<br /> <br />Diccionario - Ver diccionario detallado<br />nombre <br />do<br />abreviatura <br />siglo<br />MySQL es relativamente ligero, puede ser muy rápida cuando la influencia de la arquitectura de aplicaciones. Porciones de características gratis como los servidores de bases de datos crecen como la replicación y la partición.Oracle ofrece muchas características y funcionalidades de la solución de problemas complejos. Soporta grandes entornos OLTP, así como VLDBs.<br />Aquí están algunas de las comparaciones función desde una perspectiva de DBA:<br />Características y FuncionalidadesMySQLOracleStrengthsPrice/Performance Great performance when applications leverage architecture.Aircraft carrier database capable of running large OLTP and VLDBs. Database ProductsEnterprise ($) – supported, more stable.Community (free) – more leading edge.Enterprise ($$$$)Standard ($$)Standard One  ($)Express (free) – up to 4GBApplication PerspectiveWeb applications often don’t leverage database server functionality. Web apps more concerned with fast reads.More you do in the database the more you will love Oracle with compiled PL/SQL, XML, APEX, Java, etc.AdministrationCan be trivial to get it setup and running.  Large and advanced configurations can get complex.Requires lots of in-depth knowledge and skill to manage large environments.  Can get extremely complex but also very powerful.PopularityExtremely popular with web companies, startups, small/medium businesses, small/medium projects.Extremely popular in Fortune 100, medium/large enterprise business applications and medium/large data warehouses.Application Domains(most popular)Web (MySQL excels)Data WarehouseGamingSmall/medium OLTP environmentsMedium/Large OLTP and enterprise applications.  Oracle excels in large business applications (EBS, Siebel, PeopleSoft, JD Edwards, Retek, ...)Medium/Large data warehouseDevelopment Environments(most common)1) PHP2) Java3) Ruby on Rails4) .NET5) Perl1) Java2) .NET3) APEX4) Ruby on Rails5) PHPNote: Oracle focusing on Java for next generation business applications. Database Server(Instance)Database Instance stores global memory in mysqld background process. User sessions are managed through threads.Database instance has numerous background processes dependent on configuration.  System Global Area is shared memory for SMON, PMON, DBWR, LGWR, ARCH, RECO, etc. Sessions are managed through server processes.Database Server(Physical Storage)Made up of database schemas. Each storage engine stores information differently.Common storage engines:MYISAM – stores data in .FRM, .MYD and .MYI files.InnoDB – stores data in a common tablespace or individual tablespaces per table. Binary logs are used for point-in-time recoveryUses tablespaces for system metadata, user data and indexes.  Common tablespaces include:SYSTEMSYSAUXUSER DATAUSER INDEXESTEMPORARYUNDORedo and archive log files are used for point in time recovery.TablesTables use storage engines.  Each storage engine provides different characteristics and behavior.A few tables with tons of features.PartitioningFree, basic features$$$ with lots of optionsReplicationFree, relatively easy to setup and manage.  Basic features but works great.  Great horizontal scalability.$$$, lots of features and options.  Much higher complexity with a lot of features.  Allows a lot of data filtering and manipulation.TransactionsInnoDB and upcoming Falcon and Maria storage enginesRegular and Index only tables support transactions.Backup/RecoveryNo online backup built-in.ReplicationOS SnapshotsInnoDB Hot BackupRecovery Manager (RMAN) supports hot backups and runs as a separate central repository for multiple Oracle database servers.Export/ImportEasy, very basic.More features.Data Dictionary (catalog)Information_schema and mysql database schemas offer basic metadata.Data dictionary offers lots of detailed information for tuning.  Oracle starting to charge for use of new metadata structures.Management/Monitoring$, MySQL Enterprise Monitor offers basic functionality.Additional open source solutions.May also use admin scripts.$$$$, Grid Control  offers lots of functionality.Lots of 3rd party options such as BMC, Quest, Embarcadero and CA.StorageEach storage engine uses different storage. Varies from individual files to tablespaces.Tables managed in tablespaces.  ASM offers striping and mirroring using cheap fast disks.Stored ProceduresVery basic features, runs interpreted in session threads.  Limited scalability.Advanced features, runs interpreted or compiled.  Lots of built in packages add significant functionality.  Extremely scalable.<br />Seguridad de base de datos de 2.1 <br />Esta sección incluye información acerca de los problemas de seguridad con bases de datos MySQL y bases de datos Oracle. <br />Al igual que con Oracle, los usuarios son mantenidos por la base de datos. MySQL utiliza un conjunto de tablas de permisos para realizar un seguimiento de los usuarios y los privilegios que puedan tener. MySQL utiliza estas tablas de permisos cuando realizar autenticación, autorización y control de acceso para los usuarios. <br />2.1.1 Base de datos de autenticación <br />A diferencia de Oracle (cuando configura para utilizar la autenticación de la base de datos) y la mayoría otras bases de datos que utilizan sólo el nombre de usuario y la contraseña para autenticar a un usuario, MySQL utiliza un parámetro adicional location para autenticar un usuario. Este parámetro de location suele ser el nombre de host, dirección IP o un carácter comodín (Ò Ó %). Con este parámetro adicional, MySQL puede restringir aún más el acceso de un usuario a la base de datos a un host en particular o hosts de un dominio. Además, esto también permite una contraseña diferente y un conjunto de privilegios que se aplique para un usuario dependiendo del host desde el que se establece la conexión. Por lo tanto, usuario scott, que inicia una sesión de abc.com puede o no es lo mismo como usuario scott que inicia una sesión de xyz.com. <br />2.1.2 Privilegios <br />El sistema de privilegios de MySQL es un sistema jerárquico que trabaja a través de la herencia. Privilegios otorgados a un nivel superior pasan implícitamente a todos los niveles inferiores y pueden ser anulados por los mismos privilegios que se establecen en los niveles más bajos. MySQL permite privilegios a concederse en cinco niveles diferentes, en orden decreciente del alcance de los privilegios: <br />Global <br />Base de la cantidad de hosts <br />Nivel de la base de datos <br />Específica de la tabla <br />Columna específica (única columna en una sola tabla <br />Cada nivel tiene una tabla de concesión correspondiente en la base de datos. Cuando se realiza una comprobación de privilegio, MySQL comprueba cada una de las tablas en orden descendente del alcance de los privilegios y los privilegios otorgados a un nivel inferior tienen precedencia sobre los mismos privilegios concedidos a un nivel superior. <br />Los privilegios apoyados por MySQL se agrupan en dos tipos: privilegios administrativos y los privilegios de cada objeto. Los privilegios administrativos son privilegios globales que tienen efectos en todo el servidor y están interesados en el funcionamiento de MySQL. Estos privilegios administrativos incluyen el FILE, PROCESS, REPLICATION, paro y privilegio SUPER. Los privilegios por objeto afectar a objetos de base de datos de estas tablas, columnas, índices y procedimientos almacenados y puedan concederse con un ámbito diferente. Estos por objeto privilegios se nombran después de las consultas SQL que desencadenan sus cheques. <br />A diferencia de en Oracle, no hay concepto de papel en MySQL. Así, con el fin de conceder el mismo conjunto de privilegios de un grupo de usuarios, tienen los privilegios que se conceda a cada usuario por separado. Alternativamente, aunque menos satisfactorias para la auditoría, los usuarios que realizan tareas como un papel todos puede compartir una sola cuenta de usuario que está designada para el " papel" y con los privilegios necesarios concedidos. <br />Migración de esquema de 2.2 <br />El esquema contiene las definiciones de las tablas, vistas, índices, los usuarios, restricciones, procedimientos almacenados, desencadenadores y otros objetos de base de datos específica. La mayoría de las bases de datos relacionales trabajan con objetos similares. <br />Esta sección contiene los siguientes elementos: <br />Similitudes de objetos de esquema <br />Nombres de objetos de esquema <br />Consideraciones acerca del diseño de tabla <br />Migración de bases de datos de múltiples <br />Consideraciones acerca de la migración de esquema para MySQL <br />2.2.1 Similitudes de objetos de esquema <br />Hay muchas similitudes entre objetos de esquema en Oracle y MySQL. Sin embargo, algunos objetos de esquema difieren entre estas bases de datos. Para obtener más información acerca de objetos de esquema, vea Referencia de SQL de Oracle. <br />La tabla 2-1 muestra las diferencias entre Oracle y MySQL. <br />Objetos de esquema de la tabla 2-1 en Oracle y MySQL <br />OracleMySQLAFTER triggertriggerBEFORE triggertriggerCheck constraintCheck constraintColumn defaultColumn defaultDatabaseDatabaseForeign keyForeign keyIndexIndexPackageN/APL/SQL functionRoutinePL/SQL procedureRoutinePrimary keyPrimary keyRoleN/ASchemaSchemaSequenceAUTO_INCREMENT for a columnSnapshotN/ASynonymN/ATableTableTablespaceN/ATemporary tableTemporary tableTrigger for each rowTrigger for each rowUnique keyUnique keyUserUserViewView<br />Nombres de objetos de esquema de 2.2.2 <br />Oracle usa mayúsculas y minúsculas para los nombres de objeto, y nombres de objeto de esquema de Oracle se almacenan como mayúsculas. <br />Como en Oracle, la columna, el índice, el procedimiento almacenado y el desencadenador nombres, así como alias de columna en MySQL son mayúsculas y minúsculas en todas las plataformas. Sin embargo, las mayúsculas y minúsculas de nombres de tablas y bases de datos de MySQL difieren de Oracle. En MySQL, bases de datos corresponden a directorios dentro del directorio de datos y tablas corresponden a uno o más archivos en el directorio de base de datos. Como tal, las mayúsculas y minúsculas de los nombres de base de datos y la tabla está determinada por las mayúsculas y minúsculas de los sistemas operativos subyacentes. Esto significa que los nombres de base de datos y la tabla no distinguen mayúsculas de minúsculas en Windows y distinguen mayúsculas de minúsculas en la mayoría de las variedades de Unix. Sin embargo, MySQL permite a los usuarios determinar cómo los nombres de base de datos y la tabla se almacenan en disco y en su uso en MySQL a través de la variable de sistema lower_case_table_names. Alias de tabla distinguen mayúsculas de minúsculas en las versiones antes de MySQL 4.1.1. <br />Oracle y MySQL le permiten utilizar palabras reservadas como nombres de objeto que representa el nombre con un identificador entre comillas. Sin embargo, MySQL permite que algunas palabras reservadas como DATE y TIMESTAMP que se utiliza como identificador sin comillas en nombres de objeto, aunque esto no está permitido en Oracle. Programador SQL anexa un carácter de subrayado (_) al nombre de un objeto de MySQL que es una palabra reservada de Oracle. <br />MySQL y Oracle tienen algunas diferencias menores en su definición de un identificador. En MySQL, un identificador sin comillas puede comenzar con un dígito, y las comillas dobles se permite en un identificador entre comillas; Sin embargo, ninguno de estos se permite en un identificador de Oracle. En MySQL, el carácter de comillas es la tilde ('). Si el modo SQL se establece ANSI_QUOTES, comillas dobles también pueden utilizarse para citar los identificadores. En Oracle, identificadores se citan con comillas dobles. <br />Debe elegir un nombre de objeto de esquema que es único por caso y por al menos una otra característica y asegurarse de que el nombre del objeto no es una palabra reservada de cualquier base de datos. <br />2.2.3 Consideraciones acerca del diseño de tabla <br />Esta sección describe los problemas de diseño de tabla que debe considerar al convertir bases de datos de MySQL a Oracle. Esta sección incluye la following: <br />Tipos de datos de carácter <br />Valor predeterminado de la columna <br />Tipos de datos de carácter de 2.2.3.1 <br />MySQL y Oracle tienen algunas diferencias en los tipos de caracteres que apoyan y en la forma en la que almacenan y recuperar los valores de tipo de caracteres. <br />MySQL soporta el tipo CHAR y VARCHAR para tipo de personaje con una longitud que es menos de 65.535 bytes. El tipo CHAR puede tener una longitud máxima de 255 bytes, y como de MySQL 3.23 podrá también ser declarada con una longitud de 0 bytes. Antes de MySQL 5.0.3, la especificación de longitud de tipo VARCHAR es el mismo que el tipo CHAR. Desde MySQL 5.0.3, la longitud máxima de tipo VARCHAR es 65.535 bytes. Oracle admite cuatro tipos de caracteres: CHAR, NCHAR, NVARCHAR2 y VARCHAR2. La longitud mínima que puede declararse para todos los tipos de caracteres de Oracle es 1 byte. El tamaño máximo permitido para CHAR y NCHAR es 2.000 bytes, y para NVARCHAR2 y VARCHAR2 es 4.000 bytes. <br />Valores de MySQL CHAR añaden derecho con espacios a la longitud especificada cuando se almacenan y espacios finales se eliminan cuando se recuperan los valores. Por otra parte, VARCHAR almacena los valores usando tantos caracteres como se dan, pero antes de MySQL 5.0.3, los espacios finales se eliminan cuando los valores se almacenan y obtenidos. Oracle en blanco-almohadillas el valor para su CHAR y NCHAR escriba a la longitud de la columna si el valor es menor que la longitud de la columna, y los espacios no se eliminan en recuperación. Para columnas de tipo de datos NVARCHAR2 y VARVHAR2, Oracle almacena y recupera el valor exactamente como se da, incluidos los espacios finales. <br />Si se asigna un valor a una columna de tipo de personaje que supera su longitud especificada, MySQL trunca el valor y no genera un error a menos que se establezca el modo STRICT SQL. Oracle genera un error si el valor asignado a una columna de tipo de personaje supera su longitud especificada. <br />En MySQL, cada columna de tipo de caracteres (CHAR, VARCHAR y TEXT) tiene un conjunto de caracteres y una colación. Si el conjunto de caracteres o colación no es define explícitamente en la definición de columna, el conjunto de caracteres de la tabla o la intercalación implícita si especifica; de lo contrario, se elige el carácter de base de datos o la intercalación. En Oracle, el conjunto de caracteres de tipo CHAR y VARCHAR2 es definido por el conjunto de caracteres de base de datos, y para el conjunto de caracteres para NCHAR y NVARCHAR tipos se define el conjunto de caracteres nacional. <br />Cuando se declara un tipo CHAR o VARCHAR en MySQL, la semántica de longitud por defecto es de caracteres en lugar de bytes de MySQL 4.1 y posteriores. En Oracle, la semántica de longitud por defecto es bytes para los tipos CHAR y VARCHAR2 y caracteres para tipos NCHAR y NVARCHAR2. <br />Programador SQL asignará MySQL CHAR y VARCHAR tipos CHAR de Oracle y tipos de VARCHAR2, respectivamente. Programador SQL determinará el número máximo de bytes para el CHAR de Oracle y columnas de tipo de datos de VARCHAR2 desde el número de bytes necesarios para celebrar la longitud máxima especifican para el correspondiente MySQL CHAR y VARCHAR datos columnas de tipo. Si la columna de VARCHAR2 de MySQL es tal que los datos superan 4000 bytes, convertir la columna en una columna de tipo de datos de Oracle CLOB. <br />Valor predeterminado de 2.2.3.2 columna <br />MySQL difiere de Oracle en la forma en que maneja el valor por defecto para una columna que no permite el valor NULL. <br />En MySQL, por una columna que no permite el valor NULL, y para que no sea facilitado datos para la columna cuando se insertan datos en la tabla, el MySQL determina un valor predeterminado para la columna. Este valor predeterminado es el valor por defecto implícito para el tipo de datos de la columna. Sin embargo, si está habilitado el modo estricto, MySQL genera errores, y para tablas transaccionales deshace la instrucción insert. <br />En Oracle, cuando se insertan datos en una tabla, deben facilitarse datos para todas las columnas que no permiten el valor NULL. Oracle no genera un valor predeterminado para las columnas que tienen la coacción NOT NULL. <br />2.2.4 Migrar múltiples bases de datos <br />Programador SQL admite la migración de varias bases de datos de MySQL si se encuentran en el mismo servidor de base de datos de MySQL. <br />2.2.5 Esquema migraciones Consideraciones para MySQL <br />Consideraciones de migración de esquema para MySQL se aplican en las siguientes áreas" <br />Bases de datos <br />La asignación de privilegios de mundial y de nivel de base de datos de MySQL a privilegios de sistema de Oracle <br />Tablas temporales <br />Propietario de objetos de esquema <br />Bases de datos de 2.2.5.1 <br />Al migrar bases de datos de MySQL a Oracle, SQL Developer asigna cada base de datos MySQL a un espacio de tablas en Oracle. Objetos de base de datos, tales como tablas, índices y vistas se almacenan en las tablas respectivas y se hace referencia en el esquema de Oracle para el usuario que pertenecen. <br />2.2.5.2 Mapping MySQL Global y privilegios de nivel de base de datos con privilegios de sistema de Oracle <br />Programador SQL no procesa todos los privilegios administrativos sobre MySQL, excepto el privilegio SUPER. <br />Tabla 2-2 muestra las asignaciones para MySQL por objeto privilegios concedidos en los diferentes niveles, así como el SUPER privilegio otorgado a nivel mundial. <br />NivelPrivilegioSistema de privilegios en OracleGlobalALTERALTER ANY TABLE, ALTER ANY SEQUENCE, ALTER ANY CUSTER, COMMENT ANY TABLEGlobalALTER ROUTINEALTER ANY PROCEDURE, DROP ANY PROCEDUREGlobalCREATECREATE ANY TABLE, CREATE ANY SEQUENCE, CREATE ANY CLUSTER, CREATE DATABASE LINK, COMMENT ANY TABLEGlobalCREATE ROUTINECREATE ANY PROCEDUREGlobalCREATE USERCREATE USER, GRANT ANY PRIVILEGEGlobalCREATE VIEWCREATE ANY VIEWGlobalDELETEALTER ANY TABLE, DROP USER, DELETE ANY TABLEGlobalDROPDROP ANT TABLE, DROP ANY SEQUENCE, DROP ANY CLUSTER, DROP ANY VIEWGlobalEXECUTEEXECUTE ANY PROCEDUREGlobalINDEXCREATE ANY INDEX, ALTER ANY INDEX, DROP ANY INDEXGlobalINSERTINSERT ANY TABLEGlobalLOCK TABLESLOCK ANY TABLEGlobalSELECTSELECT ANY TABLEGlobalSUPERCREATE ANY TRIGGER, DROP ANY TRIGGERGlobalUPDATEUPDATE ANY TABLEGlobalUSAGECREATE SESSION, ALTER SESSION, UNLIMITED TABLESPACEDatabaseCREATECREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE TABLEDatabaseCREATE ROUTINECREATE PROCEDUREDatabaseCREATE VIEWCREATE VIEWTableCREATECREATE TABLETableCREATE VIEWCREATE VIEW<br />Tablas temporales de 2.2.5.3 <br />Programador SQL no es compatible con la migración de tablas temporales. En MySQL, tablas temporales son objetos de base de datos que son visibles sólo para la sesión actual del usuario y se quitan automáticamente cuando termina el período de sesiones de usuario. <br />La definición de tablas temporales en Oracle se difiere ligeramente de MySQL, en que las tablas temporales, una vez creadas, existan hasta que explícitamente se quitan y son visibles para todas las sesiones con los privilegios adecuados. Sin embargo, los datos de las tablas temporales sólo están visibles para el período de sesiones de usuario que inserta los datos en la tabla, y los datos pueden persistir durante la duración de una transacción o una sesión de usuario. <br />Propietario de 2.2.5.4 de objetos de esquema <br />Programador SQL crea un esquema de Oracle para el usuario root que posee, para que todas las bases de datos que se migran, todos los objetos de base de datos excepto los procedimientos almacenados. Para los procedimientos almacenados, los usuarios de MySQL que los creó siguen siendo el propietario. Programador SQL crea un esquema de Oracle para cada usuario de MySQL que se migra. <br />2.3 Tipos de datos <br />Esta sección describe los tipos de datos que se utiliza dentro de Oracle. Muestra los tipos de datos de MySQL y el equivalente de Oracle. Se incluye información acerca de lo siguiente: <br />Tipos de datos de Oracle admitidos <br />Asignaciones de tipo de datos predeterminado <br />Comparación de tipos de datos <br />2.3.1 Admite los tipos de datos de Oracle <br />Tabla 2-3 se describen los tipos de datos de Oracle compatibles con Oracle SQL Developer. Tabla 2-3 compatibles de tipos de datos de Oracle <br />Tipo de datos Descripción BLOB Un objeto binario grande. Tamaño máximo es de 4 gigabytes. CHAR (TAMAÑO) Datos de caracteres de longitud fija de bytes de tamaño de longitud. Tamaño máximo es de 2000 bytes. Tamaño predeterminado y el mínimo es de 1 byte. CLOB Un objeto de carácter grande que contiene caracteres de un byte. Anchura fija y variable-Anchura carácter conjuntos son compatibles, ambos utilizando el CHAR de bases de datos de conjunto de caracteres. Tamaño máximo es de 4 gigabytes. FECHA El tipo de datos DATE almacena información de fecha y hora. Aunque la información de fecha y hora puede representarse en CHAR y número de los tipos de datos, el tipo de datos DATE tiene especiales propiedades asociadas. Para cada valor de fecha, Oracle almacena la siguiente información: siglo, año, mes, día, hora, minuto y segundo. FLOAT Especifica un número de punto flotante con precisión decimal 38, o precisión binario 126. LARGO (TAMAÑO) Caracteres de datos de longitud variable hasta 2 gigabytes, o 2 ^ 31-de 1 bytes. DURANTE MUCHO TIEMPO SIN PROCESAR Sin procesar datos binarios de longitud variable hasta 2 gigabytes. NCHAR (TAMAÑO) Datos de caracteres de longitud fija de caracteres de tamaño de longitud o bytes, dependiendo de la elección del conjunto de caracteres nacional. Tamaño máximo se determina por el número de bytes necesarios para almacenar cada carácter, con un límite máximo de bytes de 2000. Tamaño predeterminado y el mínimo es 1 carácter o 1 byte, dependiendo del conjunto de caracteres. NCLOB Un objeto de grandes de caracteres que contiene caracteres multibyte. Anchura fija y variable-Anchura carácter conjuntos son compatibles, ambos utilizando la NCHAR de bases de datos de conjunto de caracteres. Tamaño máximo es de 4 gigabytes. Datos de conjunto de caracteres nacionales de tiendas. NÚMERO Número de tener s de p y escala de precisión. La p de precisión puede oscilar entre 1 a 38. La s de escala puede oscilar entre -84 y 127. NVARCHAR2 (TAMAÑO) Tener la longitud máxima de cadena de caracteres de longitud variable tamaño de caracteres o bytes, dependiendo de la elección del conjunto de caracteres nacional. Tamaño máximo se determina por el número de bytes necesarios para almacenar cada carácter, con un límite máximo de 4000 bytes. Debe especificar el tamaño de NVARCHAR2. RAW (TAMAÑO) Datos binarios sin formato de bytes de tamaño de longitud. Tamaño máximo es de 2000 bytes. Debe especificar el tamaño de un valor de RAW. VARCHAR (TAMAÑO) El tipo de datos VARCHAR es actualmente sinónimo con el tipo de datos de VARCHAR2. Oracle le recomienda que utilice VARCHAR2, en lugar de utilizar VARCHAR. En el futuro, VARCHAR puede definirse como un tipo de datos independiente utilizado para cadenas de caracteres de longitud variable en comparación con la semántica de la comparación diferentes. El tamaño máximo es de 4000 y el mínimo de 1 es el valor predeterminado. BINARY_DOUBLE Un 64 bits y doble precisión número datos tipo de punto flotante. BINARY_FLOAT Un 32-bit, precisión simple número datos tipo de punto flotante. <br />2.3.2 Asignaciones de tipo de datos de forma predeterminada <br />Tabla 2-4 muestra la configuración predeterminada utilizada por desarrolladores de SQL para convertir a tipos de datos de MySQL a Oracle. Programador SQL le permite cambiar la configuración predeterminada para ciertos tipos de datos especificando un tipo alternativo. Para obtener información acerca de cómo cambiar las asignaciones de tipo de datos de forma predeterminada, consulte la ayuda en línea de SQL Developer. <br />La siguiente tabla compara los tipos numéricos de MySQL a Oracle: <br />Tipos de datos en MySQLTipos de datos en Oracle BIGINTNUMBER(19, 0)BITRAWBLOBBLOB, RAWCHARCHARDATEDATEDATETIMEDATEDECIMALFLOAT (24)DOUBLEFLOAT (24)DOUBLE PRECISIONFLOAT (24)ENUMVARCHAR2FLOATFLOATINTNUMBER(10, 0)INTEGERNUMBER(10, 0)LONGBLOBBLOB, RAWLONGTEXTCLOB, RAWMEDIUMBLOBBLOB, RAWMEDIUMINTNUMBER(7, 0)MEDIUMTEXTCLOB, RAWNUMERICNUMBERREALFLOAT (24)SETVARCHAR2SMALLINTNUMBER(5, 0)TEXTVARCHAR2, CLOBTIMEDATETIMESTAMPDATETINYBLOBRAWTINYINTNUMBER(3, 0)TINYTEXTVARCHAR2VARCHARVARCHAR2, CLOBYEARNUMBER<br />Nota: <br />Los tipos de datos ENUM y SET no tienen ninguna asignación directa en Oracle. Programador SQL asigna columnas ENUM en MySQL a las columnas de VARCHAR2 de Oracle. A continuación, agrega una restricción y un desencadenador para esas columnas para garantizar que sólo los valores que fueron permitidos por el tipo de datos ENUM en la columna que fue asignada a en Oracle. <br />2.3.3 Comparación de tipos de datos <br />Esta sección muestra la diferencia entre los tipos de datos de MySQL y Oracle. Para algunos tipos de datos de MySQL, hay más de un tipo de datos de Oracle alternativo. Las tablas incluyen información acerca de lo siguiente: <br />Tipos numéricos <br />Fecha y hora de tipos <br />Tipos de cadena <br />2.3.3.1 De tipos numéricos <br />Al asignar tipos de datos de MySQL a tipos de datos numéricos en Oracle, se aplicarán las siguientes condiciones: <br />Si no hay precisión o escala definida para el destino de tipo de datos de Oracle, precisión y escala se toman desde el tipo de datos de origen de MySQL. <br />Si hay una precisión o escala definida para el tipo de datos de destino, estos valores se comparan con los valores equivalentes del tipo de datos de origen y se selecciona el valor máximo. <br />La siguiente tabla compara los tipos numéricos de MySQL a Oracle: <br />MySQLTamaño OracleBIGINT8 BytesNUMBER (19,0)BITAproximadamente (M+7)/8 BytesRAWDECIMAL(M,D)M+2 bytes if D > 0, M+1 bytes if D = 0 (D+2, if M < D)FLOAT(24), BINARY_FLOATDOUBLE8 BytesFLOAT(24), BINARY_FLOAT, BINARY_DOUBLEDOUBLE PRECION8 BytesFLOAT(24), BINARY_DOUBLEFLOAT(25<=X <=53)8 BytesFLOAT(24), BINARY_FLOATFLOAT(X<=24)4 BytesFLOAT, BINARY_FLOATINT4 BytesNUMBER (10,0)INTEGER4 BytesNUMBER (10,0)MEDIUMINT3 BytesNUMBER (7,0)NUMERICM+2 bytes if D > 0, M+1 bytes if D = 0 (D+2, if M < D)NUMBERREAL8 BytesFLOAT(24), BINARY_FLOATSMALLINT2 BytesNUMBER(5,0)TINYINT1 ByteNUMBER(3,0)<br />2.3.3.2 Fecha y tipos de hora <br />La siguiente tabla compara los tipos de fecha y hora de MySQL a Oracle:<br />MySQLTamaño OracleDATE3 BytesDATEDATETIME8 BytesDATETIMESTAMP4 BytesDATETIME3 BytesDATEYEAR1 ByteNUMBER<br />Tipos de cadena de 2.3.3.3 <br />Al asignar tipos de datos de MySQL a tipos de datos de carácter en Oracle, se aplicarán las siguientes condiciones: <br />Si no hay ninguna longitud definida para el tipo de datos de destino, la longitud se ha extraído el tipo de datos de origen. <br />Si hay una longitud definida para el tipo de datos de destino, se toma el valor máximo de las dos longitudes. <br />La siguiente tabla compara los tipos de cadena de MySQL a Oracle: <br />Nota: Referencia a M indica el tamaño de la pantalla máxima. El tamaño de visualización legal máximo es 255. Una referencia a L se aplica a un flotante punto tipos e indica el número de dígitos tras el punto decimal.<br />MySQL Tamaño Oracle BLOB L + 2 Bytes Considerando que L < 2 ^ 16 RAW, BLOB CHAR(m) Millones bytes, 0 < = M < = 255 CHAR ENUM (VALOR1, VALOR2,...) 1 o 2 bytes en función del número de enumeración. valores (65535 máx.)  LONGBLOB L + 4 Bytes Considerando que L < 2 ^ 32 RAW, BLOB LONGTEXT L + 4 Bytes Considerando que L < 2 ^ 32 RAW, CLOB MEDIUMBLOB L + 3 Bytes Considerando que L < 2 ^ 24 RAW, BLOB MEDIUMTEXT L + 3 Bytes Considerando que L < 2 ^ 24 RAW, CLOB CONJUNTO (VALOR1, VALOR2,...) 1, 2, 3, 4 o 8 bytes en función del número de miembros del conjunto (máximo de 64 miembros)  TEXTO L + 2 Bytes Considerando que L < 2 ^ 16 VARCHAR2, CLOB TINYBLOB L + 1 Bytes Considerando que L < 2 ^ 8 RAW, BLOB TINYTEXT L + 1 Bytes Considerando que L < 2 ^ 8 VARCHAR2 VARCHAR(m) L + 1 Bytes Considerando que L < = and0 M < = M < = 255 antes de MySQL 5.0.3 (0 < = M < = 65535 en MySQL 5.0.3 y versiones posteriores; longitud máxima efectiva es 65,532 bytes) VARCHAR2, CLOB <br />2.4 Conceptos de almacenamiento de datos <br />Esta sección proporciona una descripción de las diferencias conceptuales y similitudes en el almacenamiento de datos para bases de datos MySQL y Oracle. <br />Almacenamiento de datos es un aspecto de MySQL que distingue para casi cada base de datos, incluyendo Oracle. En MySQL, bases de datos corresponden a directorios en el directorio de datos del servidor. Tablas dentro de una base de datos corresponden a uno o más archivos en el directorio de base de datos, dependiendo del motor de almacenamiento que se utiliza para las tablas. <br />Una base de datos puede contener una mezcla de tablas de motores de almacenamiento diferentes. Un motor de almacenamiento es responsable para el almacenamiento y la recuperación de los datos de una tabla. <br />MySQL ofrece una variedad de motores de almacenamiento (anteriormente llamado tipos de tabla) para satisfacer los diferentes requisitos de entorno del usuario. Tabla 2-5 muestra los motores de almacenamiento apoyados por MySQL. <br />Tabla 2-5 motores de almacenamiento soportados por MySQL <br />Motor de almacenamiento Descripción MySQL El motor de almacenamiento no transaccional de predeterminado que proporciona la indización de texto completo y es altamente portátil MERGE Un motor de almacenamiento no transaccional que permite una colección de tablas con información de columna y índice idéntica a utilizarse como uno MEMORY (HEAP)Un motor de almacenamiento no transaccional que almacena los datos en memoria BDB (Berkeley DB) El primer motor de almacenamiento transaccional segura InnoDB Un motor de almacenamiento transaccional segura diseñado para obtener el máximo rendimiento al procesar grandes volúmenes de datos y proporciona bloqueo a nivel de fila FED Un motor de almacenamiento que tiene acceso a datos en las tablas de bases de datos remotas, en lugar de hacerlo en tablas locales ARCHIVE Un motor de almacenamiento de información que puede almacenar gran cantidad de datos sin índices en muy reducido CSV Un motor de almacenamiento de información que almacena los datos en el archivo de texto con formato de valores separados por comas BLACKHOLEUn motor de almacenamiento que actúa como un " agujero negro" que acepta datos pero lo tira y almacenarlo no EXAMPLEUn motor de " stub" que no hace nada. Su propósito es servir como un ejemplo que ilustra cómo empezar a escribir nuevos motores. ISAM El motor de almacenamiento de MySQL original que se ha degradado a favor del motor de almacenamiento MyISAM de la versión 5.0 <br />Cada motor de almacenamiento tiene sus ventajas e inconvenientes. Algunas de las características que diferencian a los motores de almacenamiento de información son transacciones, bloqueo, concurrencia y portabilidad. En la siguiente tabla resume las características para cuatro de los motores de almacenamiento de información utilizados. <br />Comparación de características de la tabla 2-6 para los motores de almacenamiento de información común <br />Características MySQL Heap BDB InnoDB Transaccional No No Sí Sí Granularidad de bloqueo Tabla Tabla Página Fila Almacenamiento de información Un archivo de datos (MYD) y un archivo de índice (.MYI) para cada tabla En memoria Un único datos e índice archivo (.db) para cada tabla Un conjunto de archivos de datos para todas las tablas Portátil Sí N/A No Sí <br />Una base de datos Oracle se compone de uno o más espacios de tablas. Tablas proporcionan espacio de almacenamiento lógico que vinculan a una base de datos a los discos físicos que contienen los datos. Un espacio de tablas se crea a partir de uno o más archivos de datos. Los archivos de datos son archivos en el sistema de archivos o un área de espacio de disco especificado por un dispositivo raw. Un espacio de tablas puede ampliarse añadiendo más archivos de datos. <br />Una base de datos Oracle se compone de un mínimo un sistema tablas, donde se almacenan las tablas de Oracle. También puede consistir en espacios de tablas definidas por el usuario. Un espacio de tablas es la ubicación de almacenamiento lógico para los objetos de base de datos. Por ejemplo, puede especificar donde se crea una tabla o un índice en el espacio de tablas.<br />3.Triggers y procedimientos almacenados<br />En este capítulo se compara MySQL y Oracle desencadenadores y procedimientos almacenados. (La información de este capítulo se aplica sólo a la versión de MySQL 5, no a las versiones anteriores.) Para obtener más información acerca de los desencadenadores de Oracle y procedimientos almacenados, consulte la referencia y la Guía del usuario de PL/SQL. Este capítulo incluye las siguientes secciones: <br />Triggers<br />Procedimientos almacenados<br />3.1 Triggers<br />Triggers se denominan objetos de base de datos que implícitamente se activan cuando se produce un hecho desencadenante. La acción de desencadenador se puede ejecutar antes o después del evento desencadenante. Desencadenadores son similares a los procedimientos almacenados, pero difieren en la forma en que son invocadas. <br />Soporte para desencadenadores en MySQL es sólo incluye comenzando con la versión 5.0.2. Un desencadenador sólo puede estar asociado con una tabla y definido al fuego cuando una INSERT, DELETE o UPDATE se lleva a cabo sobre la mesa. MySQL no permite dos desencadenadores con el mismo tiempo de desencadenador (BEFORE o AFTER) y evento de desencadenamiento o declaración (INSERT, DELETE o UPDATE) para definir en una tabla. Por ejemplo, se pueden definir dos antes de INSERT o dos desencadenadores AFTER UPDATE para una tabla. Todos los desencadenadores definidos en MySQL son factores desencadenantes de la fila, lo que significa que se ejecuta la acción definida para los desencadenadores para cada fila afectada por la instrucción desencadenante. <br />Control de errores durante la ejecución del desencadenador para tablas transaccionales, ya sea tanto la Declaración y activar acción desencadenadora se garantiza que se ha realizado correctamente o la declaración de desencadenador ni la acción de desencadenador es ejecutada, que es de todos los cambios realizados son rollback en caso de fallo. Para tablas no transaccionales, todos los cambios realizados antes al punto de error sigue en efecto. <br />A continuación se muestra la sintaxis para crear un desencadenador en MySQL: <br />CREATE TRIGGER <trigger name> <br /> { BEFORE | AFTER } <br /> { INSERT | UPDATE | DELETE } <br /> ON <table name> <br /> FOR EACH ROW <br /> <triggered action><br />En Oracle, desencadenadores pueden ser disparados cuando se produce uno de las siguientes operaciones: <br />Instrucciones DML (INSERT, DELETE o UPDATE) que modifican datos en una tabla o vista <br />Instrucciones DDL <br />Eventos de usuario como de inicio de sesión y cierre de sesión <br />Eventos del sistema tales como inicio, apagado y mensajes de error <br />Oracle permite varios desencadenadores con el mismo calendario de desencadenador y el evento de desencadenamiento a definirse en una tabla; Sin embargo, estos desencadenadores no se garantizan que se ejecutan en un orden específico. Los desencadenadores pueden definirse como desencadenadores de fila o desencadenadores de declaración. Desencadenadores de instrucción son despedidos de una vez para cada instrucción desencadenadora independientemente del número de filas de una tabla afectadas por la instrucción de activación. Por ejemplo, si un eliminaciones de instrucción DELETE varias filas de una tabla, un desencadenador de la declaración sólo se desencadena una vez. <br />El modelo de ejecución para desencadenadores de Oracle es transaccional. Todas las acciones realizadas como resultado de la instrucción desencadenadora, incluidas las acciones realizadas por desencadenadores despedidos, deben tener éxito; de lo contrario, se deshacen. <br />3.2 Procedimientos almacenados <br />Los procedimientos almacenados proporcionan una forma poderosa para la lógica de la aplicación de código que se puede almacenar en el servidor. MySQL y Oracle utilizan procedimientos almacenados y funciones. Funciones almacenadas son similares a los procedimientos, excepto que una función devuelve un valor para el medio ambiente en el que se llama. En MySQL, procedimientos almacenados y funciones se denominan colectivamente rutinas. <br />Las siguientes secciones comparar procedimientos almacenados en MySQL y Oracle: <br />Sentencias individuales SQL <br />Variables en procedimientos almacenados <br />Error en el manejo en procedimientos almacenados <br />3.2.1 Individuales instrucciones de SQL <br />Esta sección describe las consideraciones relacionadas con las siguientes declaraciones o construcciones: <br />REPLACE Statement <br />Estado <br />Compuesto DECLARE Statement <br />Declaración de SET compuesto <br />3.2.1.1 Declaración de REPLACE <br />La instrucción de REPLACE en MySQL es una doble finalidad. Funciona como el comando INSERT cuando no hay ningún registro en la tabla que tiene el mismo valor que el nuevo registro para una clave principal o un índice único, y en caso contrario funciona como la instrucción UPDATE. <br />Oracle no tiene cualquier instrucciones de SQL integradas que es compatible con los fines de la declaración de MySQL REPLACE. Para convertir esta declaración a Oracle, una función emulada mediante las instrucciones INSERT y UPDATE tiene que ser creado. <br />En primer lugar se realiza un intento para colocar los datos en la tabla mediante la instrucción INSERT; y si esto falla, los datos de la tabla, a continuación, se actualiza utilizando la instrucción UPDATE. <br />3.2.1.2 Estado <br />Como su nombre lo indica, el comando DO en MySQL hace algo, pero no devuelve nada; específicamente, se ejecuta la lista delimitada por comas de expresiones especificado como sus parámetros. El comando DO se convierte en un SELECT expr1 [, expr2,…] INTO … FROM DUAL declaración de Oracle. <br />3.2.1.3 Compuesto DECLARE Statement <br />MySQL utiliza la instrucción DECLARE para declarar variables locales en procedimientos almacenados. PL/SQL no permite varias declaraciones; cada declaración deberá ser realizada por separado. Convertir compuestas declaraciones de declare funcionalmente equivalente de PL/SQL código, cada MySQL múltiples instrucción de declaración debe convertir lógicamente equivalentes declaraciones separadas, una para cada declaración. <br />Por ejemplo, considere la siguiente declaración simple de MySQL y varias instrucciones de declaración: <br />/* Simple declaration */<br />DECLARE a INT;<br /> <br />/* Compound declaration */<br />DECLARE a, b INT DEFAULT 5; <br /> <br />Las declaraciones de funcionalmente equivalentes de PL/SQL son: <br />/* Simple declaration */<br />a INT;<br /> <br />/* Multiple declarations */<br />a INT := 5;<br />b INT := 5;<br /> <br />En este ejemplo, las dos declaraciones de MySQL DECLARE originales se convierten en tres instrucciones lógicamente equivalentes de declaración PL/SQL, con una instrucción de declaración de PL/SQL para cada declaración utilizada dentro de las declaraciones de MySQL DECLARE. <br />3.2.1.4 Instrucción compuesto Set. <br />MySQL utiliza la instrucción SET para asignar valores a variables (variables de usuario o las variables de sistema). MySQL permite declaraciones compuestas que asignan valores a las variables de dos o más dentro de la misma declaración. PL/SQL permite sólo las asignaciones simples que asignan un único valor a una variable única. Para convertir las instrucciones SET compuestas en código funcionalmente equivalente de PL/SQL, dividir cada MySQL múltiples de instrucción de asignación, en declaraciones de asignación simple lógicamente equivalente. <br />Por ejemplo, considere la siguiente asignación simple de MySQL y múltiples sentencias de asignación: <br />/* Simple statement */<br />SET a:=1;<br /> <br />/* Compound statement*/<br />SET x:=1, y:=0;<br /> <br />Las declaraciones de funcionalmente equivalentes de PL/SQL son: <br />/* Simple statement */<br />a:=1;<br /> <br />/* Multiple statements */<br />x:=1;<br />y:=0;<br /> <br />En este ejemplo, las dos declaraciones de MySQL SET originales se convierten en tres sentencias lógicamente equivalentes de asignación PL/SQL, con una sentencia de asignación de PL/SQL para cada declaración utilizada dentro de las declaraciones de SET de MySQL. <br />3.2.2 Variables en procedimientos almacenados <br />MySQL soporta tres tipos de variables en procedimientos almacenados: local, las variables de usuario y las variables de sistema. <br />Las variables locales se declaran dentro de procedimientos almacenados y sólo son válidas dentro de la BEGIN… Bloque END donde se declaran. Las variables locales deben declararse dentro de un BEGIN… Bloque END antes de que puede hacer referencia en otras declaraciones en el bloque, incluyendo cualquier BEGIN… anidados Bloques END. Si declara una variable local dentro de un BEGIN… anidados Bloque END tiene el mismo nombre que una variable local declarada en su BEGIN… envolvente Bloque END, la variable local en el bloque anidado prevalece siempre que se hace referencia a la variable local en el BEGIN… anidados Bloque END. Las variables locales pueden tener cualquier tipo de datos SQL. En el ejemplo siguiente se muestra el uso de variables locales en un procedimiento almacenado. <br />CREATE PROCEDURE p1()<br />BEGIN<br /> /* declare local variables */<br /> DECLARE x INT DEFAULT 0;<br /> DECLARE y, z INT;<br /> <br /> /* using the local variables */<br /> SET x := x + 100;<br /> SET y := 2;<br /> SET z := x + y;<br /> <br /> BEGIN<br /> /* local variable in nested block */<br /> DECLARE z INT;<br /> <br /> SET z := 5;<br /> <br /> /* local variable z takes precedence over the one of the <br /> same name declared in the enclosing block. */ <br /> SELECT x, y, z;<br /> END;<br /> <br /> SELECT x, y, z;<br />END;<br /> <br />mysql> call p1();<br />+-----+---+---+<br />| x | y | z |<br />+-----+---+---+<br />| 100 | 2 | 5 |<br />+-----+---+---+<br />1 row in set (0.00 sec)<br /> <br />+-----+---+-----+<br />| x | y | z |<br />+-----+---+-----+<br />| 100 | 2 | 102 |<br />+-----+---+-----+<br />1 row in set (0.00 sec)<br />Query OK, 0 rows affected (0.00 sec)<br />Las variables de usuario son específicas de una sesión de usuario y no pueden ser vistas o usadas por otros usuarios. Son válidos únicamente para la duración de una sesión de usuario y se liberan automáticamente cuando termina el período de sesiones de usuario. Las variables de usuario tienen un alcance de sesión; por lo tanto, todas las referencias a una variable de usuario del mismo nombre dentro de un período de sesiones se refieren a la misma variable. En los procedimientos almacenado de MySQL, se hace referencia a las variables de usuario con un signo (@) pone el nombre de la variable de usuario (por ejemplo, @x e @y). En el ejemplo siguiente se muestra el uso de variables de us

×