SSIS: Solució a dos errors sense motiu aparent quan inserim dades en MySól

 

 

Per la raó que sigui potser haguem de desenvolupar un paquet de Microsoft Integration Services que ens mogui dades de qualsevol origen a una taula que es troba en una base de dades MySQL.

La primera intenció serà fer-ho mitjançant una ADO.NET Destination i el provider de MySQL per a la connexió. Si ho fem així per inserir les dades directament, en crear el destí, seleccionar la connexió i després seleccionem la taula apareixerà un error com el següent al comprovar tot amb la vista prèvia o en intentar fer les assignacions.

 

 

Aquest error es deu a la manera de compatibilitat sql ansi de la base de dades mysql on intentem carregar les dades. Per solucionar hem de connectar al servidor de MySQL i canviar la compatibilitat ansi de sql de la base de dades *:

 

 

TOCA:~# mysql -u root -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 77

Server version: 5.0.51a-24+lenny3-log (Debian)

 

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 

mysql> select @@global.sql_mode;

+-------------------+

| @@global.sql_mode |

+-------------------+

| |

+-------------------+

1 row in set (0.00 sec)

 

mysql> set global sql_mode='ANSI';

Query OK, 0 rows affected (0.00 sec)

 

mysql> select @@global.sql_mode;

+-------------------------------------------------------------+

| @@global.sql_mode |

+-------------------------------------------------------------+

| REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI |

+-------------------------------------------------------------+

1 row in set (0.00 sec)

 

mysql> exit

 

 

Si tornem a provar ja podrem tenir una vista prèvia de la taula o editar les assignacions entre columnes però ens trobarem un altre error en executar el paquet:

 

[ADO NET Destination [843]] Error: Excepció durant la inserció de dades.  El missatge retornat pel proveïdor és: Unknown column 'p1' in 'field list' "

El driver té un problema i no ens deixa treballar bé amb paràmetres (que és com es construeix les insercions de registre en el destino) així que hem de fer otro workaround para solucionar este problema: treballar amb ADO.NET Destination en destino però amb 1 origen ODBC en la connexió. Això unit al tema de la modificació del sql_mode de la destinació MySQL ens permetrà fer la càrrega correctament.

 

 


 

* Cal destacar que la compatibilitat la podem canviar a nivell global com en l'exemple o només a nivell de session (amb el que hauríem d'afegir l'execució d'un comandament en primera instància per modificar el valor de @ @ SESSION.sql_mode). Más info aquí. Més info aquí.

 

 

 

Contingut relacionat

  • La instal.lació consta dels paquets:

  • A continuació deixo un petit post de com muntar un sistema automàtic de notificació via mail que ens indiqui quin és l'estat de la nostra base de dades. Per exemple el podem programar una mica abans de començar la nostra jornada laboral i abans de marxar o mentre estem de vacances (jaja. ..). Aquest exemple és sobre un Mysql 5.X corrent a Debian. Passos que segueix...

     

  • En MySQL esisteix un paràmetre que habilita el registre de les consultes que triguen més de x segons a executar-se, les anomenades Slow Queries. Bàsicament el que fa és ficar-les en un fitxer de log per després consultar-ho amb mysqldumpslow. Aquest mecanisme ens pot ser útil per millorar el rendiment global de la base de dades si reduïm el valor de forma progressiva per als temps d'execució "no admesos" abans de declarar una consulta com "lenta" o slow query...

     

  • Amb MySQL, quan s'eliminen registres d'una taula, l'espai no es reassignació automàticament. Queda com a espai buit que es realitzen noves insercions es va aprofitant.

    El problema d'això és que si en una taula es realitzen moltes operacions de DELETE, l'espai físic de la taula va quedant cada vegada més fragmentat i el rendiment es redueix.

    En els motors MyISAM i InnoDB de MySQL, disposem de la comanda OPTIMITZAR TABLE per poder realitzar sobre qualsevol taula una optimització que, entre altres coses, fa una defragmentació automàtica de la taula.

    És molt recomanable utilitzar aquesta comanda regularment sobretot sobre les taules que reben més sentències d'eliminació de registres.

    Com a precaució, tenir en compte que durant la seva execució, com és lògic, la taula queda bloquejada. Cal acordar quan ho anem a utilitzar amb taules grans i amb molt moviment.

    La sintaxi és supersimple:

     

  • En la Universitat Oberta de Catalunya es pot cursar el Màster de 'Programari Lliure' sobre sofware de Lliure Distribució. Per estar d'acord amb la filosofia lligada al desenvolupament d'aquest tipus de sofware la UOC ha decidit anar publicant els materials docents de les assignatures que es van cursant en aquest Màster.
    Una d'aquestes publicacions són els apunts de l'assignatura Bases de Dades, on s'expliquen els conceptes més importants sobre bases de dades, evolució històrica, el model Relacional de Bases de Dades, el llenguatge de consulta SQL i disseny de models de bases de dades. Després es pot aplicar aquesta teoria sobre MySQL i PostgreSQL, dues dels sistemes gestors de base de dades de lliure distribució més coneguts, dels quals s'aporten característiques, detallis funcionament i nocions d'administració.
    Aquest és el temari que abasten aquestes anotacions, extret de l'índex del mateix document. Seguint l'enllaç del títol de cada mòdul es pot descarregar en format pdf: