Truncate tabla sin hacer validacion de foreign constraints

Hola Mundo:

¿Cómo les va? Hace tiempo que no pasaba por aquí, porque he estado ocupado desarrollando
productos propios.

El tema de hoy hace referencia a un problema típico de bases de datos, específicamente cuando se quiere hacer un truncate a una tabla que es referenciada desde otras. Al existir restricciones no se puede hacer ni un truncate, ni drop ni delete, aun así cuando la tabla que la referencia está vacía.

Para este caso hay dos opciones:
1) Eliminar los constraint, hacer la operación y luego volver a crear los constraint
2) Desactivar la operación de comprobación de constraint, hacer la operación y volver activarlo.

La opción 2 es una buena medida, que debe ser usada solo en ambiente de laboratorio. El código es el  siguiente

SET FOREIGN_KEY_CHECKS = 0; 
TRUNCATE table1; 
TRUNCATE table2; 
SET FOREIGN_KEY_CHECKS = 1; 

Y eso es todo

“No tiene los permisos necesarios para acceder a esta página” en WordPress

¡Esta migración de WordPress me ha sacado canas verdes! Esto se está volviendo más o menos complicado, pero no me las ganará.

Cuando levanté la DB, tuve muchos problemas con la tabla de wp_options así que decidí a copiar tabla por tabla, para ver si habían otras que me daban problemas.

En la misma base de datos había levantado el respaldo, tenía una instalación limpia de WordPress. Hice un volcado de tablas, una a una hasta que lo hice con la tabla wp_usermeta.

Como tenía dos instalaciones en la misma base de datos, lo más lógico es que tuvieran preifijos distintos para poder distinguirlas entre ellas.

Cuando realicé el volcado de la tabla, después al entrar al portal para probar los nombres de usuario vi el mensaje de error:

No tiene los permisos necesarios para acceder a esta página

La tabla wp_usermeta guarda el prefijo de las tablas de la instalación de WordPress, así que con esta consulta reemplacé el antiguo prefijo por el nuevo prefijo que estaba almacenado en la tabla
UPDATE `newprefix_usermeta` SET `meta_key` = REPLACE(`meta_key`, 'wp_', 'newprefix_');
Donde newprefix es el nuevo prefijo de la tabla y wp_ es el antiguo prefijo.

Con esto ya pude entrar al portal y a la administracion.

🙂

Error: Data truncation: Data too long for column en Spoon

No es novedad que me encuentro traspasando datos con Pentaho Data Integrator. Realmente es una excelente herramienta para el precio que tiene.

Me encuentro copiando datos de un MySQL a otro MySQL a través del asistente y todo iba bien, hasta que al momento de iniciar la transformación me da el siguiente mensaje:

Data truncation: Data too long for column

Este error se da cuando crea la tabla automaticamente, no lo crea con el tamaño de datos correcto. Revisé la tabla de origen y la columna era un varchar(255) y la de destino era una varchar(85).
La solución fue modificiar la tabla de destino y asignarle un mayor tamaño al tipo de datos varchar de la columna de destino.

 

Error «Unable to get value ‘Date’ from database resultset» en Spoon

Tal como les comenté en el post anterior, estoy trabajando moviendo unos datos usando la herramienta Pentahoo Data Integrator.

Hace ya varios días que venía peleando con una migración, específicamente con una columna que tiene el tipo de datos datetime.

Específicamente el mensaje que error que arroja es este:

Unable to get value ‘Date’ from database resultset

Luego de eso viene un montón de mensajes referentes al driver de conexión, astros, citas del Corán, de la Biblia y cualquier otro mensaje ilegible.

Revisando en los foros de la herramienta, dicen que es un problema de MySQL ser permisivo con los valores que se le ingresan. Para lidiar con esto, hay que ir a las propiedades de la conexión a la base de datos, ir a las opciones y agregar el parámetro zeroDateTimeBehavior y asiganarle el valor convertToNull.

Opciones de la conexion
Opciones de la conexion

Copiar tablas completas con Pentaho Data Integrator

¡Que taaal! Tiki tiki tí Publicando este artículo bien diciochero jeje.

Hoy les contaré sobre como realizar copias de tablas usando Pentaho Data Integrator, que es una herramienta gratuita, multiplataforma y de código abierto para construir paquetes ETL.

Es bastante potente y no tiene mucho que envidiar a otras que son de paga, por ejemplo, SQL Server Integration Services e Informatica.

Tiene bastantes asistentes que ayudan con las tareas y en este caso usaremos un asistente.

  1. Crear la conexión a la base de datos de origen y  de destino
  2. Ir a Tools -> Wizard -> Copy Table
  3. Seleccionar la conexión base de datos de origen y de destino

    Conexion de Origen y de Destino
    Conexion de Origen y de Destino
  4. Luego se hace la selección de la tabla que se quiere copiar

    Seleccion de Tabla
    Seleccion de Tabla
  5. Aunque ya se ha definido la conexión de destinoi (DB, Usuario, Password, Host) queda configurar el esquema, por lo menos para este caso que el RDBMS es MySQL, es por esto que hay que configurar el step
    Editar el step
    Editar el step

    Además, hay que ejecutar la consulta de creación de tabla. Para esto, hacer click en el botón SQL y ejecutar la sentencia que aparece ahí. Si esto no se hace, arrojará un error de que no se encuentra la tabla y la tarea no terminará de forma satisfactoria.

    SQL Query
    SQL Query
  6. Una vez que está todo configurado, se procede a ejecutar el flujo

    Ejecutar Proceso
    Ejecutar Proceso
  7. Se abrirá la ventana de configuración de la ejecución. En este caso, nada más se hace click en launch

    Ejecutar Proceso
    Ejecutar Proceso

Si todo se ha configurado bien, el proceso durará según el tamaño de la tabla y si es una base de datos externa, de la conexión con el servidor.

Espero que les sirva!

Acceso remoto a MySQL de Bluehost

Tener acceso remoto a una base de datos MySQL de un hosting compartido, nos dará mas posibilidades de administración si logramos configurar la conexión.  Si estás pensando que phpMyAdmin es lo único  que existe, estás muy equivocado.  Existen muchas herramientas, entre ellas MySQL Workbench, que apoyan las tareas de administración.

Por ejemplo, si necesitamos cargar un respaldo de 400MB y el límite de phpMyAdmin es de solo 50 MB, este tipo de herramientas nos ayudará a concretar esta tarea.

Actualmente estoy usando Bluehost para realizar una prueba de un portal y para habilitar el acceso remoto a MySQL hice lo siguiente:

acceso_remoto_mysql_bluehost
En el cPanel ir a la opción Remote MySQL dentro del menú Database Tools
Después agregas las IP que requieren acceder a las bases de datos
Después agregas las IP que requieren acceder a las bases de datos

Y listo. Intenten conectarse desde algún proveedor ODBC o alguna herramienta de administración.

¡Chau!

 

Desde SQL Server 2012 RC0 hacia MySQL

¡Buenos días! En este post, explicaré paso a paso como enviar datos (texto plano) desde SQL Server 2012 RC0 hacia MySQL.

Entorno:

Máquina virtual Windows Server 2008 R2 SP1 corriendo sobre Windows Server 2008 R2 con Hyper-V, en la que está instalado Microsoft SQL Server 2012 RC0 y  MySQL 5.5 Community Edition.

La máquina virtual cuenta con 2048 MB de memoria física.

Datos

Como era la primera prueba, solo usé una tabla con 10 registros.

Tabla "Persona" en SQL Server

La información de la tabla es la siguiente:

Descripcion tabla "Persona" que está en SQL Server

Driver ODBC de MySQL 

Aquí hay un punto muy importante en el que perdí mucho tiempo ayer. En el sitio de descargas de MySQL (http://www.mysql.com/downloads/connector/odbc/) , existen versiones para 32 y para 64 bits. En mi caso, instalé el que correspondía a mi arquitectura y no me funcionó. Windows me lo reconocía, pero al momento de crear la conexión en SQL Server Data Tools, va a arrojar y no va a funcionar.  Curiosamente todo se solucionó cuando instalé una versión de 32 bits.

De cualquier manera, espero que te resulte de cualquier modo.

Modelo de Datos

Es muy importante tenerlo claro, ya que los datos se deben organizar de la misma forma en el destino de la operación. En este caso, el modelo que estaba en SQL Server debe respetarse en MySQL.

En algunos tutoriales en Internet mencionan crear las tablas en el destino antes de cargar los datos. En otros, muestran que se puede hacer desde SQL Server Data Tools.

En este caso, la creé antes de cargar los datos:

Descripcion tabla Persona en MySQL

En este ejemplo, es solo una tabla. No me gustaría que quedara un desastre cuando son hartas tablas.

¡Manos a la obra!

Antes de comenzar, hay que configurar la conexion a la base de datos desde Inicio -> Herramientas Administrativas -> Origenes de Datos (ODBC)

Agregar uno nuevo:

Nuevo origen de datos MySQL

Al apretar el botón de finalizar (o finish), aparecerá un formulario solicitando los datos de la conexión a la base de datos de MySQL:

Configurar Conexion

Hay que llenarlos con los datos propios de cada equipo. Yo puse los míos (obvio) y tu tienes que poner los tuyos.  Es importante que rellenes todos los campos, porque al momento de presionar el botón de «test» debe aparecer algo así:

Conexion OK

Al presionar «OK», volverá a la ventana de configuración de conexión a MySQL. Apretar «Ok» nuevamente. Esto cerrará la ventana y quedará la ventana de ODBC abierta. Verificar que aparezca la nueva conexión creada y presionar «Ok» para cerrar la ventana.

Ir a Inicio-> Todos los Programas -> SQL Server 2012 RC0 -> SQL Server Data Tools

Cargará un IDE con una interfaz gráfica idéntica a Visual Studio 2010. En la ventana, se crea un nuevo proyecto: (seguir lo que está marcado con amarillo)

SQL Server Data Tools

Nuevo proyecto de Integration Services

Cargará un proyecto vacío. Lo primero que se debe hacer, es crear las conexiones de ambas bases de datos. Primero, se hará la del origen (SQL Server).

A la mano derecha de la pantalla (La pantalla no tiene manos jeje) hay un cuadro llamado Solution Explorer y en su árbol hay un directorio (o nodo (o como quieran decirle)) llamado Connection Managers

Solution Explorer

En Connection Managers, con un click secundario, se selecciona la opción New Connection Manager

New Connection Manager

Nueva Conexion ADO.NET

Se crea una conexión utilizando ADO.NET. Luego, se abrirá una ventana solicitando los datos de la conexión.

Nueva Conexion a SQL Server

¡Completa el formulario con tus datos! (pista: el «.» hace referencia a la máquina local). Al momento de probar la conexión debe salir esto:

Test de la conexion

Para crear la conexión a MySQL se deben repetir los mismos pasos, pero cambiando los datos de conexión:

Nueva Conexion a MySQL

Como aparece en la imagen, hay que cambiar el proveedor de datos (Para SQL Server se usó uno distinto. Para MySQL hay que usar ODBC). Se selecciona el nombre de la conexión en el combobox y luego se ingresan los datos de nombre de usuario y contraseña.

En el entorno, hay varias pestañas. Las que nos importan ahora son: Control Flow y Data Flow:

Pestañas

En Control Flow, arrastramos un objeto llamado Data Flow y debe quedar así:

Data Flow en Control Flow

En la pestaña de Data Flow se arrastran los elementos de Origen de datos ADO.NET y Destino de datos ODBC:

Configuración del Origen

Una vez que la conexión está configurada y seleccionada la tabla con la que se trabajará, es necesario echarle una mirada a las columnas. Ver cuales son y como se «exportarán».

Columnas de origen y como se exportarán

Si todo está bien, se selecciona «OK» y se hace lo mismo para configurar el destino (pero sobre el objeto de ODBC). La información de destino debe estar mas o menos así:

Configuracion de conexión de destino

En la sección de «Mappings» se configura las columnas de origen y las de destino. Como quedan enlazadas. A buenas y a primeras,  me decía «ignore». Luego al echar a correr la solución, me arrojó un error por eso mismo. Volví a la vista de diseño y pude configurarlo. Para ser sincero, no sé por qué pasó eso, pero lo pude solucionar.

Para que tengas una idea de como debe quedar, aquí está la imagen:

Mapeo de Columnas

Al apretar OK, la ventana se cerrará y mostrará la pestaña de data flow. En Data Flow, unir la flecha azul del origen y llevarla al destino. Tal como aparece en la imagen:

Los datos van desde el origen al destino

Se guarda el proyecto y se ejecuta para ver qué es lo que ocurre (Se ejecuta con F5). Observar que en ejecución aparece una nueva pestaña llamada Progress:

Pestaña Progress

En progress, tal como su nombre lo indica, mostrará el progreso y las tareas que se están ejecutando. En caso de aparecer algún error, lo indicará ahí. Si todo ha terminado bien, aparecerá un mensaje así:

Proceso finalizado con éxito

La única forma de corroborar, es ver si los datos fueron llevados a su destino:

Datos en MySQL

Eso es todo!