none
Sincronizar estructura de 2 base de datos en sql server 2008

    Question

  • Hola

    Resulta que tengo una base de datos principal donde hago muchas modificaciones, como agregar tablas, modificar o agregar campos a tablas etc.

    y tengo otras base de datos iguales en clientes y me resulta muy complicado que cada vez q creo una tabla o modifico una tabla en mi base de datos principar tenga que hacer también la modificaciones a mano en cada una de las base de datos  de los clientes.

    No si si exista algo para sincronizar la estructura (no la información) de dos bases de datos.

    Estoy trabajando con SQL Server 2008 y Visual Basic 2010

    Gracias de antemano!

    Tuesday, January 29, 2013 3:38 PM

Answers

  • La opción que te propone el compañero es únicamente para datos, no para los esquemas que es lo que yo entiendo que es por lo que realmente preguntas.

    En cuanto si hay algo para sincronizar esquemas, la respuesta es que de forma automática no. Hay herramientas que te permiten comparar bases de datos a nivel esquema y generar un script con los cambios a aplicar para que ambos entornos sean iguales, pero es algo igualmente manual.

    Si primero tienes que generar esas modificaciones en tu base de datos principal, podrías guardar ese script y crear un programa que se encargara de ejecutarlo en cada una de las bases de datos clientes, aunque como no conocemos el entorno no sé si es muy complejo o no hacerlo.

    Tuesday, January 29, 2013 4:41 PM

All replies

  • Lo que podrías utilizar en este caso ya que usas SQL Server 2008 es el uso del MERGE en mi opinión es muy útil para tu necesidad te dejo un ejemplo:

    MERGE MAS_GENERALES.DBO.M_Mensajes_S AS TARGET 
    USING MAS_SEGURIDAD.DBO.M_Mensajes_S 
    AS SOURCE ON (TARGET.msj_mensaje_id=SOURCE.msj_mensaje_id)
    WHEN NOT MATCHED BY TARGET THEN 
    INSERT (msj_mensaje_id, msj_descripcion, msj_grabamsj,
    msj_estado,msj_descriantes,msj_descridespues) 
    VALUES (SOURCE.msj_mensaje_id, SOURCE.msj_descripcion,
    SOURCE.msj_grabamsj,SOURCE.msj_estado,
    SOURCE.msj_descriantes,SOURCE.msj_descridespues)
    WHEN NOT MATCHED BY SOURCE
    THEN DELETE
    WHEN MATCHED 
    AND TARGET.msj_descripcion <> SOURCE.msj_descripcion 
    OR TARGET.msj_grabamsj <> SOURCE.msj_grabamsj
    OR TARGET.msj_estado <> SOURCE.msj_estado
    OR TARGET.msj_descriantes <> SOURCE.msj_descriantes
    OR TARGET.msj_descridespues <> SOURCE.msj_descridespues
    THEN 
    UPDATE SET TARGET.msj_descripcion = SOURCE.msj_descripcion, 
    TARGET.msj_grabamsj = SOURCE.msj_grabamsj,
    TARGET.msj_estado = SOURCE.msj_estado,
    TARGET.msj_descriantes = SOURCE.msj_descriantes,
    TARGET.msj_descridespues = SOURCE.msj_descridespues;

    Como verás tengo una base de datos de Origen y una Destino con la misma tabla y obviamente los mismos campos. Espero te ayude Suerte.

    Tuesday, January 29, 2013 4:16 PM
  • Gracias por responder!

    Pero igual me tocaría hacer eso tabla por tabla no? y ps vendría siendo lo mismo ya q en estos momentos yo copie los scripts y los ejecuto en la BD de los clientes.

    Gracias

    Tuesday, January 29, 2013 4:25 PM
  • Lo que podrías hacer es crear una pequeña aplicación que te arme el Merge yo lo hice con la ayuda del Sys.tables para identificar las columnas, primarias,etc. No te puedo brindar mas ejemplos que el primero, ya que lo demás pertenece y es propio de la empresa no es ético. Suerte
    Tuesday, January 29, 2013 4:31 PM
  • La opción que te propone el compañero es únicamente para datos, no para los esquemas que es lo que yo entiendo que es por lo que realmente preguntas.

    En cuanto si hay algo para sincronizar esquemas, la respuesta es que de forma automática no. Hay herramientas que te permiten comparar bases de datos a nivel esquema y generar un script con los cambios a aplicar para que ambos entornos sean iguales, pero es algo igualmente manual.

    Si primero tienes que generar esas modificaciones en tu base de datos principal, podrías guardar ese script y crear un programa que se encargara de ejecutarlo en cada una de las bases de datos clientes, aunque como no conocemos el entorno no sé si es muy complejo o no hacerlo.

    Tuesday, January 29, 2013 4:41 PM
  • Hola. Hace poco tuve una necesidad similar y no encontré algo directo en SQL Server, así que investigué un poco y encontré SQL Compare de RedGate: http://www.red-gate.com/products/sql-development/sql-compare/.

    No es gratuita, pero ofrece una prueba por 14 días. Revísala a ver si funciona para ti...

    Saludos,

     

    Guillermo Taylor F.
    IT Pro & Xbox gamer
    My blog

    Tuesday, January 29, 2013 4:42 PM
  • Gracias a todos por responder, yo creo q optare por guardar todos las actualizaciones un un archivo .sql y luego ejecutar el archivo desde el programa ya que todos los programas q hacen esa sincronización son de pago... igual muchas gracias!

    Tuesday, January 29, 2013 7:37 PM