Replicacion Manual con VB6 y SQL2000

14/12/2004 - 16:53 por Davo | Informe spam
Que tal amigos. Tengo el siguiente problema.

Introduccion:
Desde hace un año implemente un metodo de replicación entre varios puntos de
venta y el servidor principal, diariamente, en las noches, genero un archivo
al que llamo ORIGEN, por cada punto de venta que contiene los registros
modificados o incluidos en el sistema de todas las tablas, esto por medio de
dos campos fecha_inclusion y fecha_modifico.

Problema:
el proceso completo funciona muy bien, pero han crecido los puntos de venta
y la informacion tambien, y necesito agilizar el proceso de replicacion en el
servidor principal para poder meter otras funcionalidades y todo se pueda
realizar en la misma noche.

El atraso principal se produce en dos tablas: la primera es CLI_CLIENTES que
almacena un 3.5 millones de registros y la otra es FACTURAS que tiene unos
100,000 registros, la primera es muy lenta, el proceso de actualizacion o
inclusio de un registro dura aprox. 1 segundo, que me parece es mucho. Estas
tablas son las que mas relaciones guardan con otras tablas, y tienen mas
indices:

CLI_CLIENTES
- 3.5 millones de registros
- 10 referencia de llaves foraneas (le hacen referencia).
- Llave primaria Clustered (Tipo ID y ID)
- Indice (Nombre, Apellido1, Apellido2) Fillfactor 90
- Indice (Nombre, clase cliente) Fillfactor 90
- Indice (Sucursal, Fecha modifico) Fillfactor 90
- Tiene 50 campos

FACTURAS
- 100,000 registros
- 15 referencias de llaves foraneas
- Llave primaria Clustered (Sucursal, Numero, Tipo, Fecha)
- Tiene 36 campos

El programa replicador esta hecho en Visual Basic 6.0, y a continuacion esta
el codigo principal:

'Esto por cada tabla
While Not Origen.EOF
g_cnnBaseDato.BeginTransaction

'crea un select con las llaves primarias que consulta el registro en el
servidor principal
strSQL = CrearSQLReplica(txtTablaActual, Origen.Fields, oTable.Columns)

'abro el registro
Set rstReplica = g_cnnBaseDato.AbrirRecordset(strSQL, adOpenDynamic,
adLockOptimistic)

'verifica si actualiza o inserta
If rstReplica.EOF And rstReplica.BOF Then 'nuevo
rstReplica.AddNew
nContInserta = nContInserta + 1
Else
nContActualiza = nContActualiza + 1
End if

'procede a replicar todos los campos de la tabla
For Each rstField In rstOrigen.Fields
rstReplica(rstField.Name) = rstField.Value
Next rstField

rstReplica.Update

g_cnnBaseDato.CommitTransaction

rstOrigen.MoveNext
Wend

Me gustaria saber que soluciones o pruebas puedo hacer para poder mejorar el
tiempo de replicacion especificamente en esas tablas, quizas el problema
pueda estar en los indices o las referencias con otras tablas o alguna
configuracion que no he aplicado, tambien podría estar mal el codigo que
implemente. Espero me puedan dar alguna referencia de como solucionar este
problema.
 

Leer las respuestas

#1 Carlos Sacristán
14/12/2004 - 16:58 | Informe spam
Bueno, si no puedes usar alguna de las opciones de replicación que tiene
ya SQL Server, también podrías usar los DTS para exportar e importar esos
datos. En cualquiera de los casos, te aseguro que va a ser más rápido y más
seguro que el programa que realizaste


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Davo" escribió en el mensaje
news:
Mostrar la cita
de
Mostrar la cita
archivo
Mostrar la cita
de
Mostrar la cita
venta
Mostrar la cita
el
Mostrar la cita
que
Mostrar la cita
Estas
Mostrar la cita
esta
Mostrar la cita
el
Mostrar la cita

Preguntas similares