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.
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 pendiente | Comportamiento | Nueva transacción |
|---|---|---|
| El lector | No bloquea | El lector |
| El lector | No bloquea | al escritor |
| al escritor | No bloquea | El lector |
| al escritor | Bloques | al 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 pendiente | Comportamiento | Nueva transacción |
|---|---|---|
| El lector | No bloquea | El lector |
| El lector | Rara vez bloquea | al escritor |
| al escritor | Bloques | El lector |
| al escritor | Bloques | al 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 pendiente | Comportamiento | Nueva transacción |
|---|---|---|
| El lector | No bloquea | El lector |
| El lector | no bloquea | al escritor |
| al escritor | no bloquea | el lector |
| al escritor | bloques | al 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.
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 datos | Descripción |
|---|---|
| NUMBER | Se ha agregado soporte de NUMBER y NUMBER(p [, s]) con base en DECFLOAT (con aceleración de hardware de potencia) y DECIMAL. |
| VARCHAR2 | El comportamiento de tipo VARCHAR2 incluye cadenas de caracteres vacías interpretadas como NULL y seguimiento de compaginación sensible en blanco. |
| NCHAR, NVARCHAR2 y NCLOB | Los tipos National Character proporcionan soporte de cadena de caracteres de doble byte para bases de datos Unicode. |
| Oracle DATE | Una 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). |
| BOOLEAN | Este tipo puede utilizarse en lógica de procedimientos, variables y parámetros para rutinas. |
| VARRAY | El soporte de ARRAY en los procedimientos ha sido extendido para soportar métodos y sintaxis de estilo VARRAY. |
| INDEX BY | Además de los array regulares, DB2 también soporta arrays asociativos. |
| ROW TYPE | Este tipo compuesto puede utilizarse en variables y parámetros y como un elemento para arrays y arrays asociativos. |
| Tipo Ref Cursor | Los 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
| Recurso | Descripción |
|---|---|
CONNECT BY recursividad | El 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 syntax | Esta 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 tabla | Una tabla de fila individual y columna individual utilizada ubicuamente en aplicaciones Oracle como un elemento ficticio. |
ROWNUM pseudocolumna | Esta pseudocolumna se usa típicamente para limitar el número de filas retornadas y para enumerar filas en un conjunto de resultados. |
ROWID pseudocolumna | Los 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 SQL | En 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 tabla | Este argumento elimina rápidamente el contenido de toda una tabla sin disparar desencadenantes. |
CREATE OR REPLACE argumentos de objeto | Esta 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 nombre | DB2 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.
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
¿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 elsewhilebucles:=asignaciones- variables y constantes locales
#PRAGMA EXCEPTIONy manejo de excepciones- Varias formas de bucles
for(rango, cursor y consulta) %TYPEy%ROWTYPEanclaje 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 AUTONOMOUStransacciones, que permiten a los procedimientos ejecutarse en una transacción privada.CCFLAGScompilació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.WRAPyDBMS_DDL.CREATE_WRAPPED.
PL/SQL puede utilizarse en varios y diferentes objetos que permiten lógica de procedimientos:
- Funciones escalares incluyendo soporte para lo siguiente:
INOUTyOUTpará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:
INOUTyOUTpará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.
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
| Paquete | Descripción |
|---|---|
| DBMS_OUTPUT | Proporciona capacidades básicas de informe que se pueden activar o desactivar desde la línea de comandos. |
| UTL_FILE | Es un módulo que permite trabajar con archivos en el servidor DB2. |
| DBMS_SQL | Es un paquete que proporciona una API SQL para ejecutar SQL dinámico adicional a los argumentos EXECUTE y
EXECUTE IMMEDIATE existentes. |
| UTL_MAIL | Es un módulo que permite enviar notificaciones de e-mail desde SQL. |
| UTL_SMTP | Una API de nivel inferior similar a UTL_MAIL que proporciona integración SMTP. |
| DBMS_ALERT | Es un paquete que cuando se utiliza permite que diferentes sesiones se den señales entre sí. |
| DBMS_PIPE | Es un módulo que permite que las sesiones se envíen datos entre sí. |
| DBMS_JOB | Proporciona una API compatible que se integra con el programador de tareas del DB2. |
| DBMS_LOB | Es una API Oracle para procesamiento LOB que hace eco de las funciones DB2 integradas. |
| DBMS_UTILITY | Es una colección de varios procedimientos usados en aplicaciones. |
| DBMS_DDL | Funciones 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
.
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.
- Simplemente cree el siguiente archivo include llamado oci.h:
#include <db2ci.h>. - Asegúrese de que el nuevo oci.h esté antes del oci.h Oracle en el PATH.
- 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
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 .
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.
Fix Pack 1 introduce las siguientes capacidades.
CCFLAGSsoporte para maximizar la cantidad de código compartido entre Oracle y DB2 para aplicaciones de proveedor.FORALLyBULK COLLECT.- El sitio Web
SUBSTRBy refinamientos aSUBSTR. - Mejoras al manejo de expresiones de operadores booleanos.
- El cliente DB2CI compatible con la aplicación DB2CI.
CREATE OR REPLACEpara 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.
Fix Pack 2 introduce las siguientes capacidades.
NCHAR,NVARCHAR2yNCLOBsoporte, junto con varias funcionesNCHAR, comoTO_NCHARyTO_NCLOB.- Ofuscación de código PL/SQL usando las funciones
DBMS_DDL.WRAPyDBMS_DDL.CREATE_WRAPPED. - Invocación de parámetro nombrado y DEFAULTs en las funciones.
DEFAULTs en procedimientos que no están al final.BULK COLLECTmejoras de desempeño.
Fix Pack 3 introduce las siguientes capacidades.
- Capacidad para comparar LOBs pequeños para superar limitaciones de tamaño de página.
NUMBERmejoras de desempeño.RATIO_TO_REPORT.- Mejoras a
RAISE_APPLICATION_ERROR. - Aplicación de "purity level" en tiempo de ejecución.
Fix Pack 4 introduce las siguientes capacidades.
- Soporte JDBC para
ROWyARRAY OF ROW. - Soporte de desencadenante multiacción.
- Soporte para
BEFOREdesencadena la actualización de la base de datos. - Soporte para
LIKEcon patrones no constantes. LISTAGGsoporte de agregación de cadena de caracteres.- Mejoras al soporte de transacciones autónomas.
Fix Pack 5 introduce las siguientes capacidades.
- Soporte JDBC para anidado
ROWyARRAY. - Anidado
ROWyARRAYsoporte para PL/SQL. - Nuevas
NVL2,SUBSTR2yHEXTORAW. - Soporte para
BOOLEANenROWyARRAYtipos. - Mejoras al soporte de bloques anónimos.
- Soporte para Pro*C.
- Mejoras de desempeño para comparación de SQL
CHARcolumnas conVARCHAR2valores.
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.
- Establecer las variables de registro necesarias:
db2set DB2_COMPATIBILITY_VECTOR=ORAdb2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
- Reiniciar el gestor de base de datos:
db2stopdb2start
- Crear una base de datos compatible con Oracle:
db2 create database mydb pagesize 32 Kdb2 update db cfg for mydb using auto_reval deferred_force
- 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. - 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.
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.
¿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.
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 .)
Aprender
- Haga gratis, a su propio ritmo el Taller de DB2 para Profesionales Oracle para saber más sobre este tema.
- Visite el IBM DB2 para Profesionales de Bases de Datos, regístrese para este e-kit y aprenda cuán fácil es capacitarse y certificarse en DB2 para Linux, UNIX y Windows. Amplíe su portafolio de habilidades, o extienda su soporte a vendedores DBMS para incluir DB2.
- El sitio Web Oracle Application Enablement to DB2 para LUW es la fuente principal para dar soporte a clientes y asociados de negocios IBM que habilitan sus aplicaciones Oracle para DB2 para Linux, UNIX y Windows.
- Consulte la sección DB2 10 launchpad para tener una visión general del valor del DB2.
- Visite el MEET DB2 y analice su base de datos Oracle para estimar el nivel de compatibilidad con DB2.
- Visite Converse con el Laboratorio para ver y escuchar videos sobre temas como una profundización técnica en DB2 9.7 y una versión webcast de este artículo.
- Asista al vídeo "Moving to DB2 is Easy" para una demostración que da una visión general de habilitación de aplicaciones para DB2.
- " DB2 9.7 CLPPlus" demuestra el uso del shell CLPPlus compatible con SQL*Plus.
- Vea " DB2 9.7: Soporte PL/SQL Nativo," que presenta varios recursos PL/SQL con soporte de DB2.
- Visite el DB2 pureScale. Con DB2 pureScale, usted puede escalar y proporcionar disponibilidad continua para sus aplicaciones OLTP.
- Aprenda más sobre Administración de la Información en la zona developerWorks Information Management. Encuentre documentación técnica, artículos "cómo hacer", educación, descargas, información de productos y más.
- Permanezca actualizado(a) con los Eventos técnicos y webcasts de developerWorks enfocados en una variedad de productos IBM y de temas de la industria TI.
- Asista a presentaciones breves developerWorks ¡en vivo!, para actualizarse rápidamente sobre productos y herramientas IBM así como sobre las tendencias de la industria de TI.
- Siga a developerWorks en Twitter.
- Vea Demostraciones on demand de developerWorks que van desde demostraciones sobre instalación y configuración de productos para principiantes, hasta funcionalidades avanzadas pera desarrolladores experimentados.
Obtener los productos y tecnologías
- Pruebe IBM DB2 Express-C 9.7.5 en modo compatibilidad y en la nube.
Utilizando la nube, usted fácilmente puede probar la compatibilidad de DB2 con Oracle sin necesidad de instalar DB2 localmente.
- Descargue una versión de prueba gratuita de DB2 9.7 para Linux, UNIX y Windows.
- Descargas DB2 Express-C 9.7, una versión gratuita del servidor de base de datos DB2 Express para la comunidad.
- Construya su próximo proyecto de desarrollo con software de prueba IBM, disponible para descarga directamente de developerWorks.
-
Evalúe productos de IBM de la manera que le convenga: descargue una evaluación de producto, pruebe un producto online, úselo en un entorno de nube o pase algunas horas en la SOA Sandbox aprendiendo a implementar la Arquitectura Orientada a Servicios con eficiencia.
Comentar
- Participar en el foro de debate.
- Solicite una evaluación de su proyecto de habilitación de Oracle para DB2 a askdata@ca.ibm.com.
- Participe en la Comunidad My developerWorks. Conéctese con otros usuarios developerWorks mientras explora los blogs, foros, grupos y wikis dirigidos a desarrolladores.
- Visite el blog SQLTips4DB2 de Serge Riealau.
