Exportación e Importacion de datos

26/02/2005 - 14:32 por Juan Pedro Gonzalez | Informe spam
Aqui estoy otra vez, a este paso voy a parecer un pesado...

Veamos esta pregunta se divide en dos... En primer lugar tengo que volcar
ciertos datos entre dos SQL Servers, y por otro lado tengo que volcar datos
entre un SQL Server y un Access. Todo esto a traves de una aplicacion.

Los usuario del SQL Server se conectan empleando autenticacion de SQL
Server, y un rol de aplicacion.
Por ciertos motivos que no vienen al caso es imposible realizar replicas.
Por motivos de seguridad no puedo dejar ficheros en una carpeta para
importarlos al SQL Server como ficheros de texto.

Hasta el momento la aplicacion abria un DataReader, e iba ejecutando los
INSERTs correspondientes en la otra base de datos (Ya fuese de SQL Server a
SQL Server, de SQL Server a Access o de Access a SQL Server). Este proceso
es lentisimo, y se que se puede mejorar, la pregunta es ¿como?

Una de las ideas mas básicas que he leido por ahi es emplear una tabla
temporal, de tal forma que el INSERT sea mas rápido al carecer de Indeces, y
posteriormente copiarlo a la tabla final. La verdad es que no lo he probado
y no se si realmente notaria alguna mejora...

Otro dato importante es que queria pasar datos de varias tablas en una sola.
Vamos, actualmente tengo una vista que me prepara lso datos y esos son los
que deberian pasar al Access. Los datos del Access al SQL Server pasan tal y
como se encuentran en el access (Estos datos estan en otra tabla
independiente), sin embargo debo descartar todos los datos que ya hayan sido
sincronizados (Vamos, mas o menos igual que una replica)...

¿Alguna idea o sugerencia? ¿Algun link interesante sobre el tema?

Preguntas similare

Leer las respuestas

#1 MAXI
26/02/2005 - 22:23 | Informe spam
Hola, primero te comento algo: No eres ningun pesado ni mucho menos, aqui
estamos para ayudarte y hacer que puedas usar sqlserver de la mejor manera
posible :-)


Bien, vayamos a lo que nos interesa: Para pasar datos de un sistema a otro
podes usar alguna de estas tecnicas

1) Armas paquetes DTS
2) Usar BCP

Dependiendo de la cantidad de registros un metodo es mejor que el otro, por
ej BCP esta mas pensado para pasar una cantidad interesante de registros los
cuales los tomara de un plano.

DTS es mas programatico y puedes hacer muchas cosas, en la empresa donde
estoy tenemos todo un sistema de gestion de calidad el cual usa Access pero
hemos armado DTS y migramos los datos a SqlSErver para luego usar OLAP por
ej.

Te recomiendo que empieces a leer este tema en tus libros Online y cualquier
duda nos las haces saber :-)



Maxi
Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:



"Juan Pedro Gonzalez" escribió en el mensaje
news:
Aqui estoy otra vez, a este paso voy a parecer un pesado...

Veamos esta pregunta se divide en dos... En primer lugar tengo que volcar
ciertos datos entre dos SQL Servers, y por otro lado tengo que volcar
datos
entre un SQL Server y un Access. Todo esto a traves de una aplicacion.

Los usuario del SQL Server se conectan empleando autenticacion de SQL
Server, y un rol de aplicacion.
Por ciertos motivos que no vienen al caso es imposible realizar replicas.
Por motivos de seguridad no puedo dejar ficheros en una carpeta para
importarlos al SQL Server como ficheros de texto.

Hasta el momento la aplicacion abria un DataReader, e iba ejecutando los
INSERTs correspondientes en la otra base de datos (Ya fuese de SQL Server
a
SQL Server, de SQL Server a Access o de Access a SQL Server). Este proceso
es lentisimo, y se que se puede mejorar, la pregunta es ¿como?

Una de las ideas mas básicas que he leido por ahi es emplear una tabla
temporal, de tal forma que el INSERT sea mas rápido al carecer de Indeces,
y
posteriormente copiarlo a la tabla final. La verdad es que no lo he
probado
y no se si realmente notaria alguna mejora...

Otro dato importante es que queria pasar datos de varias tablas en una
sola.
Vamos, actualmente tengo una vista que me prepara lso datos y esos son los
que deberian pasar al Access. Los datos del Access al SQL Server pasan tal
y
como se encuentran en el access (Estos datos estan en otra tabla
independiente), sin embargo debo descartar todos los datos que ya hayan
sido
sincronizados (Vamos, mas o menos igual que una replica)...

¿Alguna idea o sugerencia? ¿Algun link interesante sobre el tema?


Respuesta Responder a este mensaje
#2 Juan Pedro Gonzalez
27/02/2005 - 00:19 | Informe spam
Hola Maxi,

Tienes algun enlace interesante de como realizar todo esto.

Te comento un poco mas en detalle el proyecto...

En principio la sincronizacion entre los dos SQL server deben suceder a
peticion del usuario, es decir, al presionar el boton de enviar los nuevos
datos. Normalmente se envian solo parte de las filas de unas 8 tablas. En
total no deberían ser mas de 10,000 registros. Normalmente considero que
serán menos registros, aunque en ocasiones podrian superarlo (en muy pocas
ocaiones).

La otra sincronizacion se realizaria entre el SQL Server y varias bases de
datos access (y viceversa). La idea es pasar una serie de plantillas a los
Access de tal forma que puedan trabajar sin conexión y una vez finalizado su
trabajo que se sincronicen los datos de los resultados con el SQL Server. En
esta ocasion el numero de reguistros debería ser inferior, aunque si
trabajan offline podrian ser muchos mayores (aunque se espera que no sea
algo frecuente). Como ya he comentado el access tiene solamente parte de los
datos del SQL Server, y por lo tanto igual es rentable transformar ciertas
tablas. Por ejemplo, el access de encargara de realizar un estudio concreto
para una empresa, sin embargo en el SQL Server las empresas van por su lado,
los estudios por otro, etc... Normalmente en el access solo tendremos un
estudio, o poco mas, por lo que es innecesario crear una tabla para que tan
solo contenga 3 registros, por lo que estaria bien unirlos, de tal forma que
quede similar a una serie de vistas que hay preparadas en el SQL server.

Como ya he mencionado anteriormente no hay carpetas compartidas donde dejar
un fichero ni nada parecido... Hasta el momento habia pensado en el BCP ya
que me permite realizar este tipo de operaciones en remoto, pero me gustaria
mas que todo se contuviese dentro del programa (sin usar el bcp.exe), por
otro lado por lo que has comentado parece que el DTS sería mas apropiado en
este caso. Si me pudieses facilitar algun enlace te lo agradeceria.

Saludos




"MAXI" escribió en el mensaje
news:#
Hola, primero te comento algo: No eres ningun pesado ni mucho menos, aqui
estamos para ayudarte y hacer que puedas usar sqlserver de la mejor manera
posible :-)


Bien, vayamos a lo que nos interesa: Para pasar datos de un sistema a otro
podes usar alguna de estas tecnicas

1) Armas paquetes DTS
2) Usar BCP

Dependiendo de la cantidad de registros un metodo es mejor que el otro,


por
ej BCP esta mas pensado para pasar una cantidad interesante de registros


los
cuales los tomara de un plano.

DTS es mas programatico y puedes hacer muchas cosas, en la empresa donde
estoy tenemos todo un sistema de gestion de calidad el cual usa Access


pero
hemos armado DTS y migramos los datos a SqlSErver para luego usar OLAP por
ej.

Te recomiendo que empieces a leer este tema en tus libros Online y


cualquier
duda nos las haces saber :-)



Maxi
Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:

Respuesta Responder a este mensaje
#3 MAXI
27/02/2005 - 03:39 | Informe spam
Hola, enlaces de DTS

http://www.sqldts.com/

y claro, los libros on line :-)



Maxi
Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:



"Juan Pedro Gonzalez" escribió en el mensaje
news:%
Hola Maxi,

Tienes algun enlace interesante de como realizar todo esto.

Te comento un poco mas en detalle el proyecto...

En principio la sincronizacion entre los dos SQL server deben suceder a
peticion del usuario, es decir, al presionar el boton de enviar los nuevos
datos. Normalmente se envian solo parte de las filas de unas 8 tablas. En
total no deberían ser mas de 10,000 registros. Normalmente considero que
serán menos registros, aunque en ocasiones podrian superarlo (en muy pocas
ocaiones).

La otra sincronizacion se realizaria entre el SQL Server y varias bases de
datos access (y viceversa). La idea es pasar una serie de plantillas a los
Access de tal forma que puedan trabajar sin conexión y una vez finalizado
su
trabajo que se sincronicen los datos de los resultados con el SQL Server.
En
esta ocasion el numero de reguistros debería ser inferior, aunque si
trabajan offline podrian ser muchos mayores (aunque se espera que no sea
algo frecuente). Como ya he comentado el access tiene solamente parte de
los
datos del SQL Server, y por lo tanto igual es rentable transformar ciertas
tablas. Por ejemplo, el access de encargara de realizar un estudio
concreto
para una empresa, sin embargo en el SQL Server las empresas van por su
lado,
los estudios por otro, etc... Normalmente en el access solo tendremos un
estudio, o poco mas, por lo que es innecesario crear una tabla para que
tan
solo contenga 3 registros, por lo que estaria bien unirlos, de tal forma
que
quede similar a una serie de vistas que hay preparadas en el SQL server.

Como ya he mencionado anteriormente no hay carpetas compartidas donde
dejar
un fichero ni nada parecido... Hasta el momento habia pensado en el BCP ya
que me permite realizar este tipo de operaciones en remoto, pero me
gustaria
mas que todo se contuviese dentro del programa (sin usar el bcp.exe), por
otro lado por lo que has comentado parece que el DTS sería mas apropiado
en
este caso. Si me pudieses facilitar algun enlace te lo agradeceria.

Saludos




"MAXI" escribió en el mensaje
news:#
Hola, primero te comento algo: No eres ningun pesado ni mucho menos, aqui
estamos para ayudarte y hacer que puedas usar sqlserver de la mejor
manera
posible :-)


Bien, vayamos a lo que nos interesa: Para pasar datos de un sistema a
otro
podes usar alguna de estas tecnicas

1) Armas paquetes DTS
2) Usar BCP

Dependiendo de la cantidad de registros un metodo es mejor que el otro,


por
ej BCP esta mas pensado para pasar una cantidad interesante de registros


los
cuales los tomara de un plano.

DTS es mas programatico y puedes hacer muchas cosas, en la empresa donde
estoy tenemos todo un sistema de gestion de calidad el cual usa Access


pero
hemos armado DTS y migramos los datos a SqlSErver para luego usar OLAP
por
ej.

Te recomiendo que empieces a leer este tema en tus libros Online y


cualquier
duda nos las haces saber :-)



Maxi
Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:





Respuesta Responder a este mensaje
#4 Juan Pedro Gonzalez
27/02/2005 - 13:15 | Informe spam
Mil gracias. Me voy a poner a leer sobre el tema y hacer pruebas ahora
mismo.


"MAXI" escribió en el mensaje
news:
Hola, enlaces de DTS

http://www.sqldts.com/

y claro, los libros on line :-)



Maxi
Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:

Respuesta Responder a este mensaje
#5 Juan Pedro Gonzalez
27/02/2005 - 20:10 | Informe spam
Una pequeña duda... ¿Hay alguna forma de pasar varias tablas a la vez con un
DTS?

Me explico, ahora mismo ya he conseguido pasar una tabla desde el SQL Server
al Access, y tambien he logrado pasar varias tablas como una unica tabla al
Access (Emplendo JOINS), con lo que obtengo una tabla con el mismo resultado
que una de mis vistas...

El caso es que tengo que pasar varias tablas del SQL Server al Access, y
hasta el momento la unica solución que veo es crear un paquete DTS por cada
tabla que quiero pasar... Una posible solucion para acortar las lineas de
codigo de la aplicación es llamar a un procedimiento almacenado que ejecute
el DTSrun... Aun asi, como no todos mis usuarios son sysadmins, tengo un
problema de permisos... y lo mas importante, sigo teniendo un paquete DTS
por cada tabla.

¿Hay alguna manera de crear un paquete DTS que mueva varias tablas? (3 tabla
de SQL Server a 3 tablas de Access)

Tambien se me ha planteado otra duda. Para poder emplear el DTS desde .NET
tengo que importar los objetos COM. Estos objetos se instalan al instalar el
SQL Server, sin embargo las aplicaciones estaran corriendo en maquinas donde
no existe el SQL Server. En su dia me volvi medio loco buscando las
dependencias de los controles COM para el SQL-DMO, ¿Me darán el mimso tipo
de problemas las dependencias de los controles para DTS?

Cuando creo el paquete DTS de exportacion a un ACCESS me pide la ruta del
mismo. No entiendo muy bien como se puede realizar el DTS (Al menos en el
servidor) si dicha carpeta no esta compartida. ¿Si creo el paquete desde VB,
y especifico una carpeta no compartida funcionará el DTS? ¿Podría crear el
paquete en el servidor?

Saludos



"MAXI" escribió en el mensaje
news:#
Hola, primero te comento algo: No eres ningun pesado ni mucho menos, aqui
estamos para ayudarte y hacer que puedas usar sqlserver de la mejor manera
posible :-)


Bien, vayamos a lo que nos interesa: Para pasar datos de un sistema a otro
podes usar alguna de estas tecnicas

1) Armas paquetes DTS
2) Usar BCP

Dependiendo de la cantidad de registros un metodo es mejor que el otro,


por
ej BCP esta mas pensado para pasar una cantidad interesante de registros


los
cuales los tomara de un plano.

DTS es mas programatico y puedes hacer muchas cosas, en la empresa donde
estoy tenemos todo un sistema de gestion de calidad el cual usa Access


pero
hemos armado DTS y migramos los datos a SqlSErver para luego usar OLAP por
ej.

Te recomiendo que empieces a leer este tema en tus libros Online y


cualquier
duda nos las haces saber :-)
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida