77
UNIVERSIDAD VERACRUZANA FACULTAD DE ADMINISTRACIÓN CARRERA: SISTEMAS COMPUTACIONALES ADMINISTRATIVOS EXPERIENCIA: BASE DE DATOS ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE CATEDRÁTICO: DR. CARLOS ARTURO TORRES GASTELÚ INTEGRANTES: FLORES RUANO EVA PATRICIA MORA PÉREZ SERGIO FRANCISCO

Analisis comparativo de mysql vs oracle

  • Upload
    sergio

  • View
    1.869

  • Download
    3

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Analisis comparativo de mysql vs oracle

UNIVERSIDAD VERACRUZANA

FACULTAD DE ADMINISTRACIÓN

CARRERA:

SISTEMAS COMPUTACIONALES ADMINISTRATIVOS

EXPERIENCIA:BASE DE DATOS

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

CATEDRÁTICO:

DR. CARLOS ARTURO TORRES GASTELÚ

INTEGRANTES:

FLORES RUANO EVA PATRICIA MORA PÉREZ SERGIO FRANCISCO

ORTIZ REYES JULIETA

H. VERACRUZ, VER. OCTUBRE DEL 2010

Page 2: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

ÍNDICE

Introducción Comparación general

Control de concurrencia.....................................................................................................5 Técnicas de bloqueo .........................................................................................................6 Tipos de columnas............................................................................................................7 Análisis de los tipos de tablas ..........................................................................................8 Transacciones y lecturas................................................................................................10 Niveles de transacción....................................................................................................11 Índices.............................................................................................................................12 Optimización de selecciones...........................................................................................14 Proceso servidor.............................................................................................................16 Características relacionales orientadas a objetos..........................................................17 Almacenamiento e indexación TableSpace....................................................................18 Sistemas operativos que soporta.....................................................................................19 2.1 Seguridad de base de datos.........................................................................................242.1.1 Base de datos de autenticación.................................................................................252.1.2 Privilegios...................................................................................................................252.2.2Nombres de objetos de esquema...............................................................................272.2.3 Consideraciones acerca del diseño de tabla.............................................................272.2.4 Migrar múltiples bases de datos................................................................................292.2.5 Esquema migraciones Consideraciones para MySQL..............................................292.3 Tipos de datos...............................................................................................................312.3.1 Tipos de datos de Oracle...........................................................................................31Tablas de los tipos de datos de Oracle compatibles SQL Developer. ...............................312.3.3 Comparación de tipos de datos.................................................................................342.4 Conceptos de almacenamiento de datos......................................................................363.Triggers y procedimientos almacenados.........................................................................383.1 Triggers.........................................................................................................................383.2 Procedimientos almacenados.......................................................................................393.2.1 Individuales instrucciones de SQL.............................................................................393.2.2 Variables en procedimientos almacenados...............................................................413.2.3 Error de manejo en procedimientos almacenados....................................................464. Solución de problemas....................................................................................................484.1 Definir la cuenta de usuario..........................................................................................484.2 Dumping datos de MySQL............................................................................................484.3 Optimizar las opciones de línea de comandos.............................................................50Conclusión ......................................................................................................................51 Bibliografia

Página 2 de 53

Page 3: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

INTRODUCCIÓN

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 procesartareas más largas en el mismo tiempo).

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).

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.

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.

La cuestión está en si estas herramientas tienen la misma calidad, y pueden garantizar el mismo soporte a las empresas que las utilicen.

Para comparar a estos dos sistemas se tomaron en cuenta algunos criterios como son entre otros:

Seguridad Performance (rendimiento) Disponibilidad Tipos de datos Tipos de almacenamiento Tipos de sistemas operativos Control de concurrencia

.

Página 3 de 53

Page 4: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

Comparación general

Mysql OracleNombre de la empresa Mysql AB Oracle Corporation1er realease publico 1996 1977Ultima versión estable 5.0 10g reléase 2Tipo de licenciamiento Gpl o propietario propietario

Mysql es muy popular por su velocidad de procesamiento, además el tipo de licenciaque 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.

Oracle es una base de datos robusta, es una de las bases de datos más confiables queexisten 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.

Página 4 de 53

Page 5: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

Confiabilidad. Puesto que los sistemas de base de datos en línea no puedenfallar.Disponibilidad. Debido a que los sistemas de base de datos en línea debenestar actualizados correctamente todo el tiempo.Tiempos de Respuesta.- En sistemas de este tipo, el tiempo de respuesta delas transacciones no debe ser mayor a diez segundos.Throughput. Los sistemas de base de datos en línea requieren procesarmiles de transacciones por segundo.Atomicidad. En el procesamiento de transacciones no se aceptan resultadosparciales.Permanencia. No se permite la eliminación en la base de datos de losefectos de una transacción que ha culminado con éxito.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

SEGURIDAD

Para lograr tal nivel de seguridad hay que adoptar medidas en varios niveles:• Sistema de base de datos. Dar acceso a los datos a usuarios de acuerdo altipo de usuario, esto quiere decir, que se debe dar los permisoscorrespondientes a una parte limitada de la base. Por ejemplo, a ciertosusuarios de la base de datos se les puede dar permiso para consulta pero no seles permite la modificación. Es responsabilidad del sistema gestor de base dedatos asegurarse de que no se violen estas restricciones de autorización.• Sistema Operativo. La debilidad del sistema operativo puede servir comomedio de acceso no autorizado a los datos. Lo importante aquí es que elsistema operativo debe ser seguro para minimizar la posibilidad de que sepueda ingresar a la base de datos.• Red. Este es un punto muy importante porque hoy en día casi todos lossistemas de base de datos permiten el acceso remoto desde terminales, laseguridad a nivel de red juega un papel muy importante.• Físico. Los sitios que contienen los sistemas informáticos como el lugar.

CONTROL DE CONCURRENCIA

El control de concurrencia en las bases de datos permite que la información semaneje en forma eficiente, permite además la ejecución de transacciones en paralelo,accesando a información compartida y, por lo tanto, interfiriendo potencialmenteunas con otras.donde están los servidores por ejemplo, deben tener seguridades contraintrusos.• Humano. Los usuarios administradores de la base de datos deben sercuidadosamente elegidos para reducir la posibilidad de que alguno de ellos déacceso a personas no autorizadas.

El objetivo del control de concurrencia y recuperación es asegurar que dichas

Página 5 de 53

Page 6: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

transacciones se ejecuten atómicamente.

Técnicas de bloqueoEs una variable asociada a cada elemento de datos que describe el estado de dichoelemento respecto a las posibles operaciones (recuperación o actualización) que sepueden realizar sobre ellos en cada momento.Las transacciones pueden llevar a cabo bloqueos, impidiendo a otros usuarios larecuperación o actualización de los elementos bloqueados, para evitar inconsistenciasen el acceso concurrente.Los SGBD tienen bloqueos (por registro, por tabla) para asegurar la consistencia.Los usuarios también pueden bloquear explícitamente los objetos, impidiendo elacceso por parte de otros usuarios.cuando se quiere actualizar datos.• Bloqueo compartido: cuando una transacción bloquea en este modo, permiteque otras transacciones retengan también el objeto en bloque compartido,pero no exclusivo. Este tipo se utiliza cuando no se requiere actualizar datos,pero se desea impedir cualquier modificación mientras los datos sonconsultados.El algoritmo que se utiliza se llama bloqueo de dos fases (two phase locking).El problema de las técnicas de bloqueo es que puede producirse un interbloqueo(deadlock), dos o mas transacciones están esperando cada una de ellas que la otralibere algún objeto antes de seguirSe puede solucionar:• Prevenir el deadlock: obliga a que las transacciones bloqueen todos loselementos que necesitan por adelantado. En caso de no poder conseguir todosesos elementos no bloquea ninguno y se queda en espera hasta volver aintentarlo.• Detectar el deadlock: Se controla de forma periódica si se ha producido undeadlock. Se construye un grafo en espera, cada nodo es una transacción enejecución y un arco de una transacción Ti a Tj, en caso que Ti esté esperandoun elemento que ocupa Tj. Si existe un ciclo en el grafo tenemos un deadlock.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.A diferencia de los proyectos propietarios, en los que el código fuente esdesarrollado por un número reducido de personas y se protege atentamente, losproyectos de código abierto no excluyen a nadie interesado en aportar ideas, sidisponen de los conocimientos necesarios.

Mysql es una base de datos robusta que se la puede comparar con unabase de datos comercial, es incluso más veloz en el procesamiento de lastransacciones y dispone de un sistema de permisos elegante y potente, y ahora,además, incluye un motor de almacenamiento InnoDb19[17] compatible conACID20[18], además dispone de store procedures, triggers, vistas.

Mysql es rápido, y una solución accesible para administrar correctamente los datos de una empresa. Son muchas las razones para escoger a Mysql como una solución de misión crítica para la administración de datos:

Página 6 de 53

Page 7: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

Costo: Mysql es gratuito para la mayor parte de los usos y su servicio deasistencia resulta económico.Asistencia: MysqlAB ofrece contratos de asistencia a precios razonables yexiste una nutrida y activa comunidad Mysql.Velocidad: Mysql es mucho más rápido que la mayoría de sus rivales.Funcionalidad: Mysql dispone de muchas de las funciones que exigen losdesarrolladores profesionales, como compatibilidad completa con ACID,compatibilidad para la mayor parte de SQL ANSI21[19], volcados online,duplicación, funciones SSL e integración con la mayor parte de los entornosde programación.Portabilidad: Mysql se ejecuta en la inmensa mayoría de sistemas operativosy, la mayor parte de los casos, los datos se pueden transferir de un sistema aotro sin dificultad.Facilidad de uso: Mysql resulta fácil de utilizar y de administrar. Lasherramientas de Mysql son potentes y flexibles, sin sacrificar su capacidad deuso.

INNODB es un tipo de tabla de Mysql que permite trabajar con transacciones, ydefinir reglas de integridad referencial.

Mysql utiliza varios tipos de tablas. El tipo de tabla predeterminado es MyISAM queestá optimizado para la velocidad del comando SELECT.La mayor parte de los sitios Web utilizan esta tabla, ya que estos sitios suelen utilizarla instrucción SELECT mucho más que las instrucciones INSERT o UPDATE.

Análisis de los distintos tipos de columnasExisten tres tipos fundamentales de columnas: numéricas, de cadena y de fecha.Por regla general se debe seleccionar el tipo de columna de menor tamaño, ya que deesta forma se ahorra espacio y se logra una mayor velocidad de acceso yactualización. Sin embargo, si se selecciona un tipo de columna demasiado pequeño,puede dar como resultado la pérdida de datos o que se recorten al introducirlos.

Tipos de columna numéricosLas columnas numéricas están diseñadas para almacenar todo tipo de datosnuméricos, como precios, edades y cantidades. Hay dos tipos principales de tiposnuméricos: tipos enteros y de punto flotante.

Tipos de columna de cadenaLos tipos de columna de cadena se utilizan para almacenar todo tipo de datoscompuestos de caracteres como nombres, direcciones.

Página 7 de 53

Page 8: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

TipoTINYINTBITBOOLSMALLINTMEDIUMINTINTINTEGERBIGINTFLOATDOUBLEDECNUMERIC

Tabla # 3: Tipos de datos numéricos Mysql. Tabla #4: Tipo de datos Cadena Mysql.

Tipos de cadena de fecha y horaLos tipos de columna de fecha y hora están diseñados para trabajar con lasnecesidades especiales que exigen los datos de tipo temporal y se puede utilizar paraalmacenar datos tales como la hora del día o fechas de nacimiento.Tabla #5: Tipos de datos fecha y hora MysqlFuente: Mysql AvanzadoAutor: Diego BurbanoAnálisis de los distintos tipos de tablasExisten dos tipos de tablas de transacción segura (Innodb y BDB). El resto (ISAM;MyISAM, MERGE y HEAP) no son de transacción segura. La elección del tipo detabla adecuado puede afectar enormemente al rendimiento.Tablas ISAMLas tablas de tipo de Método de acceso secuencial indexado (ISAM) era el estándarantiguo de Mysql. Estas fueron sustituidas por las tablas MyISAM en la versión 3.23.Por lo tanto, es probable que solo se tope con este tipo de tablas si está trabando conbases de datos antiguas. La principal diferencia entre las dos, es el índice de lastablas MyISAM es mucho más pequeño que el de las tablas ISAM, de manera que unSELECT con un índice sobre una tabla MyISAM utilizará mucho menos recursos delsistema.Tablas estáticasLas tablas estáticas tienen longitud fija. Cada registro tiene asignado exactamente 10Bytes.Este tipo de tablas se caracterizan por:• Ser muy rápidas (ya que Mysql sabe que el segundo nombre comienza

Página 8 de 53

TipoCHARVARCHARTINYBLOBTINYTEXTBLOBTEXTMEDIUMBLOBMEDIUMTEXTLONGBLOBLONGTEXTENUMSET

Page 9: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

siempre en el carácter número once)• Resultan sencillas de almacenar en caché.• Resultan sencillas para reconstruir tras un fallo.• Requieren más espacio de disco.

Tablas DinámicasLas columnas de las tablas dinámicas tienen diferentes tamaños. Aunque este tipo dedato ahorra espacio, resulta sin embargo más complejo.Las tablas de tipo dinámico presentan las siguientes características:• Todas las columnas de cadena son dinámicas.• Por regla general, ocupan mucho menos espacio de disco que las tablas fijas.• Las tablas requieren un mantenimiento regular para evitar su fragmentación.• No resulta tan sencillo de reconstruir tras un fallo, especialmente si las tablasestán muy fragmentadas.Tablas comprimidasLas tablas comprimidas son tablas de solo lectura que utilizan mucho menos espacioen disco.Son ideales para su uso con datos comprimidos que no cambien (que solo se puedenleer y no escribir) y donde no exista mucho espacio disponible.Las tablas comprimidas presentan las siguientes características:• Las tablas son mucho más pequeñas.• Como cada registro se comprime de forma separada, la carga de acceso esreducida.

Cada columna se podría comprimir de forma diferente, utilizando distintosalgoritmos de compresión.• Se puede comprimir formatos de tabla fija y dinámica.Tablas MergeLas tablas Merge son la fusión de las tablas MyISAM iguales.Por lo general se usa cuando las tablas MyISAM comienzan a resultar demasiadograndes.Entre las ventajas de estas tablas se pueden mencionar las siguientes:• Resultan más rápidas en determinadas situaciones.• El tamaño de la tabla es más pequeñoDesventajas de la tabla Mergo:• Resultan mucho más lentas en búsquedas.• El comando REPLACE no funciona sobre ellas.Tablas HaLas tablas Ha son el tipo de tabla más rápido porque se almacena en memoria yutilizan un índice asignado. La contrapartida es que como se almacenan en memoria,en el caso de una falla del sistema, los datos se pierden.Tablas InnodbLas tablas Innodb son tablas de transacción segura (lo que significa que dispone delas funciones COMMIT y ROLLBACK). En una tabla MyISAM, la tabla entera sebloquea al realizar funciones de inserción. Durante esa fracción de segundo, no sepuede ejecutar ninguna otra instrucción sobre la tabla. Innodb utiliza funciones debloqueo a nivel de fila de manera que solo se bloquee dicha fila y no toda la tabla, yse puedan seguir aplicando instrucciones sobre otras filas.Transacciones y bloqueosLas consultas sobre la base de datos se ejecutan una después de otra. En el caso de un

Página 9 de 53

Page 10: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

sitio Web que sirva páginas, da lo mismo el orden en que la base de datos realice lasconsultas, siempre y cuando lo haga rápidamente. Sin embargo, ciertos tipos deconsultas necesitan realizarse en un orden dado, como las que dependen de losresultados de una consulta anterior, o grupos de actualizaciones que

Las transacciones en las tablas IndoLa potencia de las tablas innoble procede del uso de transacciones o instruccionesSQL agrupadas en una. Un ejemplo típico son las transacciones bancarias.Por ejemplo, si se transfiere una cantidad de dinero desde la cuenta de una persona aotra, se realizan al menos dos consultas:UPDATE Persona1 SET Valor = Valor Disponible – Valora Debitar;UPDATE Persona2 SET Valor = Valor Disponible + Valora Debitar;El proceso parece claro, pero que ocurriría si algo sale mal durante el proceso y elsistema falla entre las dos consultas sin que llegue a completarse la segunda. Sehabrá retirado los fondos de la cuenta de la primera persona, se creerá que el pago seha realizado. Sin embargo, la segunda persona no estará muy contenta porque el pagono se ha realizado. En este tipo de transacciones, resulta fundamental asegurarse deque las dos consultas se levan a cabo o que no se hace ninguna de las dos. Para ello,se empaquetan en los que se conoce como una transacción, con una instrucciónBEGIN para indicar el inicio de la transacción y una instrucción COMMIT paraindicar el final. Solo tras procesar la instrucción COMMIT, las consultas se habránconvertido en permanentes. Si algo sale mal a media ejecución, podemos utilizar elcomando ROLLBACK para invertir la parte incompleta de la transacción.Lecturas coherentesDe manera predeterminada, las tablas innoble realizan una lectura coherente. Estosignifica que al realizar una consulta de selección, Mysql devuelve los valorespresentes de la base de datos hasta la última transacción completada. Si en elmomento de realizar la consulta existe alguna transacción en progreso, los resultadosde las instrucciones UPDATE o INSERT no se reflejarán, con una excepción: latransacción abierta puede modificarse (puede que haya observado que al realizar laconsulta BEGIN-INSERT-SELECT, se visualizó el resultado insertado). Para poderverlo, necesita tener dos ventanas abiertas y estar conectado a la base de datos.Lectura de Bloqueos para actualizacionesLas lecturas coherentes no siempre resultan adecuadas. Por ejemplo, que ocurriría sivarios usuarios están intentando agregar un nuevo registro en una tabla innotest?Cada nuevo registro inserta un número ascendente exclusivo, este campo no es claveprincipal o un campo de incremento automático, por lo tanto nada impide que cree elregistro duplicado. Sin embargo, no queremos que eso ocurra. Lo que desearíamos esleer el valor actual e insertar un nuevo valor, incrementando en una unidad. Pero estaacción no garantiza un valor único.La forma de evitar resultados erróneos es realizando un bloqueo de actualizaciónsobre 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.

Bloqueos de lectura en modo compartidoExiste otro tipo de bloqueo de lectura que no devuelve un valor si el valor que estáleyendo ha sido modificado por una transacción incompleta. Devuelve el últimovalor, pero no forma parte de una transacción cuya intención es modificar el valor.

Página 10 de 53

Page 11: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

Transacciones en tablas BDBLas tablas BDB procesan las transacciones de forma ligeramente diferente a lastablas Innodb. Si una persona está realizando una transacción sobre una tabla x, siesta transacción no está completa, ninguna persona podrá consultar los datos de estatabla mientras la transacción no finalice.El periodo de tiempo que puede significar al llevar a cabo esta consulta esdemasiado. El hecho de que no se trate de una consulta de selección “rápida” en lastablas BDB significa que todas las transacciones que se pospongan pueden dar lugara graves problemas de rendimiento.Como en el caso de las tablas innoble, el modo predeterminado de AUTOCOMMIT =1. Esto significa que a menos que coloque sus cambios dentro de una transacción(comenzando con BEGIN), se completarán inmediatamente.Otros comportamientos transaccionalesExiste una serie de comandos adicionales que finalizan automáticamente unatransacción (en otras palabras, que se comportan como si hubiéramos realizado unaoperación de confirmación):• BEGIN• ALTER TABLE• CREATE INDEX• RENAME TABLE• TRUNCATE• DROP TABLE• DROP DATABASE• LOCK TABLES

Bloqueo de tablasMysql maneja bloqueo a nivel de fila como lo revisamos anteriormente en el análisisde las tablas innoble y BDB. Los bloqueos a nivel de fila son mucho más eficacescuando se necesita realizar una gran cantidad de inserciones o actualizaciones en latabla. El bloqueo a nivel de fila, sin embargo, solo está disponible para los tipos detabla de transacción segura (BDB e Innodb). Mysql incorpora la función de bloqueoa nivel de tablas, que está disponible para todos los tipos de tabla.Existen dos tipos de bloqueos de tabla: los bloqueos de lectura y los bloqueos deescritura. Los bloqueos de lectura solo permiten realizar lecturas sobre la tabla,quedando bloqueadas las operaciones de escritura. Los bloqueos de escritura impidenla realización de operaciones de lectura o escritura sobre la tabla durante el bloqueo.Cómo evitar los bloqueos de tablaSe debe evitar los bloqueos sobre tablas que necesiten realizar un gran volumen deactualizaciones, ya que, en el caso de los bloqueos de escritura, no se puede leer oescribir ningún registro de la tabla durante el bloqueo.Además, como los bloqueos de escritura tienen prioridad sobre los de lectura demanera predeterminada, no se puede leer ningún registro hasta que todas lasoperaciones de actualización e inserción se completen, lo que puede provocar queMysql se atasque de forma terrible. Existen varias formas de evitar los bloqueos de

Página 11 de 53

Page 12: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

tabla. Una de ellas consiste en realizar la operación de lectura y actualización dentrode la misma instrucción (es lo que se conoce como actualización incremental).

Niveles de transacciónSe puede modificar el comportamiento predeterminado al trabajar con transaccionesmediante el establecimiento del nivel de transacción. Existen varios niveles detransacción en Mysql. En concreto admite los siguientes niveles de aislamiento detransacción.READ UNCOMMITTEDEste nivel permite transacciones para leer datos sin confirmar desde otrastransacciones (es lo que se conoce como lectura sucia).REPEATABLE READEste nivel no permite lecturas no susceptibles de repetición (que son las que se dancuando otra transacción ha modificado los datos, incluso si se han confirmado).

SERIALIZABLEEste nivel no permite lecturas fantasma, que tienen lugar cuando otra transacción haconfirmado una nueva fila que coincide con los resultados de nuestra consulta. Losdatos serán los mismos en cada ocasión.Índices y optimización de consultasEs posible agilitar la velocidad en las consultas mediante el uso de métodos básicos.El uso inteligente de índices ayudará a que la consulta, la actualización sea másrápida.El ajuste correcto del servidor también contribuye a lograr mejoras notables.Compresión de los índicesAl realizar una consulta sobre una tabla X de la base de datos, los registros sonrecuperados mediante un barrido completo de la tabla si la misma no utiliza índices,el problema es notorio cuando queremos buscar información con cierto criterio debúsqueda, haciendo que la consulta se demore demasiado.La operación de recorrer la tabla de esta forma (de principio a fin, examinando todoslos registros) se conoce como examen completo de la tabla. Cuando las tablas son degran tamaño, esta operación resulta poco eficiente ya que la labor de examinar tablascompuestas de varios cientos de miles de registros puede resultar muy lenta. Paraevitar este problema, se debe ordenar los registros. Sin embargo, puede ocurrir quedeseemos buscar registros de la tabla utilizando otro criterio de búsqueda. Lasolución es crear listas separadas para cada campo que se desee ordenar, a esteordenamiento se le conoce como índice.En Mysql existen cuatro tipos de índice: clave primaria, un índice exclusivo, uníndice de texto completo, y un índice ordinario.

Clave primariaUna clave primaria es un índice establecido sobre un campo en el que cada valor esexclusivo y ninguno de los valores puede ser nulo.Para establecer una clave primaria al crear la tabla, se debe utilizar la instrucciónPRIMARY KEY al final de las definiciones del campo, es importante la palabraclave NOT NULL, es además obligatoria al crear un campo primario, esto indica a labase de datos que no se admiten valores nulos ni valores duplicados ya que la claveprimaria es única.

Página 12 de 53

Page 13: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

Índice exclusivo

Los índices que no son primarios, permiten valores duplicados (a menos que loscampos se especifiquen como únicos). Un índice exclusivo permite realizarbúsquedas por un solo registro de la tabla que no necesariamente es único pero que lagran cantidad de registros almacenados amerita la creación de este índice.Índice de texto completoSe puede crear este tipo de índice sobre cualquier campo Char, Varchar o Text. LosÍndices de texto completo están diseñados para facilitar la búsqueda sobre palabrasclave en capos de texto de tablas grandes.Para devolver los resultados de una búsqueda de texto completo, se utiliza la funciónMATCH(), y se busca la correspondencia de un campo con un valor.Índice ordinarioUn índice ordinario es aquel que por necesidad del programador o de la consulta esnecesario la creación del índice, este puede ser de uno o varios registros. Hay quetener cuidado en la creación de este tipo de índices, ya que pueden degradar elcorrecto funcionamiento de la base de datos, no se puede crear porque sí, esnecesario examinar detenidamente si es óptimo o no.Tipos de Tabla e índicesCada tipo de tabla tiene su propio comportamiento en materia de índices y cada unade ellas lo procesa de manera diferente. No todos los tipos de índices estándisponibles para los distintos tipos de tabla. Es importante tener claro como se va autilizar una tabla y los índices que se van a necesitar ante de seleccionar el tipo detabla. En ocasiones, lo que parece ser el tipo de tabla perfecta se convierte en la peorelección porque o se puede utilizar un determinado tipo de índice en ella.A continuación se enlista las funciones y las diferencias de índices para cada tipo detabla. Las tablas MyISAM presentan las siguientes características:• Los índices se almacenan con la extensión .MYI• Los índices de número se almacenan con el byte alto primero par permitir unamejor compresión del índice.• Se puede utilizar índices BLOB y TEXT.• Se permiten valores nulos en los índices.• Los datos y el índice se pueden incluir en directorios diferentes ( lo quepermite una mayor velocidad).Las tablas MERGE presentan las siguientes características:• Las tablas MERGE no contienen índices propios.• El archivo .MRG contiene una lista de los archivos .MYI de índiceprocedentes de las tablas MyISAM integrantes.• Sigue siendo necesario especificar los índices al crear la tabla MERGE.Las tablas HEAP presentan las siguientes características:• Utilizan un índice de asignación almacenado en memoria, que resulta muyrápido.• Solo puede utilizar índices con los operadores = y <=>.• No puede usar un índice en una columna que permita valores nulos.• Los índices no se pueden utilizar con la cláusula ORDER BY.• Mysql no puede determinar el número aproximado de filas que existen entrelos dos valores (este resultado es utilizado por el optimizador de consultaspara seleccionar el índice más eficaz que utilizar).Las tablas ISAM utilizan un índice B-TREE almacenado en archivos con laextensión .ism.Las tablas InnoDB no pueden utilizar índices de texto completo.

Página 13 de 53

Page 14: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

Uso eficaz de los índicesLas tablas con pocos índices devolverán los resultados muy rápido. Pero la inclusiónde demasiados índices, aunque no suele ser normal, también ocasiona degradación dela base de datos. Los índices ocupan espacio de disco y, como están ordenados, cadavez que se realice una operación de inserción o de actualización, es necesario volvera organizar el índice para incluir los cambios, lo que da como resultado una carga detrabajo adicional significativa. La eficiencia en el uso de los índices depende tambiénde la configuración de Mysql.

Dónde utilizar los índicesEl uso más común de un índice consiste en recuperar filas que cumplan unacondición incluida en la cláusula WHERE.Es muy importante crear el índice correcto, sobre el campo correcto, revisandosiempre que forme parte de la condición.Al buscar valores máximos o mínimos, Mysql, sólo necesita tomar el primer valor oel último de una tabla ordenada con un índice, lo que resulta extremadamente rápido.Si se solicita con frecuencia valores máximos o mínimos, resulta muy útil crear uníndice sobre el campo pertinente.Sistema de prefijación más a la izquierdaComenzando por la parte izquierda de la lista de campos del índice, Mysql puedeutilizar cada uno de ellos, uno tras otro, siempre y cuando sigan la secuenciaempezando por la izquierda

Optimización de SeleccionesMientras mayor sea el número de tablas que se combinan, mayor será la cantidad defilas examinadas. Parte del buen diseño de las bases de datos consiste en hallar unequilibrio entre las tablas pequeñas de las bases de datos que necesitan máscombinaciones y las tablas de mayor tamaño que resultan más difíciles de mantener.Lo principal para que una consulta sea óptima es la selección correcta del índice y lacláusula WHERE correctamente definida, tomando en cuenta la prefijación más a laizquierda.En Mysql un detalle importante es el comando EXPLAIN, que ayuda al programadora conocer en detalle que índice se está utilizando, cuantos registros revisó para sacarla consulta, como es procesada la instrucción SELECT, esta instrucción es de granayuda para escribir consultas optimas y seleccionar el índice adecuado a la consulta.Cuando más complejos sean los permisos, mayor será la carga de trabajo queexperimentan las consultas.

Optimización de actualizaciones, eliminaciones e insercionesUna operación de actualización es prácticamente igual a una operación de seleccióncon 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.

Página 14 de 53

Page 15: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

La velocidad de la instrucción DELETE depende del número de índices. Al eliminar registros, resulta necesario suprimir, cada uno de ellos de todos los índices. El mejor método para insertar datos consiste en utilizar LOAD DATA en lugar de INSERT, ya que puede resultar 20 veces más rápido.

Oracle es un sistema de administración de base de datos (o RDBMS Relational DataBase Management System por las siglas en inglés), fabricado por Oracle corporation,básicamente una herramienta cliente/servidor para la gestión de Bases de Datos. Esun producto vendido a nivel mundial, aunque la gran potencia que tiene y su elevadoprecio hace que sólo se vea en empresas muy grandes y multinacionales, por normageneral. En el desarrollo de páginas web pasa lo mismo: como es un sistema muycaro no está tan extendido como otras bases de datos, por ejemplo, Access, Mysql,Sql Server, etc.

Para desarrollar en Oracle utilizamos PL/SQL un lenguaje de 5ª generación, bastantepotente para tratar y gestionar la base de datos, también por norma general se sueleutilizar SQL.Oracle es sin duda una de las mejores bases de datos que tenemos en el mercado, esun sistema gestor de base de datos robusto, tiene muchas características que nosgarantizan la seguridad e integridad de los datos; que las transacciones se ejecuten deforma correcta, sin causar inconsistencias; ayuda a administrar y almacenar grandesvolúmenes de datos; estabilidad, escalabilidad y es multiplataforma.

Por cada instancia de Oracle se tiene una sola base de datos.En un servidor se pueden crear varias instancias, pero no es recomendable ya quecada instancia consume muchos recursos.

Una instancia de Oracle está conformada por varios procesos de fondo y espacios dememoria compartida denominada System Global Area (SGA) que son necesariospara acceder a la información contenida en la base de datos.La instancia está conformada por procesos del usuario, procesos que se ejecutan en elbackground de Oracle y los espacios de memoria que comparten estos procesos.El SGA es utilizado para el intercambio de datos entre el servidor y los clientes.Una instancia de Oracle solo puede abrir una sola base de datos a la vez.

Conexión a la instancia OracleDe la relación de servicios creados durante la instalación de Oracle, por ahora nosinteresa básicamente dos.• El servicio relacionado con la instancia y la base de datos, cuyo nombre tienela siguiente estructura: OracleServiceXXX, donde XXX representa el nombrede la instancia.• El servicio relacionado con la disponibilidad de servidor para el accesoremoto, el nombre del servicio es: OracleOraHome92TNSListener.

Proceso Usuario. Programa, aplicación ó herramienta que usa el usuario parainiciar un proceso de usuario y establecer una conexión.

Página 15 de 53

Page 16: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

Proceso Servidor. Una vez que el proceso del usuario estable ce conexión,un proceso servidor es iniciado, el cual manejará las peticiones del usuario.Un proceso servidor puede ser dedicado, es decir solo atiende las peticionesde un solo proceso usuario, ó puede ser compartido, con lo cual puede atender

USUARIO DE LA BASE DE DATOS Proceso Usuario Proceso Servidor SERVIDOR ORACLE Conexión Establecida Sesión Creada

• Sesión. Una sesión es una conexión específica de un usuario a un servidorOracle. Se inicia cuando el usuario es validado por el servidor Oracle.Finaliza cuando el usuario termina la sesión en forma normal (logout) óaborta la sesión.

Oracle tiene su herramienta de red que permite a las aplicaciones en generalconectarse a servidores Oracle. Para que una aplicación pueda conectarse a unservidor Oracle, es necesario que el Proceso Escucha se encuentre ejecutándose en elservidor (OracleOraHome92TNSListener).El esquema de conexión remota se puede apreciar en el gráfico # 8.El proceso se describe a continuación:1. El cliente establece una conexión al proceso Escucha usando el protocoloconfigurado y envía un paquete CONNECT.2. El proceso Escucha comprueba que el SID esté definido. Si es así, genera unnuevo proceso para ocuparse de la conexión. Una conexión, se establece en elproceso Escucha y el nuevo proceso del servidor para pasarle la informacióndel proceso de inicialización. Luego la conexión es cerrada.

El proceso del servidor envía un paquete al cliente.4. Un nuevo paquete CONNECT es enviado al proceso servidor dedicado.5. El proceso del servidor dedicado acepta la conexión entrante y remite unmensaje de ACEPTADO al nuevo cliente.

Transacciones y bloqueosTransaccionesSe denomina transacción al espacio de tiempo que transcurre desde la primerasentencia DML que no sea SELECT (INSERT, UPDATE O DELETE) hasta quedamos por finalizada la transacción explícitamente (con las sentencias apropiadas) oimplícitamente (finalizando la sesión). Una base de datos está en estado consistentesi, obedece todas las restricciones de integridad definidas sobre ella. Durante latransacción, todas las modificaciones realizadas sobre la base de datos, no sondefinitivas, más concretamente, se realizan en un TABLESPACE especial que se

Página 16 de 53

Page 17: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

denomina ROOLLBACK o RBS (Roolback segment). Este tablespace, tienereservado un espacio para cada sesión activa en el servidor, y es en este espaciodonde, se almacenan cada una de las modificaciones de la transacción. Una vez quela transacción se ha finalizado, las modificaciones temporales almacenadas en elRBS, se vuelcan al tablespace original, donde está almacenada nuestra tabla.

Esto permite que ciertas modificaciones que se realizan en varias sentencias, se puedanvalidar todas a la vez, o rechazar todas a la vez. Es importante asegurar siempre quela base de datos nunca este en un estado de inconsistencia. Sin embargo, durante laejecución de una transacción, la base de datos puede estar temporalmente en unestado inconsistente. El punto importante aquí, es que la base de datos regrese alestado consistente al final de la transacción.

Se pueden diferenciar dos clases de cloqueos:• Un bloqueo de lectura que da acceso de solo lectura a un objeto y evita quecualquier otra transacción actualice el objeto, esta clase de bloqueo se llama amenudo, de lectura compartida puesto que varias transacciones pueden tenereste tipo de bloqueo al mismo tiempo.• Un bloqueo de escritura que otorga un acceso exclusivo de lectura-escritura ypreviene a la fuerza, que otras transacciones lean o escriban sobre el mismoobjeto.

Es importante notar que no es necesario bloquear un registro de la base de datosdurante la duración de la transacción ya que esto incrementaría la posibilidad de queocurra un bloqueo mutuo (dead lock), por esta razón, el bloqueo se lo podría hacersolamente durante el acceso real al objeto.Para resolver el conflicto creado por bloqueo mutuo, lo más usual es deshacer algunade las transacciones. En Oracle se escoge aquella que tenga la menor cantidad detrabajo realizado.Características relacionales orientadas a objetosOracle tiene soporte extensivo para constructores relacionales orientados a objetos,incluyendo:• Tipos de objetos. Se soporta un único modelo de herencia para las jerarquíasde tipos.• Tipos de colecciones. Oracle soporta varrays, que son arrays de longitudvariable, y tablas anidadas.• Tablas de objetos. Se utilizan para almacenar objetos mientras seproporciona una vista relacional de los atributos de los objetos.• Funciones de tablas. Son funciones que producen conjuntos de filas comosalida y se pueden utilizar en la cláusula From de una consulta.• Vistas de objetos. Proporcionan una vista de tablas de objetos virtuales dedatos almacenados en una tabla relacional normal. Permite acceder a ver losdatos en un estilo orientado a objetos incluso si los datos están realmentealmacenados en un formato relacional tradicional.• Métodos. Se pueden escribir en PL/SQL, Java o C.• Tipos de datos XML. Se pueden utilizar para almacenar e indexardocumentos XML.Oracle tiene dos lenguajes procedimentales principales, PL/SQL y Java. PL/SQL fueel lenguaje original de Oracle para los procedimientos almacenados y tiene unasintaxis similar al utilizado en el lenguaje Ada. Java se soporta mediante unamáquina virtual Java dentro del motor de base de datos. Oracle proporciona un

Página 17 de 53

Page 18: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

paquete para encapsular procedimientos, funciones y variables relacionadas enunidades únicas.DisparadoresOracle proporciona varios tipos de disparadores y varias opciones para el momento yforma en que se invocan. Los disparadores se pueden escribir en PL/SQL o java ocomo llamadas a C.Para los disparadores que se ejecutan sobre instrucciones DML tales como insert,update o delete, Oracle soporta disparadores de filas (row) y disparadores deinstrucciones (statement). Lo disparadores de filas se pueden ejecutar una vez porcada fila que se vea afectada (actualización o borrado, por ejemplo) por la operaciónDML. Un disparados de instrucciones, se ejecuta solamente una vez por instrucción.En cada caso, el disparador se puede definir tanto como un disparador “before” o“alter” dependiendo de si se va a invocar antes o después de que se lleva a cabo laoperación DML.Oracle también tiene disparadores que ejecutan otros eventos, tales como el inicio ofinalización de la base de datos, mensajes de error del servidor, inicio o finalizaciónde sesión de un usuario e instrucciones DDL tales como instrucciones create, alter odrop.

Almacenamiento e indexaciónTableSpace (Espacio de tablas)La base de datos Oracle se divide en unidades lógicas denominadasTABLESPACES. Cada TABLESPACE, consiste en una o más estructuras físicasdenominadas DATAFILES.Un TableSpace no es un fichero físico en disco, simplemente es el nombre que tieneun conjunto de propiedades de almacenamiento que se aplican a los objetos (tablas,secuencias…) que se crean en la base de datos bajo el tablespace indicado.Segment (Segmento, trozo, sección)El espacio en un espacio de tablas se divide en unidades denominadas segmentos,cada una de las cuales contiene los datos para una estructura de datos específica.Hay cuatro tipos de segmentos:• Segmento de datos.- cada tabla en un espacio de tablas tiene su propiosegmento de datos donde se almacenan los datos de la tabla a menos que éstase encuentre dividida; si esto ocurre, existe un segmento de datos por división( regularmente esta división se da por partición de las tablas).• Segmento de índices.- cada índice en un espacio de tablas posee su propiosegmento de índices, excepto los índices divididos, los cuales mantienen unsegmento de índice por división.• Segmentos temporales.- son segmentos utilizados cuando una operación deordenación necesita escribir datos al disco o cuando éstos se insertan en unataba temporal.• Segmento de retroceso.- se trata de segmentos que contienen informaciónpara deshacer los cambios de las transacciones de forma de que puedadeshacer una copia no terminada. También juegan un papel muy importanteen el modelo de control de concurrencia en Oracle y para la recuperación dela base de datos.

Página 18 de 53

Page 19: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

Sistemas operativos que soporta

Peso Mysql peso Oracle PesoWindows 10 Si 10 Si 10Linux 10 Si 10 Si 10Mac OS x 10 Si 10 Si 10Free BSD 10 Si 10 0IBM AIX 10 Si 10 Si 10Solaris 10 Si 10 Si 10HP UUX 10 Si 10 Si 10QNX 10 Si 10 Si 10SCO Unix 10 Si 10 Si 10Novell Netware 10 Si 10 Si 10SGI Irix 10 Si 10 Si 10

110 110 100

Mysql ofrece los conectores indicados en la tabla que pueden ser usados paradesarrollar aplicaciones utilizando mysql como base de datos. Cuando una aplicaciónes desarrollada con Php, Java, .net, perl, ODBC, Mysql dispone de un driver que seencarga de realizar este trabajo.

Oracle maneja PL/SQL que es un lenguaje de programación propio de Oracle, labase de datos incluye un compilador Java y JVM con la ingeniería de la base dedatos. Esto permite a los desarrolladores escribir procedimientos almacenados,triggers y funciones en el estándar de programación Java incluido en lenguaje Pl/sql.Los desarrolladores compilan los programas Java directamente en la base de datos oleer una clase java utilizando la utilidad de Oracle llamada LoadJava. Mysql nopermite almacenar o ejecutar programas java en la base de datos.

Mysql ofrece los conectores indicados en la tabla que pueden ser usados paradesarrollar aplicaciones utilizando mysql como base de datos. Cuando una aplicaciónes desarrollada con Php, Java, .net, perl, ODBC, Mysql dispone de un driver que seencarga de realizar este trabajo.

Oracle maneja PL/SQL que es un lenguaje de programación propio de Oracle, labase de datos incluye un compilador Java y JVM con la ingeniería de la base dedatos. Esto permite a los desarrolladores escribir procedimientos almacenados,triggers y funciones en el estándar de programación Java incluido en lenguaje Pl/sql.Los desarrolladores compilan los programas Java directamente en la base de datos oleer una clase java utilizando la utilidad de Oracle llamada LoadJava. Mysql nopermite almacenar o ejecutar programas java en la base de datos.

Página 19 de 53

Page 20: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

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.

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.

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.

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.

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.

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.

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

Página 20 de 53

Page 21: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

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.

Aquí están algunas de las comparaciones función desde una perspectiva de DBA:

Características y Funcionalidades

MySQL Oracle

Strengths Price/Performance Great performance when applications leverage architecture.

Aircraft carrier database capable of running large OLTP and VLDBs.

Database Products Enterprise ($) – supported, more stable.

Community (free) – more leading edge.

Enterprise ($$$$)

Standard ($$)

Standard One  ($)

Express (free) – up to 4GB

Application Perspective Web 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.

Administration Can 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.

Popularity Extremely 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 Web (MySQL Medium/Large OLTP

Página 21 de 53

Page 22: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

(most popular) excels)

Data Warehouse

Gaming

Small/medium OLTP environments

and enterprise applications.  Oracle excels in large business applications (EBS, Siebel, PeopleSoft, JD Edwards, Retek, ...)

Medium/Large data warehouse

Development Environments

(most common)

1) PHP

2) Java

3) Ruby on Rails

4) .NET

5) Perl

1) Java

2) .NET

3) APEX

4) Ruby on Rails

5) PHP

Note: 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

Uses tablespaces for system metadata, user data and indexes.  Common tablespaces include:

SYSTEM

SYSAUX

USER DATA

USER INDEXES

Página 22 de 53

Page 23: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

and .MYI files.

InnoDB – stores data in a common tablespace or individual tablespaces per table.

Binary logs are used for point-in-time recovery

TEMPORARY

UNDO

Redo and archive log files are used for point in time recovery.

Tables Tables use storage engines.  Each storage engine provides different characteristics and behavior.

A few tables with tons of features.

Partitioning Free, basic features $$$ with lots of options

Replication Free, 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.

Transactions InnoDB and upcoming Falcon and Maria storage engines

Regular and Index only tables support transactions.

Backup/Recovery No online backup built-in.

Replication

OS Snapshots

InnoDB Hot Backup

Recovery Manager (RMAN) supports hot backups and runs as a separate central repository for multiple Oracle database servers.

Export/Import Easy, 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.

Página 23 de 53

Page 24: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

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.

Storage Each 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 Procedures Very 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.

Seguridad de base de datos de 2.1

Esta sección incluye información acerca de los problemas de seguridad con bases de datos MySQL y bases de datos Oracle.

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.

2.1.1 Base de datos de autenticación

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.

Página 24 de 53

Page 25: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

2.1.2 Privilegios

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:

Global Base de la cantidad de hosts Nivel de la base de datos Específica de la tabla Columna específica (única columna en una sola tabla

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.

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.

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.

Migración de esquema de 2.2

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.

Esta sección contiene los siguientes elementos:

Similitudes de objetos de esquema Nombres de objetos de esquema Consideraciones acerca del diseño de tabla

Página 25 de 53

Page 26: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

Migración de bases de datos de múltiples Consideraciones acerca de la migración de esquema para MySQL

2.2.1 Similitudes de objetos de esquema

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.

La tabla 2-1 muestra las diferencias entre Oracle y MySQL. Objetos de esquema de la tabla 2-1 en Oracle y MySQL Oracle MySQLAFTER trigger triggerBEFORE trigger triggerCheck constraint Check constraintColumn default Column defaultDatabase DatabaseForeign key Foreign keyIndex IndexPackage N/APL/SQL function RoutinePL/SQL procedure RoutinePrimary key Primary keyRole N/ASchema SchemaSequence AUTO_INCREMENT for a columnSnapshot N/ASynonym N/ATable TableTablespace N/ATemporary table Temporary tableTrigger for each row Trigger for each rowUnique key Unique keyUser UserView View

Nombres de objetos de esquema de 2.2.2

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.

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

Página 26 de 53

Page 27: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

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.

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.

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.

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.

2.2.3 Consideraciones acerca del diseño de tabla

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:

Tipos de datos de carácter Valor predeterminado de la columna

Tipos de datos de carácter de 2.2.3.1

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.

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.

Página 27 de 53

Page 28: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

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.

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.

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.

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.

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.

Valor predeterminado de 2.2.3.2 columna

MySQL difiere de Oracle en la forma en que maneja el valor por defecto para una columna que no permite el valor NULL.

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.

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.

Página 28 de 53

Page 29: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

2.2.4 Migrar múltiples bases de datos

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.

2.2.5 Esquema migraciones Consideraciones para MySQL

Consideraciones de migración de esquema para MySQL se aplican en las siguientes áreas"

Bases de datos La asignación de privilegios de mundial y de nivel de base de datos de MySQL a

privilegios de sistema de Oracle Tablas temporales Propietario de objetos de esquema

Bases de datos de 2.2.5.1

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.

2.2.5.2 Mapping MySQL Global y privilegios de nivel de base de datos con privilegios de sistema de Oracle

Programador SQL no procesa todos los privilegios administrativos sobre MySQL, excepto el privilegio SUPER.

Página 29 de 53

Page 30: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

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.

Nivel Privilegio Sistema de privilegios en OracleGlobal ALTER ALTER ANY TABLE, ALTER ANY SEQUENCE, ALTER

ANY CUSTER, COMMENT ANY TABLEGlobal ALTER

ROUTINEALTER ANY PROCEDURE, DROP ANY PROCEDURE

Global CREATE CREATE ANY TABLE, CREATE ANY SEQUENCE, CREATE ANY CLUSTER, CREATE DATABASE LINK, COMMENT ANY TABLE

Global CREATE ROUTINE

CREATE ANY PROCEDURE

Global CREATE USER

CREATE USER, GRANT ANY PRIVILEGE

Global CREATE VIEW

CREATE ANY VIEW

Global DELETE ALTER ANY TABLE, DROP USER, DELETE ANY TABLEGlobal DROP DROP ANT TABLE, DROP ANY SEQUENCE, DROP

ANY CLUSTER, DROP ANY VIEWGlobal EXECUTE EXECUTE ANY PROCEDUREGlobal INDEX CREATE ANY INDEX, ALTER ANY INDEX, DROP ANY

INDEXGlobal INSERT INSERT ANY TABLEGlobal LOCK

TABLESLOCK ANY TABLE

Global SELECT SELECT ANY TABLEGlobal SUPER CREATE ANY TRIGGER, DROP ANY TRIGGERGlobal UPDATE UPDATE ANY TABLEGlobal USAGE CREATE SESSION, ALTER SESSION, UNLIMITED

TABLESPACEDatabase

CREATE CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE TABLE

Database

CREATE ROUTINE

CREATE PROCEDURE

Database

CREATE VIEW

CREATE VIEW

Table CREATE CREATE TABLETable CREATE

VIEWCREATE VIEW

Página 30 de 53

Page 31: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

Tablas temporales de 2.2.5.3

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.

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.

Propietario de 2.2.5.4 de objetos de esquema

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.

2.3 Tipos de datos

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:

Tipos de datos de Oracle admitidos Asignaciones de tipo de datos predeterminado Comparación de tipos de datos

2.3.1 Admite los tipos de datos de Oracle

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

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.

Página 31 de 53

Page 32: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

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

Página 32 de 53

Page 33: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

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.

2.3.2 Asignaciones de tipo de datos de forma predeterminada

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.

La siguiente tabla compara los tipos numéricos de MySQL a Oracle:

Tipos de datos en MySQL Tipos de datos en OracleBIGINT NUMBER(19, 0)BIT RAWBLOB BLOB, RAWCHAR CHARDATE DATEDATETIME DATEDECIMAL FLOAT (24)DOUBLE FLOAT (24)DOUBLE PRECISION FLOAT (24)ENUM VARCHAR2FLOAT FLOATINT NUMBER(10, 0)INTEGER NUMBER(10, 0)LONGBLOB BLOB, RAWLONGTEXT CLOB, RAWMEDIUMBLOB BLOB, RAWMEDIUMINT NUMBER(7, 0)MEDIUMTEXT CLOB, RAWNUMERIC NUMBERREAL FLOAT (24)SET VARCHAR2

Página 33 de 53

Page 34: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

SMALLINT NUMBER(5, 0)TEXT VARCHAR2, CLOBTIME DATETIMESTAMP DATETINYBLOB RAWTINYINT NUMBER(3, 0)TINYTEXT VARCHAR2VARCHAR VARCHAR2, CLOBYEAR NUMBER

Nota: 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.

2.3.3 Comparación de tipos de datos

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:

Tipos numéricos Fecha y hora de tipos Tipos de cadena

2.3.3.1 De tipos numéricos

Al asignar tipos de datos de MySQL a tipos de datos numéricos en Oracle, se aplicarán las siguientes condiciones:

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.

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.

La siguiente tabla compara los tipos numéricos de MySQL a Oracle:

MySQL Tamaño OracleBIGINT 8 Bytes NUMBER (19,0)BIT Aproximadamente (M+7)/8 Bytes RAWDECIMAL(M,D) M+2 bytes if D > 0, M+1 bytes if

D = 0 (D+2, if M < D)FLOAT(24), BINARY_FLOAT

DOUBLE 8 Bytes FLOAT(24), BINARY_FLOAT, BINARY_DOUBLE

DOUBLE PRECION

8 Bytes FLOAT(24), BINARY_DOUBLE

Página 34 de 53

Page 35: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

FLOAT(25<=X <=53)

8 Bytes FLOAT(24), BINARY_FLOAT

FLOAT(X<=24) 4 Bytes FLOAT, BINARY_FLOATINT 4 Bytes NUMBER (10,0)INTEGER 4 Bytes NUMBER (10,0)MEDIUMINT 3 Bytes NUMBER (7,0)NUMERIC M+2 bytes if D > 0, M+1 bytes if

D = 0 (D+2, if M < D)NUMBER

REAL 8 Bytes FLOAT(24), BINARY_FLOATSMALLINT 2 Bytes NUMBER(5,0)TINYINT 1 Byte NUMBER(3,0)

2.3.3.2 Fecha y tipos de hora

La siguiente tabla compara los tipos de fecha y hora de MySQL a Oracle:

MySQL Tamaño OracleDATE 3 Bytes DATEDATETIME 8 Bytes DATETIMESTAMP 4 Bytes DATETIME 3 Bytes DATEYEAR 1 Byte NUMBER

Tipos de cadena de 2.3.3.3

Al asignar tipos de datos de MySQL a tipos de datos de carácter en Oracle, se aplicarán las siguientes condiciones:

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.

Si hay una longitud definida para el tipo de datos de destino, se toma el valor máximo de las dos longitudes.

La siguiente tabla compara los tipos de cadena de MySQL a Oracle:

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.

MySQL Tamaño OracleBLOB L + 2 Bytes Considerando que L < 2 ^ 16 RAW, BLOBCHAR(m) Millones bytes, 0 < = M < = 255 CHARENUM (VALOR1, 1 o 2 bytes en función del número de

Página 35 de 53

Page 36: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

VALOR2,...) enumeración. valores (65535 máx.)LONGBLOB L + 4 Bytes Considerando que L < 2 ^ 32 RAW, BLOBLONGTEXT L + 4 Bytes Considerando que L < 2 ^ 32 RAW, CLOBMEDIUMBLOB L + 3 Bytes Considerando que L < 2 ^ 24 RAW, BLOBMEDIUMTEXT L + 3 Bytes Considerando que L < 2 ^ 24 RAW, CLOBCONJUNTO (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, BLOBTINYTEXT L + 1 Bytes Considerando que L < 2 ^ 8 VARCHAR2VARCHAR(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

2.4 Conceptos de almacenamiento de datos

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.

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.

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.

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.

Tabla 2-5 motores de almacenamiento soportados por MySQL

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

MERGEUn 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

Página 36 de 53

Page 37: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

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

BLACKHOLE Un motor de almacenamiento que actúa como un "agujero negro" que acepta datos pero lo tira y almacenarlo no

EXAMPLE Un 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

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.

Comparación de características de la tabla 2-6 para los motores de almacenamiento de información común

Características MySQL Heap BDB InnoDBTransaccional No No Sí SíGranularidad de bloqueo

Tabla Tabla Página Fila

Almacenamiento Un archivo de En Un único Un conjunto de

Página 37 de 53

Page 38: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

de información datos (MYD) y un archivo de índice (.MYI) para cada tabla

memoria datos e índice archivo (.db) para cada tabla

archivos de datos para todas las tablas

Portátil Sí N/A No Sí

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.

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.

3.Triggers y procedimientos almacenados

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:

Triggers Procedimientos almacenados

3.1 Triggers

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.

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

Página 38 de 53

Page 39: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

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.

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.

A continuación se muestra la sintaxis para crear un desencadenador en MySQL:

CREATE TRIGGER <trigger name> { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ON <table name> FOR EACH ROW <triggered action>

En Oracle, desencadenadores pueden ser disparados cuando se produce uno de las siguientes operaciones:

Instrucciones DML (INSERT, DELETE o UPDATE) que modifican datos en una tabla o vista

Instrucciones DDL Eventos de usuario como de inicio de sesión y cierre de sesión Eventos del sistema tales como inicio, apagado y mensajes de error

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.

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.

Página 39 de 53

Page 40: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

3.2 Procedimientos almacenados

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.

Las siguientes secciones comparar procedimientos almacenados en MySQL y Oracle:

Sentencias individuales SQL Variables en procedimientos almacenados Error en el manejo en procedimientos almacenados

3.2.1 Individuales instrucciones de SQL

Esta sección describe las consideraciones relacionadas con las siguientes declaraciones o construcciones:

REPLACE Statement Estado Compuesto DECLARE Statement Declaración de SET compuesto

3.2.1.1 Declaración de REPLACE

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.

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.

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.

3.2.1.2 Estado

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.

Página 40 de 53

Page 41: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

3.2.1.3 Compuesto DECLARE Statement

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.

Por ejemplo, considere la siguiente declaración simple de MySQL y varias instrucciones de declaración:

/* Simple declaration */DECLARE a INT; /* Compound declaration */DECLARE a, b INT DEFAULT 5;

Las declaraciones de funcionalmente equivalentes de PL/SQL son:

/* Simple declaration */a INT; /* Multiple declarations */a INT := 5;b INT := 5;

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.

3.2.1.4 Instrucción compuesto Set.

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.

Por ejemplo, considere la siguiente asignación simple de MySQL y múltiples sentencias de asignación:

/* Simple statement */SET a:=1; /* Compound statement*/SET x:=1, y:=0;

Página 41 de 53

Page 42: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

Las declaraciones de funcionalmente equivalentes de PL/SQL son:

/* Simple statement */a:=1; /* Multiple statements */x:=1;y:=0;

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.

3.2.2 Variables en procedimientos almacenados

MySQL soporta tres tipos de variables en procedimientos almacenados: local, las variables de usuario y las variables de sistema.

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.

CREATE PROCEDURE p1()BEGIN /* declare local variables */ DECLARE x INT DEFAULT 0; DECLARE y, z INT; /* using the local variables */ SET x := x + 100; SET y := 2; SET z := x + y; BEGIN /* local variable in nested block */ DECLARE z INT; SET z := 5; /* local variable z takes precedence over the one of the same name declared in the enclosing block. */ SELECT x, y, z;

Página 42 de 53

Page 43: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

END; SELECT x, y, z;END; mysql> call p1();+-----+---+---+| x | y | z |+-----+---+---+| 100 | 2 | 5 |+-----+---+---+1 row in set (0.00 sec) +-----+---+-----+| x | y | z |+-----+---+-----+| 100 | 2 | 102 |+-----+---+-----+1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)

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 usuario en dos procedimientos almacenados.

CREATE PROCEDURE p2()BEGIN SET @a = 5; SET @b = 5; SELECT @a, @b; END; CREATE PROCEDURE p3()BEGIN SET @a = @a + 10; SET @b = @b - 5; SELECT @a, @b; END; mysql> call p2();+------+------+| @a | @b |+------+------+| 5 | 5 |+------+------+

Página 43 de 53

Page 44: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql> call p3();+------+------+| @a | @b |+------+------+| 15 | 0 |+------+------+1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec)

En el segundo procedimiento (p3) en el ejemplo anterior, el uso del usuario variables a y b en la parte derecha de la instrucción de asignación supone que las variables previamente se ha inicializado a algún valor por el primer procedimiento. Si las variables no se ha inicializado por el primer procedimiento, tendrían los valores nulos, y también sería el resultado para la asignación de un valor nulo.

También se pueden hacer referencia a variables de sistema en procedimientos almacenado de MySQL. Hay dos tipos de variable de sistema en MySQL: variables de sistema global y las variables de sistema de sesión. Variables de sistema global de afectan el funcionamiento de la general del servidor. Las variables de sistema de sesión afectan el período de sesiones de usuario individual. También se pueden cambiar las variables de sistema que son dinámicas en los procedimientos almacenado de MySQL.

En una instrucción SET, las variables nombre precedido por GLOBAL o @@global. son variables globales, y el nombre de las variables de sesión opcionalmente puede ir precedido de SESSION, @@session., LOCAL o @@local.. Variables de sistema pueden hacer referencia en la instrucción SELECT utilizando el @@[global.|session.|local.]var_name sintaxis. Si global., session. no está presente, MySQL devuelve la variable de sesión si existe o el valor GLOBAL lo contrario. En el ejemplo siguiente se muestra algunas de estas opciones de sintaxis.

CREATE PROCEDURE p4()BEGIN /* setting the value of a (dynamic) global variable */ SET GLOBAL sort_buffer_size := 10000; /* retrieving the value of a global variable */ SELECT @@global.sort_buffer_size; /* setting the value of a (dynamic) session variable */ SET max_join_size := DEFAULT; /* retrieving the value of a session variable, shown using different syntax */ SELECT @@session.max_join_size;

Página 44 de 53

Page 45: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

SELECT @@local.max_join_size; SELECT @@max_join_size; END;

PL/SQL de Oracle permite también variables ser declarado y en procedimientos almacenados. Como en MySQL, las variables en PL/SQL deben declararse en la parte declarativa de un bloque de PL/SQL antes de que se hace referencia en cualquier otras declaraciones en el bloque.

Las variables locales en PL/SQL tienen el mismo alcance que las variables locales en los procedimientos almacenado de MySQL. Son válidos dentro del bloque de PL/SQL donde se declaran, incluyendo bloques anidados de PL/SQL. Una variable del mismo nombre en un bloque anidado de PL/SQL tiene prioridad sobre la variable en el bloque de PL/SQL envolvente.

Como con las variables locales en MySQL, variables en PL/SQL pueden tener cualquier tipo de datos SQL, como número o VARCHAR2. Además, las variables en PL/SQL también pueden tener los tipos de datos de PL/SQL, como BOOLEAN o PLS_INTEGER, o declaradas a celebrar las columnas o filas de la tabla utilizando los calificadores especial %TYPE y %ROWTYPE.

En el ejemplo siguiente se muestra algunas declaraciones de variables en un bloque de PL/SQL.

DECLARE /* variables of SQL data-type */ wages NUMBER; hours_worked NUMBER := 40; hourly_salary NUMBER := 22.50; bonus NUMBER := 150; country VARCHAR2(128); counter NUMBER := 0; /* variables of PL/SQL data-types */ done BOOLEAN; valid_id BOOLEAN; /* variables declared to hold table rows */ emp_rec1 employees%ROWTYPE; emp_rec2 employees%ROWTYPE;BEGIN wages := (hours_worked * hourly_salary) + bonus; country := 'France'; country := UPPER('Canada'); done := (counter > 100); valid_id := TRUE; emp_rec1.first_name := 'Antonio'; emp_rec1.last_name := 'Ortiz'; emp_rec1 := emp_rec2;END;

PL/SQL de Oracle también permite constantes para declararse en procedimientos almacenados. Igual que las variables, constantes deben

Página 45 de 53

Page 46: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

declararse en la parte declarativa de un bloque de PL/SQL antes de que puede hacer referencia en otras declaraciones en el bloque de PL/SQL, incluyendo el bloque anidado de PL/SQL. Una constante es declarada con la palabra clave CONSTANT. Debe inicializar una constante en su declaración, y no más asignaciones a la constante están permitidas. En el ejemplo siguiente se declara una constante en PL/SQL.

credit_limit CONSTANT NUMBER := 5000.00;

Las variables de usuario en los procedimientos almacenado de MySQL se pueden emular en Oracle mediante la definición de las variables en un paquete. La especificación del paquete emula por período de sesiones variables.Variables de usuario de MySQL definidos en un paquete están disponibles para los usuarios del paquete. Para obtener un ejemplo de un procedimiento almacenado de MySQL y el equivalente convertido en Oracle, considere el siguiente procedimiento de MySQL almacenada:

CREATE PROCEDURE p2()BEGIN SET @a = 5; SET @b = 5; SELECT @a, @b;END;

Para este ejemplo, las declaraciones equivalentes de Oracle son:

CREATE OR REPLACE PACKAGE root.globalPkg AS a NUMBER; b NUMBER;END globalPkg; CREATE OR REPLACE PROCEDURE root.p2 ASBEGIN globalPkg.a := 5; globalPkg.b := 5; DBMS_OUTPUT.PUT_LINE(globalPkg.a || ',' || globalPkg.b);END p2; CREATE OR REPLACE PROCEDURE root.p3 ASBEGIN globalPkg.a := globalPkg.a + 10; globalPkg.b := globalPkg.b - 5; DBMS_OUTPUT.PUT_LINE(globalPkg.a || ',' || globalPkg.b);END p3;

3.2.3 Error de manejo en procedimientos almacenados

Página 46 de 53

Page 47: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

PL/SQL de Oracle y MySQL implementan un mecanismo para sus procedimientos almacenados de manejo de errores. Cada instrucción de SQL en el procedimiento almacenado se comprueba los errores antes de que la siguiente instrucción se procesa. Si se produce un error, control se pasa inmediatamente a un controlador de errores. Por ejemplo, si una instrucción SELECT no encuentra ninguna fila en la base de datos, se produce un error, y se ejecuta el código para hacer frente a este error.

En los procedimientos almacenado de MySQL, controladores pueden definirse para hacer frente a errores o advertencias que se produce de ejecutar una instrucción SQL dentro de un procedimiento almacenado. MySQL permite dos tipos de controladores: continuar los controladores y los controladores de salida. Los dos tipos de controladores de diferencian su siguiente punto de ejecución en el procedimiento almacenado después de que se ejecuta el controlador. Para un handler CONTINUE, ejecución continúan con la siguiente instrucción después de la instrucción que provocó el error. Para un controlador de salir, se termina la ejecución de la instrucción actual de compuestos, cercada por un par de declaraciones de BEGIN y END, y la ejecución continúa en la siguiente instrucción (si existe) después de la instrucción compuesta.

Los controladores se definen para hacer frente a una o más condiciones. Una condición puede ser un valor SQLSTATE, un código de error de MySQL o una condición predefinida. Hay tres condiciones predefinidas: SQLWARNING (advertencia o nota), NOT FOUND (no más filas) y SQLEXCEPTION (error). Una condición se puede definir por separado con un nombre y posteriormente se hace referencia en la declaración de controlador. Todas las definiciones de controlador se realizan al comienzo de un bloque de instrucción compuesta.

En los procedimientos de almacenado PL/SQL de Oracle, una condición de error se llama una excepción. Excepciones pueden ser internamente definidos (por el sistema de tiempo de ejecución) o definidas por el usuario. Algunas excepciones internas tienen predefinidos nombre, como ZERO_DIVIDE o NO_DATA_FOUND. Excepciones internas son implícitamente (automáticamente) planteadas por el sistema de tiempo de ejecución. Excepciones definidas por el usuario deben ser nombres y deben ser planteadas explícitamente por declaraciones de aumentar en los procedimientos almacenados. Controladores de excepciones controlan las excepciones que se plantean.

Controladores de excepciones pueden ser declarados para un bloque de PL/SQL. Estos controladores de excepciones están cerrados entre instrucciones BEGIN y END y controlen las excepciones que podrían plantearse en el bloque de PL/SQL, incluyendo subbloques de declaraciones. Un bloque de PL/SQL es similar a un bloque de instrucciones compuesto de MySQL. Se pueden declarar excepciones sólo en la parte declarativa de un bloque de PL/SQL, y son locales a ese bloque y global a todos sus subbloques. Por lo tanto, el bloque de inclusión no puede manejar excepciones planteadas en un sub-block si son excepciones locales a la sub-block. Excepciones planteadas en un sub-block no se propagan al bloque envolvente si los controladores de excepciones definidos para sub-block controlen y si no se plantean una vez más en los controladores de excepciones. Después de que un controlador de

Página 47 de 53

Page 48: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

excepciones se ejecuta, el bloque actual deja reanuda la ejecución y la ejecución en la siguiente instrucción en el bloque de inclusión.

Para obtener un ejemplo de uso del mecanismo en MySQL y Oracle de tratamiento de errores, procedimientos almacenados, considere el siguiente procedimiento de MySQL almacena:

CREATE PROCEDURE adjust_emp_salary () BEGIN DECLARE job_id INT; DECLARE employee_id INT DEFAULT 115; DECLARE sal_raise DECIMAL(3,2); DECLARE EXIT HANDLER FOR 1339; SELECT job_id INTO jobid FROM employees WHERE employee_id = empid; CASE WHEN jobid = 'PU_CLERK' THEN SET sal_raise := .09; WHEN jobid = 'SH_CLERK' THEN SET sal_raise := .08; WHEN jobid = 'ST_CLERK' THEN SET sal_raise := .07; END CASE;END;

El siguiente es el equivalente de PL/SQL de Oracle.

CREATE OR REPLACE PROCEDURE adjust_emp_salary () AS jobid employees.job_id%TYPE; empid employees.employee_id%TYPE := 115; sal_raise NUMBER(3,2);BEGIN SELECT job_id INTO jobid from employees WHERE employee_id = empid; CASE WHEN jobid = 'PU_CLERK' THEN sal_raise := .09; WHEN jobid = 'SH_CLERK' THEN sal_raise := .08; WHEN jobid = 'ST_CLERK' THEN sal_raise := .07; END CASE; EXCEPTION WHEN CASE_NOT_FOUND THEN DBMS_OUTPUT.PUT_LINE('Employee salary not adjusted.');END;

Página 48 de 53

Page 49: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

4. Solución de problemas

Este capítulo proporciona información sobre la optimización de las opciones de línea de comandos y evitar problemas de conexión de programador SQL en el servidor de base de datos de MySQL. Incluye información sobre:

Definición de la cuenta de usuario Dumping de datos de MySQL Optimización de opciones de línea de comandos

4.1 Definir la cuenta de usuario

Al migrar a Oracle, SQL Developer intenta conectarse a la base de datos MySQL como usuario de MySQL asociado con la conexión de base de datos actual. (SQL Developer no uso el usuario root.) Programador SQL puede capturar sólo los objetos de base de datos de MySQL que el usuario especificado tiene privilegios de acceso.

Por lo tanto, cuando se crea la conexión de base de datos que va a utilizar para migraciones de MySQL, asegúrese de especificar un usuario de MySQL que tiene suficientes privilegios para acceder a todos los objetos y datos que se plan migrar a Oracle.

4.2 Dumping datos de MySQL

Si tiene dificultad para migrar de MySQL a Oracle, puede comprobar el Foro de discusión de programador SQL en Oracle Technology Network.

Si tiene un contrato de soporte, el equipo de apoyo de programador SQL puede solicitarle que proporcione un volcado de la base de datos MySQL. Esto ayuda al equipo de realizar un seguimiento del problema y proporcionar una solución rápida. Mediante el método de mysqldump para crear una copia de la base de datos MySQL es generar archivos de texto que se pueden transferir a otros sistemas, incluso aquellos con arquitectura de hardware diferente. El equipo de apoyo de programador SQL puede regenerar la salida en otra base de datos.

Página 49 de 53

Page 50: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

La tabla siguiente proporciona una explicación del código utilizado para volcar los datos de MySQL y volver a generar la base de datos desde el archivo de texto de salida de mysqldump:

Comando Descripción

mysqldump Le permite extraer el esquema y los datos en una base de datos MySQL en un archivo.

MySQL Carga MySQL, por lo que puede ejecutar el comando.

-u nombre de usuario

Nombre de usuario de MySQL.

-p contraseña Contraseña para el usuario especificado.

--opt Optimiza la tabla dumping velocidad y escribe un archivo de volcado para recarga de velocidad. Para obtener una lista de definiciones de las opciones habilitadas por --opt, consulte "Opciones de línea de comandos optimización".

database_name Nombre de la base de datos que contiene la información que desea volcar en un archivo de texto de salida.

> Símbolo utilizado para redirigir la entrada en UNIX y NT.

file_name.sql Nombre del archivo que contiene la información de base de datos de MySQL.

Para volcar los datos de MySQL, utilice el siguiente comando:

% mysqldump -u user name -ppassword --opt database_name > file_name.sql

Volver a generar la base de datos desde el archivo de texto de salida de mysqldump en una base de datos, utilice el siguiente comando:

% mysql -u user name -ppassword database_name < file_name.sql

4.3 Optimizar las opciones de línea de comandos

Cambiar automáticamente sobre las opciones dentro de la línea de comandos de mysqldump mediante el uso de --opt.

Página 50 de 53

Page 51: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

La tabla siguiente enumeran los comandos llevadas a cabo por el -opt comando:

Comando Descripción--add-drop-table

Agrega una instrucción DROP TABLE IF EXISTS antes de cada instrucción CREATE TABLE.

--all Incluye todos los específicos de MySQL crear opciones.--extended-insert

Escribe fila múltiples declaraciones INSERT.

--quick Vuelca tablas directamente a la salida estándar sin uso de búferes de la consulta. Si se suspende la mysqldump mientras se utiliza esta opción, puede interferir con otros clientes porque podría provocar que el servidor deje de responder.

--lock-tables

Bloquea todas las tablas como sólo lectura.

CONCLUSIÓN

Desde nuestra perspectiva respecto a la investigación casi no se puede comparar Oracle y MySQL, ya que son dos tipos diferentes de productos.

Página 51 de 53

Page 52: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

Es complicado realizar un estudio de performance de las bases de datos ya que depende en gran medida de la experiencia de los desarrolladores y del administrador de la base de datos, también del volumen de información, laboratorios especializados, simulación de casos reales.

Los proyectos de Código Abierto funcionan bien cuando el alcance es el deherramientas básicas y dónde los requerimientos están claramente definidos.Especialmente, los proyectos de aplicaciones de negocio tienden a no llegar a nadadebido a grandes “diseños por comité”, discusiones y desacuerdos respecto deprioridades.

En relación a la vulnerabilidad del protocolo Mysql se encontró que es vulnerableante las consultas a la base de datos, tales como por ejemplo, información acerca delusuario administrador y su contraseña.

Las consultas realizadas al servidor deben estar encriptadas para así evitar quecualquier “administrador intruso” tenga acceso directo a la información. Este es unpunto débil de los ambientes LINUX con relación aunque al nivel de seguridad delprotocolo MySQL. Pueden establecerse algunas estrategias para disminuirprobabilidad de intrusiones al servidor, mas una vez dentro del sistema, la base dedatos queda vulnerable.

En general Mysql es muy popular por su velocidad de procesamiento, además el tipo de licencia que maneja es Gpl (General Public Licence).

Oracle en cambio es una base de datos robusta y es una de las bases de datos más confiables que existen en el mercado a nivel mundial.

Para realizar esta investigación tomamos en cuenta algunos criterios para analizar los RBDMS nos ha permitido encontrar las diferencias y similitudes que tiene un sistema de código abierto como Mysql y un sistema de código cerrado como Oracle, así como las ventajas y desventajas que estos tienen.

BIBLIOGRAFÍA

http://blogs.sun.com/GeorgeTrujillo/entry/mysql_versus_oracle_features_functionality

http://forum.percona.com/index.php/t/1158/

Página 52 de 53

Page 53: Analisis comparativo de mysql vs oracle

ANÁLISIS COMPARATIVO DE MYSQL VS ORACLE

http://download.oracle.com/docs/cd/E12151_01/doc.150/e12155/oracle_mysql_compared.htm

http://redalyc.uaemex.mx/redalyc/src/inicio/ArtPdfRed.jsp?iCve=78411785005

analisis-comparativo.pdf

Página 53 de 53