none
Copiar de base de datos Bd Local RRS feed

  • Pregunta

  • Hola buen día. Voy a realizar una app de escritorio que se conectará a una base de datos SQL Server que está en equipo dentro de la misma red, de ahí obtendrá de cada registro de la tabla de productos(50,000 aproximadamente ) ciertos datos, mismos que deben guardarse en una base de datos local y de esa base de datos local obtener 50 productos aleatorios, de modo que estos 50 productos deben eliminarse(delete del producto) por que ya fueron tomados, de modo que la próxima vez ya no deben estar esos 50 productos y así sucesivamente, pero la aplicación debe poder actualizar de la base de datos remota a la local por las nuevas altas de productos y comenzar con el aleatorio y eliminación de los aleatorios en la copia loca.

    Tengo planteado crear una base de datos local con los campos requeridos y cada vez que requiera actualizarse hacer el delete de todos los registros y volverlos a cargar recorriendo la base de datos y los productos aleatorios hacer delete en la base de datos local y cada vez que se haga el aleatorio hacerlo desde la copia local. No se si vean correcto mi planteamiento o puedan apoyarme de modo que mi aplicación sea lo más ligera posible por que también estaba pensando guardar los registros en un XML y hacer los updates de la base de datos remota al archivo XML y los que se seleccionen aleatorios ir eliminando los nodos, por que al guardar la copia en la base de datos tengo que instalar el sql server en el equipo cliente y lo quiero hacer lo más sencillo pero a la vez óptimo. Espero me puedan apoyar. Gracias y saludos cordiales 

     
    martes, 6 de noviembre de 2018 18:34

Respuestas

  • Hola buenas tardes, evalúa utilizar modelo de publicación de replicación, osea efectivamente tener la base de datos principal el publicador y en una base de datos local, que pudiera ser un SQL Server Express Edition ser tu suscriptor, en esta base de datos se llevaría la parte de la información que extraerías de tu publicador y luego configurarías cada cuanto se realizaría el proceso de sincronizar(hay varios tipos de sincronizacion ) para pasar la información de una base de datos a otra, es super interesante y eficiente, no necesitarías programar mucho o casi nada, porque son procesos que realiza el SQL Server que claro deber aprender a configurar esta caracteristicas del sql server, te paso la documentación:

    https://docs.microsoft.com/es-es/sql/relational-databases/replication/publish/replication-publishing-model-overview?view=sql-server-2017

    https://docs.microsoft.com/es-es/sql/relational-databases/replication/tutorial-preparing-the-server-for-replication?view=sql-server-2017

     
    martes, 6 de noviembre de 2018 19:31
  • Hola. Gracias Vladimir por la información. La sincronización sería cada vez que el usuario requiera actualizar la información del publicador al suscriptor, de echo sería una sección de la app donde el usuario de clic a botón de sincronizar y estoy pensando crear la base de datos en la misma instancia del servidor (misma red local), ya que posiblemente se esté obteniendo información aleatoria y eliminando los registros aleatorios de la base de datos del suscriptor desde otros equipos; no se qué opines. Gracias

    Saludos

    • Marcado como respuesta Jorge Chuc miércoles, 7 de noviembre de 2018 13:58
    martes, 6 de noviembre de 2018 20:54
  • Hola:

    Salvo que tengas marcados en una tabla los productos a eliminar hoy. De manera que el xml local elimina esos productos, cuando va a descargar los datos de hoy. Nota: Hoy es una unidad de tiempo que tu elijas.

    Ahora bien, si resulta, que lo que tienes es una necesidad de la infraestructura de red, en contra de lo que exponías en el post "Tengo planteado crear una base de datos local ", entonces, para que vas a trabajar con replicaciones o xml. Puedes crear una base de datos secundaria en la misma instancia, y a correr. Tu software cliente, trabaja sobre la secundaria.

    Es una idea.

    • Marcado como respuesta Jorge Chuc miércoles, 7 de noviembre de 2018 13:58
    miércoles, 7 de noviembre de 2018 5:49

Todas las respuestas

  • Hola buenas tardes, evalúa utilizar modelo de publicación de replicación, osea efectivamente tener la base de datos principal el publicador y en una base de datos local, que pudiera ser un SQL Server Express Edition ser tu suscriptor, en esta base de datos se llevaría la parte de la información que extraerías de tu publicador y luego configurarías cada cuanto se realizaría el proceso de sincronizar(hay varios tipos de sincronizacion ) para pasar la información de una base de datos a otra, es super interesante y eficiente, no necesitarías programar mucho o casi nada, porque son procesos que realiza el SQL Server que claro deber aprender a configurar esta caracteristicas del sql server, te paso la documentación:

    https://docs.microsoft.com/es-es/sql/relational-databases/replication/publish/replication-publishing-model-overview?view=sql-server-2017

    https://docs.microsoft.com/es-es/sql/relational-databases/replication/tutorial-preparing-the-server-for-replication?view=sql-server-2017

     
    martes, 6 de noviembre de 2018 19:31
  • Hola. Gracias Vladimir por la información. La sincronización sería cada vez que el usuario requiera actualizar la información del publicador al suscriptor, de echo sería una sección de la app donde el usuario de clic a botón de sincronizar y estoy pensando crear la base de datos en la misma instancia del servidor (misma red local), ya que posiblemente se esté obteniendo información aleatoria y eliminando los registros aleatorios de la base de datos del suscriptor desde otros equipos; no se qué opines. Gracias

    Saludos

    • Marcado como respuesta Jorge Chuc miércoles, 7 de noviembre de 2018 13:58
    martes, 6 de noviembre de 2018 20:54
  • Hola JorgeRuizC:

    Si tu objetivo es sencillez y en realidad solo vas a guardar una tabla de productos con 50000 registros, yo utilizaría xml y linq.

    No te costará mucho trabajarlo, y será superefectivo.

    Linq to XML:

    https://docs.microsoft.com/es-es/dotnet/csharp/programming-guide/concepts/linq/linq-to-xml

    https://docs.microsoft.com/es-es/dotnet/csharp/programming-guide/concepts/linq/linq-to-xml-overview

    https://docs.microsoft.com/es-es/dotnet/csharp/programming-guide/concepts/linq/basic-queries-linq-to-xml

    martes, 6 de noviembre de 2018 21:07
  • Hola Javi gracias por tu apoyo.

    Es correcto sólo es una tabla con aproximadamente 50,000 registros y sobre esa información hacer mis operaciones de leer aleatorios, borrar los que se seleccionaron aleatoriamente y sincronizar por ejemplo se me ocurre sincronizarlos creando de nuevo el XML. De decidirnos por trabajarlo en red puedo leer el XML desde una ruta compartida desde mi servidor para que las pcs donde yo tenga la aplicación tengan acceso al mismo XML? Gracias

    Saludos

    martes, 6 de noviembre de 2018 21:17
  • Hola.

    Si puedes leerlo por red, pero no te es mas facil leer los registros por red a la base de datos y guardar el xml en local.

    miércoles, 7 de noviembre de 2018 5:17
  • Hola Ivan, lo digo por que la app posiblemente la diseñe para que otros equipos puedan obtener productos aleatoriamente, de modo que varios usuarios obtendrán aleatorios y esos aleatorios deben eliminarse de la base temporal y si la tengo local no se reflejará en los equipos de otros usuarios. Ssaludos
    miércoles, 7 de noviembre de 2018 5:43
  • Hola:

    Salvo que tengas marcados en una tabla los productos a eliminar hoy. De manera que el xml local elimina esos productos, cuando va a descargar los datos de hoy. Nota: Hoy es una unidad de tiempo que tu elijas.

    Ahora bien, si resulta, que lo que tienes es una necesidad de la infraestructura de red, en contra de lo que exponías en el post "Tengo planteado crear una base de datos local ", entonces, para que vas a trabajar con replicaciones o xml. Puedes crear una base de datos secundaria en la misma instancia, y a correr. Tu software cliente, trabaja sobre la secundaria.

    Es una idea.

    • Marcado como respuesta Jorge Chuc miércoles, 7 de noviembre de 2018 13:58
    miércoles, 7 de noviembre de 2018 5:49
  • Si, efectivamente así lo hare con una base de datos en la misma instancia de equipo en red. gracias a todos por su apoyo.

    saludos cordiales

    miércoles, 7 de noviembre de 2018 13:58
  • Pero como, con sincronizacion y replicacion de bases de datos en SQL Server??
    miércoles, 7 de noviembre de 2018 14:12
  • Hola Vladimir; de hecho estoy estudiando lo que me enviaste igual revisaré y haré ejemplos de lo que me han recomendado los compañeros. Veo super interesante la información que me compartiste para replicar por que serán 2 bases de datos. Inclusive como en oficina inicialmente me la solicitaron local pero seguramente me cambiaran el requerimiento para que varios usuarios miren la misma información y puedan obtener aleatorios. Gracias por tu gran apoyo. Saludos cordiales

    miércoles, 7 de noviembre de 2018 15:22