viernes 13 de mayo de 2011

DB2 Express-C 9.7.4

Se ha liberado la versión 9.7.4 de DB2 Express-C

Las novedades aunque no son muchas con respecto a la versión 9.7.2, son, a mi parecer, interesantes, y lo aún más que haya desarrollado sobre DB2.

La primera son los triggers compuestos (compound triggrs). Ahora, en lugar de crearse un trigger para cada operación (INSERT, UPDATE y DELETE), se pueden controlar todas las operaciones sobre un sólo trigger. Aunque no marca una diferencia espectacular, lo hace realmente más comodo.


La segunda novedad es que se pueden usar campos de una tabla en la parte derecha de la operación LIKE, cuando hasta ahora sólo se podían usar constantes. Este cambio si que me parece realmente potente, permitiendo hacer joins con patrones, o, aunque de forma un tanto rudimientaria, usar una lista constantes, lo que nos ahorra escribir muchas condiciones en determinadas búsquedas.


Para buscar las entradas que empiecen por a, b, c o d Se puede escribir:

SELECT count(*) from A,table(values ('a%'),('b%'),('c%'),('d%'),('e%')) as t(a) where A.a like t.a;

o

with t(a) as(values ('a%'),('b%'),('c%'),('d%'),('e%'))
SELECT count(*) from A,t where A.a like t.a;


en lugar de:

SELECT count(*) from A where A.a like 'a%' or A.a like 'b%' or A.a like 'c%' or A.a like 'd%' or A.a like 'e%';

Por último aporta mejoras en el uso de Text Search.

2 comentarios:

  1. Tenemos el siguiente problema en DB2 Express.

    Identificamos que el backup diario programado de una base de datos no se
    estaba obteniendo porque el tablespace "SYSTOOLSPACE" estaba en estado
    OFFLINE.

    Para hacer la corrección de este tablespace se ejecutaron los siguientes
    comandos

    ALTER TABLESPACE SWITCH ONLINE
    CREATE TEMPORARY TABLESPACE MYTEMP MANAGED BY AUTOMATIC STORAGE
    CREATE TEMPORARY TABLESPACE TEMPSPACE2 MANAGED BY SYSTEM USING ('d')

    Estos no ayudaron por lo cual según la documentación de IBM el comando
    RESTART DATABASE era la solución mas efectiva

    RESTART DATABASE

    A partir de ese momento la base de datos no se puede conectar y nos sale
    este error

    SQL0980C

    A disk error occurred. Subsequent SQL statements cannot be processed.
    Explanation

    A disk error occurred that prevented successful execution of the current
    and subsequent SQL statements. The application program is not permitted to
    issue additional SQL statements. For example, a recovery routine associated
    with the application program cannot issue additional SQL statements. The
    database is marked as needing recovery and all applications using the
    database are prevented from accessing the database.

    The statement cannot be processed.
    User response

    Record all error information from the SQLCA, if possible. Terminate all
    applications using the database. Determine if the error is a hardware
    error. Restart the database. If recovery is not possible, restore the
    database from a backup copy.

    If installing the sample database, drop it and install the sample database
    again.

    sqlcode: -980

    sqlstate: 58005


    Haciendo las revisiones respectivas no se trata de problemas de disco,
    según la documentación pueden ser archivos de la base de datos posiblemente
    corruptos



    te comento que ahora no es posible conectar con la base de datos luego de aplicado los comandos mencionados

    ResponderSuprimir
  2. Hola Elmer,
    sin saber exactamente lo que te pasa, pues para eso tendría que mirar el db2diag.log, puedo decirte, lo primero, que el comando para devolver el tablespace a su estado original lo tienes mal, sería:

    ALTER TABLESPACE SYSTOOLSPACE SWITCH ONLINE

    segundo, no es necesario crear un tablespace temporal, porque el que está offline no es el temporal.

    tercero, creo (sin estar completamente seguro) que no te funciona porque has lanzado el restart con un tablespace offline. Para solucionarlo tienes que dejar el tablespace en drop pending. El problema de esto es que perderás todos los datos de este tablespace. En principio aquí sólo deberían estar las planificaciones del automatic maintenance, a no ser que se crearan tablas de aplicación en él.
    El comando sería:
    RESTART DATABASE DROP PENDING TABLESPACES (SYSTOOLSPACE)

    De todas formas, para más seguridad, envíame el fichero db2diag.log, y te cuento lo que veo.

    ResponderSuprimir