Ir a contenido principal

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

La primera vez que se registra en developerWorks, se crea un perfil para usted. Información sobre su perfil (nombre, país/región y compañia) estará disponible al público y acompañará cualquiera de sus publicaciones. Puede actualizar su cuenta IBM en cualquier momento.

Toda la información enviada es segura.

  • Cerrar [x]

La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

Toda la información enviada es segura.

  • Cerrar [x]

DB2 10: Ejecute aplicaciones Oracle en DB2 10 para Linux, UNIX y Windows

DB2 10 ofrece un excelente soporte PL/SQL a las aplicaciones desarrolladas en Oracle, y más

Serge Rielau, SQL Architect, STSM, Software IBM
Serge Rielau photo
Serge Rielau ha trabajado en DB2 para compilador SQL para Linux, UNIX y Windows por 14 años. Actualmente, es arquitecto SQL para DB2 para Linux, UNIX y Windows. Es arquitecto SQL responsable por la compatibilidad en DB2 10. Serge Riealau puede ser encontrado en SQLTips4DB2.com.

Resumen:  Software IBM® DB2® 10 para Linux®,UNIX® y Windows® tiene soporte listo para usar para dialectos SQL y PL/SQL de Oracle. Esto permite que muchas aplicaciones escritas para Oracle se ejecuten en DB2, virtualmente sin cambios. En este artículo, obtendrá una visión general de alto nivel sobre lo que significa la compatibilidad Oracle en DB2. Bien sea que usted desee pasar su aplicación personalizada hacia DB2 o extender su soporte de vendedor DBMS a DB2, ahora es el momento. [19 de abril de 2012: Este artículo ha sido actualizado para incluir nuevos recursos agregados en DB2 10.]

Ver más contenido de esta serie

Fecha:  18-06-2012
Nivel:  Intermediaria
Actividad:  12495 vistas
Comentario:  


Motivación

Desarrolle habilidades de este tema

Este contenido es parte de un knowledge path progresivo para avanzar en sus habilidades. Vea DB2 fundamentals for Oracle professionals: Migrating from Oracle to DB2

En marzo del 2009, en una presentación Cebit que realicé sobre DB2, quemé un altavoz de computadora a 110V que inconscientemente conecté a la red eléctrica alemana a 230V sin utilizar un transformador. En ese mismo viaje, también destruí el cargador de mi cepillo dental eléctrico y mi rasuradora eléctrica en accidentes similares. Dada mi poca habilidad para aprender de los errores, no es de sorprender que uno de mis dichos favoritos (de origen desconocido) sea: "El problema con los estándares es que hay muchos".

En el mundo de los sistemas de administración de bases de datos relacionales (RDBMS), estamos bendecidos con por lo menos tres estándares principales e incontables variaciones de ellos:

  • ANSI SQL y ANSI SQL/PSM
  • Oracle SQL y PL/SQL
  • Sybase y Microsoft® TSQL

La Figura 1 ilustra con un diagrama de Venn cómo se sobreponen los dialectos SQL.


Figura 1. Confusión babilónica de SQL

Cada vez que usted escribe una aplicación, debe elegir cuál proveedor RDBMS va a utilizar. Una vez que toma la decisión, esencialmente usted está comprometido. Cualquier intento de cambiar de proveedor para aprovechar menores precios, mejor tecnología o una mejor asociación, es frustrada por código legado que necesita de extensa reescritura antes de que se pueda usar en otro RDBMS. Adicionalmente, su conjunto de habilidades no puede ser transferido de un producto a otro tan fácilmente como usted esperaría.

Software IBM® DB2® 10 para Linux®,UNIX® y Windows® (DB2) reduce dramáticamente las barreras para aplicaciones escritas para Oracle cuando las habilita para DB2. Esto proporciona a los clientes la capacidad para elegir un DBMS con base en sus méritos y no en el historial de aplicación.

DB2 10 incluye recursos de compatibilidad Oracle

Para permitir que una aplicación escrita para un RDBMS se ejecute en otra virtualmente sin cambios, muchas piezas deben encajar. Diferentes mecanismos de bloqueo, tipos de datos, SQL, lenguaje de procedimientos residente en el servidor e incluso interfaces de clientes usadas por la aplicación misma, necesitan alinearse no sólo en sintaxis sino también en semántica.

Todos estos pasos han sido dados en DB2. Los cambios son la excepción, no la regla (usted puede evaluar rápidamente los cambios de aplicación necesarios). La Tabla 1 proporciona una visión general rápida de recursos usados comúnmente.


Tabla 1. Recursos usados comúnmente

Oracle-->DB2
Control de concurrencia-->Soporte nativo
Dialecto SQL-->Soporte nativo
PL/SQL-->Soporte nativo
Paquetes PL/SQL-->Soporte nativo
Paquetes integrados-->Soporte nativo
Extensiones con cliente JDBC-->Soporte nativo
Aplicaciones de cliente OCI-->Soporte nativo
Aplicaciones Pro*C-->Soporte nativo
Scripts SQL*Plus-->Soporte nativo
Formularios Oracle-->Conversión automatizada a tecnología™ Java
RAC-->pureScale

Con DB2, usted ya no necesita dar puerto a una aplicación. Usted apenas habilita la aplicación. En el caso de una aplicación empaquetada, incluso es posible compartir una fuente para DB2 y Oracle. En otras palabras, habilitar una aplicación Oracle para DB2 se torna algo no más complejo que habilitar un programa escrito en C para HP-UX para que se pueda ejecutar en AIX.


Control de concurrencia

En el pasado, una de las diferencias más prominentes entre Oracle y DB2 ha sido el enfoque de control de concurrencia. El eslogan es "Los lectores no bloquean a los escritores y los escritores no bloquean a los lectores". La Tabla 2 muestra el comportamiento de concurrencia para Oracle.


Tabla 2. Comportamiento de concurrencia Oracle

Transacción pendienteComportamientoNueva transacción
El lectorNo bloqueaEl lector
El lectorNo bloqueaal escritor
al escritorNo bloqueaEl lector
al escritorBloquesal escritor

Sin entrar en detalles sobre niveles de aislamiento, es suficiente decir que la gran mayoría de aplicaciones que utilizan el Statement Level Isolation predeterminado, trabajarán simplemente bien usando el DB2 predeterminado de Cursor Stability (CS).

Tradicionalmente, el CS ha sido implementado para que los escritores bloqueen a los lectores y, en algunos casos, que los lectores bloqueen a los escritores. La razón para ello es que, tradicionalmente, una transacción bajo un aislamiento CS "esperará el resultado" de los cambios de una transacción concurrente pendiente. La Tabla 3 muestra el comportamiento de concurrencia con CS.


Tabla 3. Comportamiento de concurrencia DB2 con CS

Transacción pendienteComportamientoNueva transacción
El lectorNo bloqueaEl lector
El lectorRara vez bloqueaal escritor
al escritorBloquesEl lector
al escritorBloquesal escritor

Resulta que no hay razón semántica por la cual una transacción ejecutándose bajo aislamiento CS espere el resultado cuando encuentre una fila cambiada. Un comportamiento igualmente satisfactorio es leer la versión actualmente confirmada de la fila cambiada.

Este comportamiento ha sido implementado en DB2 9.7. Lo que sucede es que el DB2 simplemente recupera del registro la versión actualmente confirmada de una fila bloqueada. En los casos más comunes, la fila todavía está en el almacenamiento intermedio del registro porque el cambio aún no ha sido confirmado. Pero incluso si la fila ha sido escrita y también ha sido sobrescrita en el almacenamiento intermedio del registro, DB2 sabe exactamente dónde encontrarla, de manera que una sola E/S traerá la versión deseada a la agrupación de almacenamiento intermedio.

Como se muestra en la Figura 2, imagine a un usuario actualizando un nombre en la tabla de ejemplo. Antes de que el usuario haya confirmado el cambio otro usuario explora la tabla. Tradicionalmente, el segundo usuario habría tenido que esperar a que el primer usuario confirmara o retrocediera. Gracias a leer los datos actualmente confirmados, la exploración del segundo usuario simplemente recuperará del almacenamiento intermedio de registro la versión de la fila que no contiene los cambios del primer usuario.


Figura 2. Los escritores no bloquean a los lectores

Es importante notar que este comportamiento:

  • No presenta objetos nuevos como un segmento de retroacción.
  • No tiene sobrecosto de desempeño para el escritor dado que el registro de todas formas debe escribirse.
  • No puede causar ninguna situación como "instantánea demasiado vieja" porque en el evento extremadamente improbable de que el archivo de registro necesitado haya sido archivado (mientras una transacción todavía estaba abierta), DB2 simplemente retrocederá y esperará que pase el bloqueo.

Además de estos cambios, técnicas adicionales para evitar bloqueos se han introducido en el DB2 para eliminar los lectores manteniendo un bloqueo bajo aislamiento CS. La Tabla 4 muestra el nuevo comportamiento de concurrencia que DB2 tiene con CS.


Tabla 4. Nuevo comportamiento de concurrencia DB2 con CS

Transacción pendienteComportamientoNueva transacción
El lectorNo bloqueaEl lector
El lector no bloquea al escritor
al escritor no bloquea el lector
al escritorbloquesal escritor

Como puede ver, el comportamiento de concurrencia ahora es idéntico al de Oracle. De hecho, las bases de datos creadas a partir de DB2 9.7 exhiben este comportamiento predeterminado.


Nuevos tipos de datos

El corazón de toda base de datos son sus datos. Los tipos no coincidentes o la semántica no coincidente de estos tipos puede impactar seriamente la capacidad para habilitar una aplicación en otro RDBMS. Así que para permitir a las aplicaciones Oracle ejecutarse en DB2, es crucial soportar estos tipos básicos no estándar, como cadenas de caracteres, fechas y números. Más allá de alinear estos tipos básicos, hay otros tipos más complejos utilizados comúnmente en PL/SQL de Oracle que se encuentran disponibles a partir del DB2 9.7, como se muestra en la Tabla 5.


Tabla 5. Nuevos tipos de datos DB2

Tipos de datosDescripción
NUMBERSe ha agregado soporte de NUMBER y NUMBER(p [, s]) con base en DECFLOAT (con aceleración de hardware de potencia) y DECIMAL.
VARCHAR2El comportamiento de tipo VARCHAR2 incluye cadenas de caracteres vacías interpretadas como NULL y seguimiento de compaginación sensible en blanco.
NCHAR, NVARCHAR2 y NCLOBLos tipos National Character proporcionan soporte de cadena de caracteres de doble byte para bases de datos Unicode.
Oracle DATEUna base de datos en modo Oracle DATE incluye el componente TIME adicionalmente a la fecha calendario.
TIMESTAMP(n)La escala de fracciones de segundos puede elegirse entre 0 (fecha + hora) hasta 12 (picosegundos).
BOOLEANEste tipo puede utilizarse en lógica de procedimientos, variables y parámetros para rutinas.
VARRAYEl soporte de ARRAY en los procedimientos ha sido extendido para soportar métodos y sintaxis de estilo VARRAY.
INDEX BYAdemás de los array regulares, DB2 también soporta arrays asociativos.
ROW TYPEEste tipo compuesto puede utilizarse en variables y parámetros y como un elemento para arrays y arrays asociativos.
Tipo Ref CursorLos cursores pueden ser asignados a variables o sobrepasados usando parámetros.

Conversión implícita y resolución de tipo

"Si camina como pato y hace ruidos de pato, entonces debe ser un pato".

Este es el mantra de muchos de los nuevos lenguajes como PHP y Ruby. Cada literal es una cadena de caracteres y luego es utilizada como otro tipo con base en el contexto. En adherencia al estándar SQL y siguiendo una filosofía en la que un error de coincidencia es probablemente un indicador de un error de código, tradicionalmente DB2 ha seguido fuertes reglas de escritura, donde las cadenas de caracteres y los números no pueden compararse a menos que uno sea convertido explícitamente en el otro.

Desafortunadamente, cuando una aplicación Oracle utiliza una escritura débil en su SQL, esa aplicación debe haber fallado previamente en compilar para DB2. A partir del DB2 9.7, la conversión implícita (o escritura débil) se ha utilizado de manera predeterminada. Esto es, las cadenas de caracteres y los números pueden ser comparadas, asignadas y se puede trabajar con ellas de manera bastante flexible.

Adicionalmente, los NULL no escritos se pueden usar en muchos sitios, mientras los marcadores de parámetro no escritos se pueden usar casi que en cualquier parte, gracias a deferred prepare. Es decir, DB2 no resolverá el tipo de un marcador de parámetro hasta que haya visto el primer valor verdadero.

Para redondear la conversión implícita, el DB2 también soporta la asignación de parámetros de rutinas predeterminados, así como la asociación de argumentos a parámetros por nombre.

Biblioteca integrada de funciones extendida en DB2

Todos los RDBMs proporcionan bibliotecas de funciones para que operen sobre los datos. El problema es que no hay dos que utilicen los mismos nombres para estas funciones, incluso si al final la funcionalidad es similar.

Además de su propio conjunto tradicional de funciones, ahora DB2 soporta una biblioteca compatible con Oracle. La siguiente lista ofrece una vista general rápida, pero de ninguna manera es una lista completa:

  • Funciones de conversión y moldeado
    • TO_DATE
    • TO_CHAR
    • TO_CLOB
    • TO_NUMBER
    • TO_SINGLE_BYTE
    • TO_TIMESTAMP

    Cada una de estas funciones soporta un rico conjunto de series de formato compatibles.


  • Fecha aritmética
    • EXTRACT
    • ADD_MONTHS
    • MONTHS_BETWEEN
    • NEXT_DAY
    • Más (+) adición de fracciones de días
  • Manipulación de cadenas de caracteres
    • LPAD
    • RPAD
    • INSTR
    • INITCAP
    • LISTAGG
    • SUBSTRB
    • SUBSTR2
    • Extensiones a SUBSTR
  • Otras funciones
    • NVL
    • NVL2
    • HEXTORAW
    • DECODE
    • LEAST
    • GREATEST
    • BITAND
    • RATIO_TO_REPORT

El amplio incremento de sobreposición de funciones soportadas entre los dos productos implica un gran éxito mejorado y listo para usar, permitiendo una aplicación Oracle para DB2.


Soporte de dialecto SQL Oracle

Este artículo, hasta ahora, ha cubierto concurrencia, tipos de datos, escritura y funciones. Pero las diferencias entre Oracle y DB2 van más allá de esto. El tejido mismo de los dialectos SQL, sus palabras clave y semántica difieren en algunas áreas. Además cada producto soporta algunas características que el otro simplemente no. Cuando estas características son populares, limitan la capacidad para presentar SQL común para ambos productos, lo que puede desencadenar muchos ajustes de idioma pequeños y grandes. La Tabla 6 lista algunos elementos destacados.


Tabla 6. Nuevo soporte SQL

RecursoDescripción
CONNECT BY recursividadEl DB2, hasta ahora, ha soportado la recursividad ANSI SQL. Ahora, en el estilo Oracle se ha agregado CONNECT BY incluyendo las diferentes funciones y pseudocolumnas como LEVEL y CONNECT_BY_PATH.
(+) join syntaxEsta sintaxis en realidad es desalentada incluso por Oracle, pero hay numerosas aplicaciones y desarrolladores que todavía utilizan esta forma de sintaxis OUTER JOIN .
DUAL tablaUna tabla de fila individual y columna individual utilizada ubicuamente en aplicaciones Oracle como un elemento ficticio.
ROWNUM pseudocolumnaEsta pseudocolumna se usa típicamente para limitar el número de filas retornadas y para enumerar filas en un conjunto de resultados.
ROWID pseudocolumnaLos ID de fila se utilizan para recuperar rápidamente una fila que fue captada previamente, con base en su dirección física.
MINUS operador SQLEn Oracle, MINUS se utiliza en lugar de EXCEPT para sustraer un conjunto de resultados de otro.
SELECT INTO FOR UPDATE El sitio Web FOR UPDATE en SELECT INTO permite la extracción de una fila del DB2 con la intención de modificarla después sin utilizar un cursor.
PUBLIC SYNONYM Un sinónimo público es un alias sin un esquema de nombre. El DB2 soporta sinónimos públicos para objetos de tabla, secuencias y paquetes PL/SQL.
CREATE TEMPORARY TABLE DB2 soporta tablas temporales globales creadas, además de las tablas temporales globales declaradas.
TRUNCATE argumento de tablaEste argumento elimina rápidamente el contenido de toda una tabla sin disparar desencadenantes.
CREATE OR REPLACE argumentos de objetoEsta notación le permite reemplazar objetos si ya existen, con nuevas versiones.
Parámetros nombrados (=>)Usted puede invocar procedimientos y funciones asociando argumentos a parámetros, por nombre, usando una notación => en lugar de depender de la asociación posicional.
Resolución relajada de nombreDB2 no necesita que se nombren vistas incorporadas . Además, los nombres de columna pueden heredarse más fácilmente de operadores de conjunto como UNION.

Esto concluye la visión general de los cambios hechos al DB2 para que las aplicaciones Oracle que presentan SQL a la base de datos puedan ejecutarse en su mayoría sin cambios. Sin embargo, hay secciones principales de muchas aplicaciones que se están ejecutando en el servidor mismo. El lenguaje de elección del lado del servidor para aplicaciones Oracle es PL/SQL. No se puede proclamar seriamente una compatibilidad sin soporte para PL/SQL.


Soporte DB2 para PL/SQL

Comúnmente, cuando una aplicación se lleva de un producto a otro, el lenguaje de procedimiento SQL se traduce de un dialecto al otro. Esto supone varios problemas, incluyendo:

  • El código traducido resultante tiende a ser intrincado debido a la no coincidencia de automatización e impedancia entre el dialecto fuente y el dialecto objetivo.
  • Los desarrolladores de la aplicación no están familiarizados con el dialecto del lenguaje SQL. Esto hace que sea difícil depurar el código traspasado. Con el tiempo, el mantenimiento adicional se torna un reto debido a la falta de habilidades.
  • En el caso de las aplicaciones empaquetadas, es necesario repetir la traducción para cada nuevo release de la aplicación.
  • Al final, el resultado es una emulación, que por definición se ejecuta más lentamente que el original.

Para evitar estos problemas, DB2 incluye PL/SQL nativo . ¿Qué significa esto?

Como usted puede ver en la Figura 3, el motor DB2 incluye un compilador PL/SQL junto con el compilador SQL PL. Ambos compiladores producen código de máquina virtual para el SQL Unified Runtime Engine del DB2. Es importante notar que las herramientas de supervisión y desarrollo como Optim Development Studio están enganchadas en el DB2 a nivel de motor de tiempo de ejecución.


Figura 3. Compilador de soporte PL/SQL

La integración en el DB2, como lenguaje de procedimiento de primera clase tiene varias implicaciones, incluyendo las siguientes:

  • No hay traducción. El código fuente permanece como está en el catálogo de esquema.
  • Los desarrolladores pueden continuar trabajando en el lenguaje con el que están familiarizados. No hay necesidad de pasar lógica a dialecto DB2 ni siquiera si se escribe nueva lógica en SQL PL. Las rutinas que utilizan diferentes dialectos se pueden llamar entre sí.
  • Los proveedores de aplicaciones empaquetadas pueden usar una fuente para ambos, Oracle y DB2.
  • Tanto PL/SQL como SQL PL producen el mismo código de máquina virtual para SQL Unified Runtime Engine de DB2. Por lo tanto, por diseño, tanto PL/SQL como SQL PL se ejecutan a la misma velocidad.
  • Como la infraestructura de depurador se conecta directamente al SQL Unified Runtime Engine, PL/SQL es soportado naturalmente por el Optim Development Studio.

La Figura 4 muestra una sesión de depuración PL/SQL. El depurador soporta recursos estándar como step into, step over y puntos de interrupción. Adicionalmente, le permite al usuario cambiar variables locales PL/SQL mientras el programa está en ejecución.


Figura 4. Soporte de depurador PL/SQL en DB2

Detalles de sintaxis PL/SQL

¿Entonces, qué significa realmente soporte PL/SQL? Primero, está el soporte de sintaxis central. DB2 soporta todas las construcciones comunes PL/SQL, como las siguientes:

  • if then else
  • while bucles
  • := asignaciones
  • variables y constantes locales
  • #PRAGMA EXCEPTION y manejo de excepciones
  • Varias formas de bucles for (rango, cursor y consulta)
  • %TYPE y %ROWTYPE anclaje de variables y parámetros para otros objetos
  • Los tipos locales pueden declararse dentro de cualquier bloque PL/SQL para consumirse en ese bloque.
  • Los procedimientos locales pueden declararse dentro de bloques PL/SQL y pueden llamarse desde ese mismo bloque.
  • #PRAGMA AUTONOMOUS transacciones, que permiten a los procedimientos ejecutarse en una transacción privada.
  • CCFLAGS compilación condicional que permite que diferentes secciones de PL/SQL sean compiladas con base en el contexto. Este recurso es particularmente útil para minimizar cualquier código DB2 específico dentro de una base de código PL/SQL compartido.
  • Los proveedores pueden confundir valiosa propiedad intelectual en PL/SQL al empaquetar objetos PL/SQL como cuerpos de paquete usando las funciones DBMS_DDL.WRAP y DBMS_DDL.CREATE_WRAPPED .

Soporte de objeto PL/SQL

PL/SQL puede utilizarse en varios y diferentes objetos que permiten lógica de procedimientos:

  • Funciones escalares incluyendo soporte para lo siguiente:
    • INOUT y OUT parámetros de función
    • Invocación usando asociación de parámetros nombrados
    • Asignación de valores predeterminados a parámetros
    • Aplicación de "purity" de tiempo de ejecución
  • Antes de que se desencadene cada fila o argumento multiacción
  • Antes de que se desencadene cada fila o argumento multiacción
  • Procedimientos incluyendo soporte para lo siguiente:
    • INOUT y OUT parámetros de procedimiento.
    • Invocación usando asociación de parámetros nombrados.
    • Asignación de valores predeterminados a parámetros.
  • Bloques anónimos.
  • Paquetes PL/SQL.

Soporte de paquetes PL/SQL

La mayoría de las aplicaciones PL/SQL en Oracle están contenidas dentro de los así llamados PACKAGE (paquetes). Un paquete PL/SQL — no confundir con un paquete DB2 — es una colección de objetos individuales con la capacidad para diferenciar entre objetos externamente accesibles y aquellos que son apenas asistentes para el uso dentro del paquete. El equivalente ANSI SQL de un paquete es un MODULE. El DB2 ahora ofrece soporte para módulos ANSI SQL y para paquetes PL/SQL. En particular, se ofrecen las siguientes capacidades.

  • CREATE [OR REPLACE] PACKAGE, que define prototipos para rutinas visibles externamente. También define todos los objetos que no sean de procedimiento visibles externamente, como variables y tipos.
  • CREATE [OR REPLACE] PACKAGE BODY, que implementa todas las rutinas públicas y privadas, así como todos los otros objetos privados.
  • Dentro de un paquete o cuerpo de paquete se pueden definir los siguientes objetos:
    • Variables y constantes
    • Tipos de datos
    • Excepciones
    • Funciones escalares
    • Procedimientos
    • Cursores
  • Inicialización de paquete.
  • Sinónimos públicos en los paquetes.

El DB2 proporciona paquetes comunes integrados

Algunas aplicaciones Oracle utilizan los paquetes ofrecidos por el RDBMS. Particularmente, las bibliotecas que proporcionan informes, e-mail o comunicaciones inter-conexiones pueden ser populares. Para facilitar la habilitación de estas aplicaciones en el DB2, los paquetes listados en la Tabla 7 son suministrados por DB2.


Tabla 7. Paquetes integrados suministrados por DB2

PaqueteDescripción
DBMS_OUTPUTProporciona capacidades básicas de informe que se pueden activar o desactivar desde la línea de comandos.
UTL_FILEEs un módulo que permite trabajar con archivos en el servidor DB2.
DBMS_SQLEs un paquete que proporciona una API SQL para ejecutar SQL dinámico adicional a los argumentos EXECUTE y EXECUTE IMMEDIATE existentes.
UTL_MAILEs un módulo que permite enviar notificaciones de e-mail desde SQL.
UTL_SMTPUna API de nivel inferior similar a UTL_MAIL que proporciona integración SMTP.
DBMS_ALERTEs un paquete que cuando se utiliza permite que diferentes sesiones se den señales entre sí.
DBMS_PIPEEs un módulo que permite que las sesiones se envíen datos entre sí.
DBMS_JOBProporciona una API compatible que se integra con el programador de tareas del DB2.
DBMS_LOBEs una API Oracle para procesamiento LOB que hace eco de las funciones DB2 integradas.
DBMS_UTILITYEs una colección de varios procedimientos usados en aplicaciones.
DBMS_DDLFunciones para ofuscar objetos PL/SQL para proteger la IP del proveedor

Hay más paquetes disponibles tal como están en el wiki Oracle Application Enablement to DB2 para LUW. Allí usted también podrá encontrar otras diferentes claves y consejos, así como información de fondo.


Extensiones JDBC específicas Oracle

JDBC es una interfaz de cliente Java estándar. No obstante, hay extensiones que se han agregado al controlador JDBC de Oracle para soportar tipos de datos específicos no estándar.

Para maximizar el nivel de compatibilidad para aplicaciones basadas en tecnología Java, el controlador DB2 JDBC ofrece, entre otras cosas, soporte para procedimientos de llamada con cursor de referencia, VARRAY y ROW .


Soporte para aplicaciones OCI

Muchas aplicaciones Oracle C antiguas usaban la Oracle Client Interface (OCI) para comunicarse con el DBMS. Debido a que DB2 9.7 proporciona un cliente compatible con OCI llamado DB2CI, que soporta más de 150 funciones OCI compatibles desde OCIAttrGet al OCITransRollback. Con Fix Pack 2, aunque OCI7 están disponibles. En muchos casos, es posible simplemente re-enlazar una aplicación OCI a la biblioteca DB2CI, permitiendo a la aplicación OCI trabajar para DB2 virtualmente sin cambios.

  1. Simplemente cree el siguiente archivo include llamado oci.h:
    #include <db2ci.h>.
  2. Asegúrese de que el nuevo oci.h esté antes del oci.h Oracle en el PATH.
  3. Luego reemplace la opción de enlace -loci.dll por -ldb2ci.dll en su makefile y recompile su aplicación.

Soporte de script SQL*Plus usando CLPPlus

Con frecuencia, los scripts DDL e incluso los reportes se escriben usando procesador de línea de comandos SQL*Plus. Para facilitar la transferencia de estos scripts y también las habilidades de los desarrolladores para escribirlas, el DB2 proporciona un procesador de línea de comandos compatible con SQL*Plus, llamado CLPPlus, como se muestra en la Figura 5.


Figura 5. Herramienta CLPPLus compatible con SQL*Plus

La herramienta proporciona las siguientes funcionalidades:

  • Opciones de comando compatibles con SQL*Plus
  • Sustitución de variables
  • Formateo de columna
  • Funciones de informe
  • Variables de control

Habilitación de Oracle Forms

Oracle Forms es un producto de software legado usado para crear sistemas de entrada de datos para la base de datos. Algunos clientes e ISVs tienen cientos de pantallas Oracle Forms que constituyen o hacen parte de una aplicación. IBM se ha asociado con release LLC y con el WonderWorks Group para ofrecer la posibilidad de conversión sin problema de Oracle Forms a Java.

Ambos asociados proporcionan herramientas que traducen formularios Oracle al lenguaje Java de una forma altamente automatizada, eficiente y sostenible, preservando la sensación de la GUI Forms original y sin crear ninguna nueva dependencia sobre productos de terceros.

WonderWorks FusionPaaS puede convertir una aplicación Oracle Fusion Forms clásica, como la que se muestra en la Figura 6, en una aplicación J2EE (como se muestra en la Figura 7) que está 100% habilitada para la web, ejecutándose en un iPad por ejemplo, o en otro dispositivo inteligente y que puede integrarse a aplicaciones Web 2.0 como Google Maps.


Figura 6. Oracle Fusion Forms original


Figura 7. Formulario convertido usando FusionPaaS

Para más información sobre WonderWorks FusionPaaS, consulte el whitepaper del wiki Oracle Application Enablement to DB2 para LUW .


Refinamiento continuo

A medida que más clientes y asociados se habilitan para el DB2, se están agregando solicitudes de recursos y refinamientos al DB2 Fix Pack para mejorar continuamente el nivel de compatibilidad.

DB2 9.7 Fix Pack 1

Fix Pack 1 introduce las siguientes capacidades.

  • CCFLAGS soporte para maximizar la cantidad de código compartido entre Oracle y DB2 para aplicaciones de proveedor.
  • FORALL y BULK COLLECT .
  • El sitio Web SUBSTRB y refinamientos a SUBSTR.
  • Mejoras al manejo de expresiones de operadores booleanos.
  • El cliente DB2CI compatible con la aplicación DB2CI.
  • CREATE OR REPLACE para tipos.
  • Soporte extendido para funciones PL/SQL, como los parámetros INOUT , la capacidad para escribir en tablas desde una función, y más.
  • La asociación con release para permitir aplicaciones Oracle Forms.

DB2 9.7 Fix Pack 2

Fix Pack 2 introduce las siguientes capacidades.

  • NCHAR, NVARCHAR2 y NCLOB soporte, junto con varias funciones NCHAR , como TO_NCHAR y TO_NCLOB.
  • Ofuscación de código PL/SQL usando las funciones DBMS_DDL.WRAP y DBMS_DDL.CREATE_WRAPPED .
  • Invocación de parámetro nombrado y DEFAULTs en las funciones.
  • DEFAULTs en procedimientos que no están al final.
  • BULK COLLECT mejoras de desempeño.

DB2 9.7 Fix Pack 3

Fix Pack 3 introduce las siguientes capacidades.

  • Capacidad para comparar LOBs pequeños para superar limitaciones de tamaño de página.
  • NUMBER mejoras de desempeño.
  • RATIO_TO_REPORT .
  • Mejoras a RAISE_APPLICATION_ERROR.
  • Aplicación de "purity level" en tiempo de ejecución.

DB2 9.7 Fix Pack 4

Fix Pack 4 introduce las siguientes capacidades.

  • Soporte JDBC para ROW y ARRAY OF ROW.
  • Soporte de desencadenante multiacción.
  • Soporte para BEFORE desencadena la actualización de la base de datos.
  • Soporte para LIKE con patrones no constantes.
  • LISTAGG soporte de agregación de cadena de caracteres.
  • Mejoras al soporte de transacciones autónomas.

DB2 9.7 Fix Pack 5

Fix Pack 5 introduce las siguientes capacidades.

  • Soporte JDBC para anidado ROW y ARRAY.
  • Anidado ROW y ARRAY soporte para PL/SQL.
  • Nuevas NVL2, SUBSTR2 y HEXTORAW .
  • Soporte para BOOLEAN en ROW y ARRAY tipos.
  • Mejoras al soporte de bloques anónimos.
  • Soporte para Pro*C.
  • Mejoras de desempeño para comparación de SQL CHAR columnas con VARCHAR2 valores.

DB2 10.1

DB2 10.1 introduce las siguientes capacidades.

  • Hasta un rendimiento de mayor magnitud para la pesada lógica de SQL PL y PL/SQL.
  • Soporte a las declaraciones de tipo locales en un bloque PL/SQL.
  • Soporte a las declaraciones de tipo locales en un bloque PL/SQL.
  • Desencadenadores de nivel de argumento PL/SQL
  • Row and Column level Access Control (RCAC) que facilitan correlacionar FGAC.

Se espera que los Fix Packs posteriores y próximos releases importantes de DB2 proporcionen un mayor nivel de compatibilidad.


Activarse en DB2 es tan fácil como arrastrar y soltar

Dada la cercana alineación del DB2 con PL/SQL y Oracle SQL, ahora no hay necesidad de complejos kits de herramientas para migración. En lugar de ello, usted puede usar la Data Movement Tool de IBM utilizada para simplemente arrastrar y soltar tablas, paquetes o esquemas completos desde Oracle hacia DB2. Sólo se necesitan ajustes mínimos excepcionalmente, para mover una aplicación hacia DB2 o para modificar una aplicación para que la misma fuente pueda operar tanto para DB2 como para Oracle.

Los pasos pueden ser tan simples como.

  1. Establecer las variables de registro necesarias:
    • db2set DB2_COMPATIBILITY_VECTOR=ORA
    • db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
  2. Reiniciar el gestor de base de datos:
    • db2stop
    • db2start
  3. Crear una base de datos compatible con Oracle:
    • db2 create database mydb pagesize 32 K
    • db2 update db cfg for mydb using auto_reval deferred_force
  4. Iniciar la Data Extract Tool y conectarla a las bases de datos Oracle y DB2 como se muestra en la Figura 8.

    Figura 8. Arrastrar y soltar esquema Oracle hacia DB2 usando la Data Extract Tool de IBM


    En cuanto usted se conecta, puede elegir extraer sólo el DDL o el DDL y los datos. Por último, usted tiene dos opciones: implementar directamente ejecutando los scripts generados o continuar con el interactive deploy . Se recomienda la segunda opción para la mayoría de aplicaciones no-triviales.
  5. Mueva los esquemas deseados de Oracle a DB2 usando interactive deploy como se muestra en la Figura 9.

    Figura 9. Arrastrar y soltar esquema Oracle hacia DB2 usando la Data Extract Tool de IBM


    En interactive deploy , usted ve un árbol de navegación que muestra todos los objetos extraídos de la base de datos Oracle. Seleccione todos los objetos y ejecute la opción de menú de despliegue. Como resultado, la herramienta copiará los objetos hacia DB2 y registrará su progreso. Algunos objetos pueden no implementarse exitosamente, y la herramienta le da la opción de trabajar con ellos. Cuando esté seleccionando un objeto, verá el DDL junto con el error DB2 encontrado. Ahora usted puede reparar la definición según se necesite y volver a implementar. La meta es mover interactivamente todos los objetos hacia DB2 excepcionalmente.

Dimensionando la habilitación para DB2

Entonces, ¿qué tan fácil será realmente habilitar su aplicación para DB2 9.7? La respuesta es, desde luego, que depende. IBM tiene una herramienta para descarga llamada MEET DB2. Esta herramienta puede analizar todos los objetos de su base de datos Oracle y sopesarlos. Esta produce un informe de lo que funcionará inmediatamente y de dónde habrá que hacer ajustes. Para tener una idea rápida, usted puede descargar MEET DB2 y probarla usted mismo(a). Si lo prefiere, su equipo IBM, al que puede contactar en askdata@ca.ibm.com, puede ayudarle rápidamente a hacer una evaluación de compatibilidad de su base de datos Oracle actual.

La Figura 10 muestra un ejemplo de resultado de la herramienta MEET DB2.


Figura 10. Herramienta de informe MEET DB2 para evaluación

En el informe de ejemplo, la herramienta indica que 98% de los argumentos PL/SQL son transferibles de inmediato al DB2. También desglosa los argumentos por tipo de objeto y muestra cuántos de cada tipo de objeto requieren atención durante una migración.

Desde el DB2 9.7, cientos de aplicaciones totalizando millones of líneas de código PL/SQL se han analizado en detalle con un promedio de tasa de transferencia inmediata de 90 a 100 por ciento.

La Figura 11 muestra estadísticas que se ejecutaron contra el Fix Pack 4.


Figura 11. Mediana de los más de 98 por ciento de los argumentos que se soportan

Un ejemplo aleatorio de 38 aplicaciones generó más de 2 millones de líneas de código. Entre el 83 y el 99,9 por ciento de las líneas de código eran inmediatamente transferibles a DB2.


Arquitectura

El enfoque de DB2 para conversión de aplicaciones es fundamentalmente diferente del de la conversión clásica. La mayoría de los proveedores ofrecen herramientas que traducen desde el idioma de origen al idioma de destino offline y con asistencia manual. El resultado es un código muy intrincado que es muy difícil de mantener. Pocos proveedores añaden capas de interceptación que emulan dinámicamente el idioma de origen en el idioma de destino. Por supuesto, las emulaciones son lentas por su diseño, especialmente cuando se intenta lograr la semántica correcta.

Para DB2, la compatibilidad está profundamente incorporada en todas las capas de su motor, que se ocupa de la semántica y de la sintaxis. En lugar de trabajar alrededor de las limitaciones, DB2 se ha extendido nativamente para dar soporte a los recursos necesarios. El diagrama de arquitectura en la Figura 12 destaca las áreas de DB2 que se cambiaron de manera importante para dar soporte a Oracle SQL y al dialecto PL/SQL.


Figura 12. Arquitectura del Compilador de DB2 y motor de Runtime

Las secciones para analizar y reescribir SQL en el compilador de SQL, analizar PL/SQL en el compilador de PL, el tiempo de ejecución de PL, y el tiempo de ejecución de SQL se ampliaron de manera significativa o se añadieron para acomodar a los dialectos Oracle.


Preguntas frecuentes

¿Está esta tecnología preparada para las aplicaciones críticas?

Uno de los mayores bancos de EE.UU. ha confiado su sistema de banca online a esta tecnología. Si ha verificado su cuenta de Banco de EE.UU. hoy, probablemente ha impulsado la ejecución de Paquetes de PL/SQL en DB2

¿Qué versión de Oracle soporta el DB2 10?

La cobertura ofrecida por los dialectos PL/SQL se basa estrictamente en lo que ha sido estando usado por las aplicaciones. Hay recursos que se han introducido en versiones tan recientes como el Oracle 11g, que se soportan, mientras que algunas construcciones disponibles en Oracle 8i no son soportadas. En un estudio de 38 solicitudes totalizando más de 2.048.941 líneas, entre el 83 y el 99,9 por ciento del código se trasladó a DB2 9.7.4 sin cambio, con una mediana superior al 98%. Muchos de los restantes ajustes pueden automatizarse, ya se han abordado en DB2 10 o son repetitivos.

¿Qué tan rápido se ejecutará mi aplicación Oracle en DB2?

¡Esa es la pregunta del millón! Desafortunadamente, los términos de licencia de Oracle prohíben la publicación de resultados de punto de comparación sin consentimiento previo por escrito. Por su diseño, y calidad confirmada por referencias de aseguramiento de la calidad, una aplicación escrita para PL/SQL en DB2 es tan rápida como una escrita para SQL PL en DB2. Los proveedores que han pasado por el proceso de habilitación ya están, generalmente, gratamente complacidos.

¿Cuánto trabajo fue necesario para proporcionar estos recursos?

No necesariamente tanto como uno pensaría. Algo de trabajo inicial, como CONNECT BY y NUMBER, se efectuó para el DB2 9.5 de manera táctica. Seriamente, el esfuerzo en DB2 9.7 se completó en menos de 18 meses. Desde entonces, continuamos a mejorar gradualmente el nivel de compatibilidad a medida que los clientes lo necesitan.

¿Cuáles son las aplicaciones comunes de habilitar de Oracle para DB2?

Obviamente, la compatibilidad DB2 no es 100%, así que probablemente habrá algunos tropiezos cuando usted convierta inicialmente hacia Db2. Muchos de estos retos son triviales y fáciles de arreglar. Por ejemplo, DB2 actualmente no da soporte a PIPELINED funciones. Así, usted necesita sustituir los PIPE argumentos con asignaciones de variables para llenar el resultado de la función.

Cuáles ediciones DB2 soportan recursos de compatibilidad SQL Oracle?

Todos los recursos descritos anteriormente reciben soporte de todas las plataformas que DB2 soporta para Linux, UNIX y Windows. Esto incluye Windows, Linux (en Intel, Power y el sistema principal), HP y Sun Solaris. Se da soporte a todas las ediciones de DB2. Existen algunas restricciones técnicas al utilizar funciones PL/SQL y desencadenadores en DPF.

¿Tiene DB2 Express-C soporte para PL/SQL?

¡Sí! Usted puede escapar de las restricciones de tamaño de la base de datos de Oracle XE migrando a DB2 9.7.5 Express C o DB2 10 Express C. Y lo mejor de todo: puede intentarlo en la nube (consulte la sección Recursos .)

¿Cuál fue el recurso más difícil de implementar?

Por mucho, la semántica de VARCHAR2 es la más difícil de implementar. La semántica "trailing blanks matter" y "NULL is empty string" continúan siendo un reto.


Conclusión

Gracias a su soporte SQL multidialecto, el nuevo DB2 permite una fácil habilitación de aplicaciones Oracle para DB2. Los proveedores de aplicaciones empaquetadas pueden ofrecer sus aplicaciones para Oracle y DB2 a costos adicionales mínimos. Los clientes pueden escoger libremente el proveedor que ofrezca la tecnología que ellos necesitan sin estar limitados a elecciones pasadas.

Para probar estos recursos, descargue la versión de prueba de DB2 10 (consulte la sección Recursos .)


Recursos

Aprender

Obtener los productos y tecnologías

Comentar

Sobre el autor

Serge Rielau photo

Serge Rielau ha trabajado en DB2 para compilador SQL para Linux, UNIX y Windows por 14 años. Actualmente, es arquitecto SQL para DB2 para Linux, UNIX y Windows. Es arquitecto SQL responsable por la compatibilidad en DB2 10. Serge Riealau puede ser encontrado en SQLTips4DB2.com.

Ayuda para reportar abusos

Reportar abusos

Gracias. Esta entrada ha sido marcada para la atención de un moderador.


Ayuda para reportar abusos

Reportar abusos

Falló el envío del reporte de abusos. Por favor intente después.


developerWorks: Ingresar


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. Cierta información de su perfil será mostrada públicamente, pero usted puede editar la información en cualquier momento. Su nombre, apellido (a menos que usted elija ocultarlo), y nombre de usuario acompañarán el contenido que usted publica.

Elija su nombre de usuario

La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. Cierta información de su perfil de developerWorks será mostrada públicamente, pero usted puede editar la información en cualquier momento. Su nombre, apellido (a menos que usted elija ocultarlo) y nombre de usuario acompañarán el contenido que usted publique.

(Debe ser entre 3 – 31 caracteres.)


Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Califique este artículo

Comentario

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Information mgmt
ArticleID=454177
ArticleTitle=DB2 10: Ejecute aplicaciones Oracle en DB2 10 para Linux, UNIX y Windows
publish-date=06182012