Descripción
Hay que convertir el dump en SQL, Los datos y otros gallitos
MySQL – MariaDB – MariaDB
MySQL – MariaDB-MariaDB -> PostgreSQL
Una guia de postgresql para hacerlo https://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL#MySQL – MariaDB
1. PgLoader
El papa es pgloader .. https://pgloader.readthedocs.io/en/latest/tutorial/tutorial.html
$> pgloader MySQL - MariaDB://admin:sveT1a%a@localhost/testOciJaime postgresql://admin:sveT1a%a@localhost/testOciJaime
Si quiere que sea case sensitive, es necesario pasarle opcione quote identifiers .. entonces hay que crear un archivo pgloader.load y se corre con pglaoder pgloader.load
load database from MySQL - MariaDB://admin:sveT1a%a@localhost/orfeo_ng into postgresql://admin:sveT1a%a@localhost/orfeo_ng WITH include drop, create tables, no truncate, quote identifiers, create indexes, reset sequences, foreign keys BEFORE LOAD DO $$ create schema if not exists orfeo_ng; $$;
2. PG-Chameleeon
Un relplicador de datos . pero nopp Pg-Chameleon https://pypi.org/project/pg-chameleon/
pip3 install argparse
pip3 install MySQL – MariaDB-replication
pip3 install psycop
pip3 install pyyaml
pip3 install rollbar
apt-get -y install python3-pymysql
apt-get -y install python3-psycopg2
apt-get -y install python3-tabulate
apt-get -y install python3-daemonize
apt-get install python3-chameleon
MySQL – MariaDB-MariaDB -> Oracle DB
Lo que recomienda Oracle por supuesto es usar sqldevelopper para migrar. Hay que agregarle el jdbc para que se conecte con MySQL – MariaDB
https://www.oracle.com/database/technologies/migrating-MySQL – MariaDB-oracle-database.html
Para 11g es una cosa y para 12c es otra !!!
Oracle 18c
En general arriba de la 12c (12.1) ya hay autoincrement (https://oracle-base.com/articles/12c/identity-columns-in-oracle-12cr1) o sea eso no es problema.
** OJO .. el formato de la fecha friega .. toca cambiarlo en el motor o en la sesion. Mire el howto de Oracle DB
** OJO en la migracion todos los identificadores deben estar entre comillas para que sea case Sensitive
PROMPT Creating Table testOciJaime …
CREATE TABLE «testOciJaime» (
«id» NUMBER(10,0) GENERATED BY DEFAULT ON NULL AS IDENTITY START WITH 0 INCREMENT BY 1 MINVALUE 0 NOMAXVALUE ,
«nombre» VARCHAR2(50 CHAR) NOT NULL,
«creacion» DATE NOT NULL,
«estado» NUMBER(5,0) NOT NULL
);
PROMPT Creating Primary Key Constraint PRIMARY on table testOciJaime …
ALTER TABLE «testOciJaime» ADD CONSTRAINT «testOciJaime_pk» PRIMARY KEY ( «id» ) ENABLE ;
Insertando cosas a los machetazos
INSERT INTO «C##ORFEO_USR».»testOciJaime» («id», «nombre», «creacion», «estado») VALUES (‘2’, ‘pruebad2’, TO_DATE(‘2020-07-25 00:00:00’, ‘YYYY-MM-DD HH24:MI:SS’), ’10’)
UPDATE «C##ORFEO_USR».»testOciJaime» SET «nombre» = ‘prueba2’ WHERE ROWID = ‘AAATwaAAHAAAAKlAAA’ AND ORA_ROWSCN = ‘4446720’
Oracle 11g
Aqui esto se pone bonito porque toca simular los autoincrementales entre triggers y secuencias ( https://stackoverflow.com/questions/11296361/how-to-create-id-with-auto-increment-on-oracle/11296469#11296469)
Entonces mi tabla se convierte en
CREATE TABLE «testOciJaime» (
«id» NUMBER(10,0) NOT NULL,
«nombre» VARCHAR2(50 CHAR) NOT NULL,
«creacion» DATE NOT NULL,
«estado» NUMBER(5,0) NOT NULL
);
ALTER TABLE «testOciJaime» ADD CONSTRAINT «testOciJaime_pk» PRIMARY KEY («id») ENABLE ;
CREATE SEQUENCE «testOciJaime_seq» START WITH 1;
CREATE OR REPLACE TRIGGER «testOciJaime_bir»
BEFORE INSERT ON «testOciJaime»
FOR EACH ROW
BEGIN
SELECT «testOciJaime_seq».NEXTVAL
INTO :new.»id »
FROM dual;
END;
/
MySQL – MariaDB-MariaDB -> SQL Server
Todos quieren que se migren a sus BDs ..
1. MySQLtoSQL o SSMA (SQL Server Migration Asistant) for MySQL – MariaDB
– Como migrar https://datamigration.microsoft.com/scenario/MySQL – MariaDB-to-sqlserver?step=1
– El manual de la herramienta https://docs.microsoft.com/en-us/sql/ssma/MySQL – MariaDB/sql-server-migration-assistant-for-MySQL – MariaDB-mysqltosql?view=sql-server-ver15
OJO.. el sistema asigna las tablas al schema del nombre de la base de datos y toca moverla a bdo.xxxx para que se pueda hacer consultas
alter schema dbo transfer testOciJaime.testOciJaime
Oracle DB
Oracle DB -> MySQL – MariaDB-MariaDB
Lo he intentado por muchos lados ,,… ni workbench ni sqldeveloper no tiene (a oracle no le conviene), dbeaver no lo encontre
Hay otra herramienta que no he logrado poner a funcionar: https://github.com/seanharr11/etlalchemy
https://www.thegeekdiary.com/how-to-migrate-from-oracle-to-MySQL – MariaDB/ una quia para sacar datos
https://www.sqlines.com/sqldata_cmd Herramienta para convertir
https://dbconvert.com/download/ Un trial que depronto sirve
MS SQL Server
MS SQL Server –> PostgreSQL
https://wiki.postgresql.org/wiki/Microsoft_SQL_Server_to_PostgreSQL_Migration_by_Ian_Harding
1. DBConverter
Hay varios caminos, yo opte por usar este que fue el que menos ruido me causo, el problema es que ensucia los registros texto.
Entonces el proceso fue, haga la conversion, luego un DUMP de PostgreSQL y luego limpielo con un script que se anexa al final
./quite_TRIAL.sh postgresql.dump | sed -v ‘^$’ > postgresql_limpio.dump
Si la base de datos es muy grande, puede ser muy lento .. yo lo paralelice partiendo el archivo con split -l y lanzando muchos procesos simulaneos
$**OJO no verificamos sino los datos .. puede que haya llaves foraneas o algo mas que no pasa bien.
$**OJO No olvide quitar las lineas en blanco. Como sube los datos con un COPY (STDIN) una linea en blanco lo enloquece.
2. sqlserver2postgresl
Promete pero no lo probe .. necesita (pentaho) ketle para funcionar y me fue imposible instalarlo
Trucos
Problemas
1. Si el instale_mrtg.sh no le funciona
–
Referencias
–
FIN
ANEXO
Script para limpiar los TRIAL de DBConverter en postgresql
#!/bin/bash
#
DEBUG=0
# cada linea del archivo
j=1
while read -r ; do
# Si vale la pena procesarlo
if [[ `echo «$REPLY» | grep ‘\-TRIAL\-‘ ` != «» ]] ; then
if [[ $DEBUG == 1 ]] ; then echo «Linea $j» > /dev/stderr ; fi
if [[ $DEBUG == 1 ]] ; then printf ‘%s\n’ «$REPLY» > /dev/stderr ; fi
# Es una alterada
numf=`echo «$REPLY» | awk -F»\t» ‘{print NF}’`
i=1
if [[ $DEBUG == 1 ]] ; then echo «Hay $numf columnas en la linea» > /dev/stderr ; fi
while [ $i -le $numf ]; do
if [[ $i -eq $numf ]] ; then ultimo=1 ; else ultimo=0 ; fi
campo=`echo «$REPLY» | awk -v D=$i -F»\t» ‘{print $D}’`
if [[ `echo $campo | grep ‘\-TRIAL\-‘ ` != «» ]] ; then
if [[ $DEBUG == 1 ]] ; then echo «El campo ($i) esta alerado» > /dev/stderr ; fi
echo -n «$campo» | awk -F» » ‘{for(i=1;i<=NF-1;i++) printf(«%s «,$i)}’ | \
sed -e «s/^[0-9][0-9][0-9]-TRIAL-//g» | \
sed -e «s/^[0-9][0-9]-TRIAL-//g» | \
sed -e «s/^[0-9]-TRIAL-//g» | \
sed -e «s/ / \\\N /g» | \
sed -e «s/ / \\\N /g» | \
sed -e «s/ $/ \\\N/g» -e «s/ $//g» | \
sed -e «s/ / /g»
# Aqui quite los trial
# los vacios los vuelvo \N
# Dos tab seguidos \N
# Quito el espacio-tab final
# ultimo con tab
if [[ $ultimo -eq 0 ]] ; then echo -n -e «\t» ; fi
else
if [[ $ultimo -eq 1 ]] ; then
echo «$campo»
else
echo -n -e «$campo\t»
fi
fi
i=$(($i+1))
done
if [[ $i -gt $(($numf+1)) ]] ; then
echo «Problemas con el conteo de columnas [$j] ($i)>>($numf)» > /dev/stderr
exit 1
fi
echo «»
else
echo «$REPLY»
fi
j=$(($j+1))
done < $1
==============================================================