Esta plataforma se llama CCA y es de Oracle.
Mi responsabilidad en el proyecto era la integración con el sistema CRM con el que actualmente trabajamos.
Una de las partes fue la actualización de la base de datos y debiamos hacerlo sin que la tabla se quede en 0 en ningun momento, ya que esta tabla es con la que consulta la plataforma para que el cliente ingrese al sistema.
A continuación vamos a explicar la lógica y el mecanismo ya que puede servir para otras aplicaciones:
ORACLE TO ORACLE:
1) Dentro de CCA creamos un DBLINK a la vista de nuestro CRM.
2) Dentro de CCA creamos la tabla IVR_CLIENTES (esta será la que contenga los datos que traigamos de nuestro CRM.
3) Dentro de CCA creamos una tabla IVR_CLIENTES_TMPO, la misma se utilizará de temporal.
4) Para actualizar cada 2 horas básicamente teníamos que armar un plsql que modifique el nombre de las tablas y evite tener que borrar los datos para cargarlos nuevamente (lo que generaría un vacio con posibles error de autentificación).
creamos un archivo ejecuta.sql.
adentro ponemos el siguiente codigo:
Obviar comentarios en rojo, son solo para indicar que se hizo.
Declaro variables
DECLARE
c_registros_A NUMBER(10);
c_registros_B NUMBER(10);
sql_drop VARCHAR2(255);
sql_alter VARCHAR2(255);
sql_create VARCHAR2(255);
sql_truncate VARCHAR2(255);
Hago un insert into select, consiste en hacer un insert en base a un select a otra tabla, en este caso un dblink con el formato CLIENTES_CRM_VIEW@TFLP
BEGIN
INSERT INTO IVR_CLIENTES_TMPO SELECT * FROM IVR_CLIENTES_CRM_VIEW@TFLP;
Básicamente aca cuento los registros, teniendo en cuenta que esta base siempre debe crecer y jamás tener menos registros.
SELECT COUNT(*) INTO c_registros_A FROM IVR_CLIENTES;
SELECT COUNT(*) INTO c_registros_B FROM IVR_CLIENTES_TMPO;
Analizo si me traje mas registros que los que hay ahora.
IF c_registros_B >= c_registros_A THEN
Si es así borro la tabla anterior y modifico el nombre de la vieja.
sql_drop := 'DROP TABLE IVR_CLIENTES';
sql_alter := 'ALTER TABLE IVR_CLIENTES_TMPO RENAME TO IVR_CLIENTES';
Creo nuevamente la base temporal para la próxima corrida.
sql_create := 'CREATE TABLE IVR_CLIENTES_TMPO AS SELECT * FROM IVR_CLIENTES';
Le borro el contenido.
sql_truncate := 'TRUNCATE TABLE IVR_CLIENTES_TMPO';
Ejecuto los comandos.
EXECUTE IMMEDIATE sql_drop;
EXECUTE IMMEDIATE sql_alter;
EXECUTE IMMEDIATE sql_create;
EXECUTE IMMEDIATE sql_truncate;
IMPORTANTE EL COMMITTTTTTT !!!!!!
COMMIT;
END IF;
END;
/
finalmente otro archivo que lo ejecute (utilizando sqlplus):
replica.sh
#!/bin/bash
sqlplus -l REP_10CRM/password@ORCL @ejecuta.sql <
EXIT
y lo croneamos:
* */1 * * * /bin/sh /home/oracle/replica.sh
Hernán Mazzeo
No hay comentarios:
Publicar un comentario