Ver Mensaje Individual
  #17  
Antiguo 08-10-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 24
guillotmarc Va por buen camino
Hola Iván.

En el fondo es muy sencillo. No hay que hacer mucho más que en una replicación con servidores conectados.

Tienes tu tabla de LOGS donde se especifican todos los registros que hay que traspasar. Pues abres en un ClientDataset el contenido de la tabla LOGS y lo guardas en un archivo (por ejemplo en un archivo XML, ya que el ClientDataset te da distintas opciones para guardar).

Naturalmente con solo esa información, otro servidor no va a poder replicar los datos. Ahora te queda recorrer todas las tablas a replicar, y para cada una de ellas cargar en un ClientDataset los registros que se replicaran. Ejplo.:

select * from TABLA1
where ID in (select REGISTRO_ID from LOGS where TABLA_ID = n)

Cada uno de estos ClientDatasets lo tienes que guardar también en un archivo XML.

Una vez has pasado a archivos XML la tabla de LOGS, y los datos a replicar de todas las tablas en replicación, entonces puedes empaquetar todos estos archivos XML en un archivo ZIP.

Finalmente, cuando tienes todos los datos necesarios para una replicación, en ese archivo ZIP, lo subes a una carpeta FTP, para que esté disponible on-line. De manera que el segundo servidor, cuando se conecte a Internet, o cada cierto tiempo (yo lo suelo programar para que busque nuevos paquetes cada 5 minutos), solo le queda conectarse a esa carpeta FTP y descargar todos los archivos ZIP de replicación que allí se encuentren.

El proceso contrario. La importación de estos datos, tampoco tiene nada del otro mundo.

Solo tienes que descomprimir un archivo ZIP con los datos de una replicación. Cada archivo XML contiene los datos para ser cargados en un ClientDataset (uno para la tabla de LOGS y el resto para cada una de las tablas que se replican).

Así que una vez cargada esa información en los correspondientes ClientDatasets, ya solo resta hacer exactamente lo mismo que hariamos si estuvieramos replicando con los servidores conectados.

Es decir recorremos la tabla de LOGS (el ClientDataset donde la tenemos cargada) y para cada registro hacemos el correspondiente INSERT, UPDATE o DELETE en el servidor de destino. Para los INSERT o UPDATEs, la información a insertar la sacamos del ClientDataset correspondiente a esa tabla (ya que no lo podemos consultar directamente en el Servidor de Origen).

Finalmente ya solo te queda establecer un sistema de numeración de las paquetes a replicar, para asegurarte de que no se te quedan olvidados (por ejplo. por un error en el servidor FTP) paquetes sin importar.

Cualquier cosa que no veas clara, consultalo y lo comentamos.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita