Pasos para migrar bases de datos heterogéneas.
(paso a paso técnico)
En este caso pasamos de MariaDB a Oracle 12c.
Hay muchas formas de migrar bases de
datos por todos los foros, pero en todas siempre algo falla. Esta es la
tradicional forma de migración bajando todos los datos a texto y luego subirlos
a las tablas destinos de la otra base de datos.
Vamos a empezar con esta migración,
tomando el origen de MariaDB (de aquí en mas MDB) y llevando todos los datos de
la mejor manera posible a Oracle 12c (de aquí en mas ORC).
Pasos que seguimos:
Ubicados en la base origen
MDB,
1.- Seteamos el uso de la base que vamos a migrar:
2.- Nos fijamos la cantidad de tablas que vamos
a migrar; y armamos un archivo de texto para luego modificar y hacer un Shell
para ejecutar todo.
Y más tablas … solo tomo una porción de la
pantalla.
3.- Armamos una sentencia de INTO OUTFILE, para
cada tablas, de esta forma hacemos un export de los datos de todas las tablas
perteneciente a esa base de datos desde MDB.
Donde seleccionamos todos los campos de la
tabla y los exportamos a un archivo de texto en un directorio especifico que le
indicamos en la sentencia INTO OUTFILE, de esta forma le decimos donde lo
dejamos y de que forma lo dejamos, es decir especificamos como vamos a separar
los campos, como terminara la línea y de que tabla lo sacamos.
Esto lo ejecutamos para todas las tablas del
listado que obtuvimos antes.
Generará un archivo por cada tabla con los
datos, en el directorio donde le dijimos que lo haga en el script, por ejemplo “/migración/<nombre_tabla>.DAT”
A su vez le decimos que la separación de campos
se proceda con “,” y el fin de línea
sea el control “\n”
Una vez que exportamos todo a TXT debemos
llevar todos los archivos de todas la tablas al equipo destino, donde será
tomado via el SQL Loader para la suba de datos a las tablas destino.
4.- Pasamos los archivos .DAT al server
destino:
Una ves que tenemos todo
en el server destino, vamos y ejecutamos lo siguiente en dicho Server.
5.- Verificamos que todos los archivos hayan
pasada correctamente.
6.- En ambos servidores creamos la misma
estructura de directorio para llevar a cabo la migracion, es decir en ambos
existe el directorio.
“/migracion”
Tomaremos este como raíz para la migración, de
ahí saldrán todos los demás para acomodarlos según tengamos que hacer, por
ejemplo
/migracion/log
/migracion/data
/migracion/ctl
En el directorio “/migracion” realice un script que genera los CTL de todas las tablas
del owner a migrar. Cabe destacar que ya
nos encontrábamos con un esquema instalado de cero.
Este script es el siguiente.
[oracle@ora01nc001-2 migracion]$ cat gen_todas.sh
#!/bin/bash
# Generacion de CTL para sqlloader.
while read tabla;
do
SALIDA=$(sqlplus -s '/ as sysdba' <<-EOF>>
/u05/migracion/$tabla.ctl
set heading off feedback off serveroutput on trimout on pagesize 0
declare
i number :=0;
j number :=0;
begin
for i in (select * from
dba_tables a where a.owner='NEXTCLOUD' and a.table_name ='$tabla') loop
DBMS_OuTPUT.PUT_LINE ('LOAD
DATA');
DBMS_OUTPUT.PUT_LINE ('INFILE
'|| upper(i.table_name) ||'.DAT');
DBMS_OUTPUT.PUT_LINE ('REPLACE
INTO TABLE NEXTCLOUD."'||i.table_name||'"' );
DBMS_OUTPUT.PUT_LINE ('FIELDS
TERMINATED BY '|| chr(39) ||',' ||chr(39) );
for j in (select * from
dba_tab_columns b where b.owner=i.owner and b.table_name=i.table_name order by
column_id) loop
if j.column_id = 1 THEN
DBMS_OUTPUT.PUT_LINE('("'||j.column_name||'"' );
ELSE
DBMS_OUTPUT.PUT_LINE(',
"'||j.column_name||'"' );
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE(')');
END LOOP;
END;
/
EOF
);
done < /u05/migracion/tablas_nextcloud.txt
[oracle@ora01nc001-2 migracion]$
Donde
mediante un loop de un archivo externo lo recorre y crea un archivo CTL por
cada fila, ese archivo fue lo que extrajimos al principio, es decir la lista de
tablas que pertenece al esquema que vamos a importar. Cabe
destacar que tanto el nombre de la tabla como los campos se deben sostener
entre comillas debido a como fueron creados.
7.- Luego
de esto, ya estamos en condiciones de ejecutar el Sql Loader para cada tabla.
Es importante para que no surgan errores incluir los path absolutos en casa
Loader.
sqlldr
"'/ as sysdba'" control=/u05/migracion/
data=/u05/migracion/data/OC_PRIVATEDATA.DAT log=/u05/migracion/log/0.log
8.-
Contamos con un scripts (ingreso_masivo.sh) en el mismo directorio, que une a
todos los CTL para ejecutarlos todos juntos.
[oracle@ora01nc001-2
migracion]$ cat ingreso_masivo.sh
sqlldr "'/ as sysdba'"
control=/u05/migracion/oc_accounts.ctl data=/u05/migracion/data/OC_ACCOUNTS.DAT
log=/u05/migracion/log/oc_accounts.ctl.log
sqlldr "'/ as sysdba'" control=/u05/migracion/oc_activity.ctl
data=/u05/migracion/data/OC_ACTIVITY.DAT
log=/u05/migracion/log/oc_activity.ctl.log
sqlldr "'/ as sysdba'"
control=/u05/migracion/oc_activity_mq.ctl
data=/u05/migracion/data/OC_ACTIVITY_MQ.DAT log=/u05/migracion/log/oc_activity_mq.ctl.log
sqlldr "'/ as sysdba'"
control=/u05/migracion/oc_addressbookchanges.ctl
data=/u05/migracion/data/OC_ADDRESSBOOKCHANGES.DAT
log=/u05/migracion/log/oc_addressbookchanges.ctl.log
sqlldr "'/ as sysdba'"
control=/u05/migracion/oc_addressbooks.ctl
data=/u05/migracion/data/OC_ADDRESSBOOKS.DAT
log=/u05/migracion/log/oc_addressbooks.ctl.log
sqlldr "'/ as sysdba'"
control=/u05/migracion/oc_amx_fake_user_backend_auth.ctl
data=/u05/migracion/data/OC_AMX_FAKE_USER_BACKEND_AUTH.DAT log=/u05/migracion/log/oc_amx_fake_user_backend_auth.ctl.log
sqlldr "'/ as sysdba'"
control=/u05/migracion/oc_amx_filesharing_contacts.ctl
data=/u05/migracion/data/OC_AMX_FILESHARING_CONTACTS.DAT
log=/u05/migracion/log/oc_amx_filesharing_contacts.ctl.log
sqlldr "'/ as sysdba'"
control=/u05/migracion/oc_amx_filesharing_templates.ctl
data=/u05/migracion/data/OC_AMX_FILESHARING_TEMPLATES.DAT
log=/u05/migracion/log/oc_amx_filesharing_templates.ctl.log
sqlldr "'/ as sysdba'"
control=/u05/migracion/oc_amx_filesharing_templates_media.ctl
data=/u05/migracion/data/OC_AMX_FILESHARING_TEMPLATES_MEDIA.DAT
log=/u05/migracion/log/oc_amx_filesharing_templates_media.ctl.log
sqlldr "'/ as sysdba'"
control=/u05/migracion/oc_amx_gallery_myalbums.ctl
data=/u05/migracion/data/OC_AMX_GALLERY_MYALBUMS.DAT
log=/u05/migracion/log/oc_amx_gallery_myalbums.ctl.log
sqlldr "'/ as sysdba'"
control=/u05/migracion/oc_amx_gallery_myalbums_files.ctl
data=/u05/migracion/data/OC_AMX_GALLERY_MYALBUMS_FILES.DAT log=/u05/migracion/log/oc_amx_gallery_myalbums_files.ctl.log
y asi sucesivamente
con las 76 tablas.
Una vez ejecutado el script con todos los CTL y los DAT ya estaríamos en
condiciones de verificar si se cargaron los datos en nueva base de datos.
En el mismo directorio
donde ejecutamos el anterior scripts, vamos a encontrar los archivos BAD que
son las fallas que nos dan los sqlLoaderl.