2010-08-06 60 views
20

Tengo 2 bases de datos que tienen la misma estructura, una en una máquina local y otra en el servidor de la compañía. Cada cantidad de tiempo determinada, los datos de la base de datos local se deben sincronizar con la base de datos del servidor.¿Cómo sincronizar bases de datos en diferentes servidores en SQL Server 2008?

Tengo una idea general sobre cómo hacer esto: crear un script que de alguna manera "fusione" la información que no está en el servidor DB, luego haga que este script se ejecute como un trabajo programado para el servidor. Sin embargo, mi problema radica en el hecho de que no tengo mucha experiencia con esto.

¿SQL Server Management Studio proporciona una manera fácil de hacer esto (algún tipo de asistente) y genera este tipo de script? ¿Esto es algo que tendré que construir desde cero?

He hecho algunas búsquedas básicas de Google y encontré el término 'Replicación' pero no lo entiendo del todo. Prefiero escuchar algunas opiniones de personas que realmente han hecho esto o que son buenos para explicar este tipo de cosas.

Gracias.

Respuesta

12

La replicación suena como una buena opción para esto, pero habría algunos gastos generales (no gastos generales técnicos, pero el conocimiento debe ser compatible).

Otra opción de SQL Server es SSIS. SSIS proporciona herramientas gráficas para diseñar lo que estás tratando de hacer. El paquete SSIS también puede ejecutar sentencias SQL, si corresponde. Se puede iniciar un paquete SSIS y, por lo tanto, programarlo desde un trabajo de SQL Server.

Debe considerar la complejidad de las reglas de sincronización al elegir su solución. Por ejemplo, sería difícil resolver conflictos, como una clave duplicada, al fusionar los datos. Un script SQL puede ser fácil de crear si las reglas son simples. Sin embargo, las reglas de conflicto complejas pueden ser más difíciles de implementar en un script (o replicación).

+1

La forma en que veo es bastante simple, la estructura de las tablas no cambiará en absoluto y los problemas de duplicación de claves y todos los que ya están manejados antes de ser insertados. Básicamente, todo lo que necesito es tomar los datos y colocarlos en la otra base de datos. –

+1

La replicación suena como una buena solución en ese momento. Pero, tendrá que decidir si se siente cómodo con eso. Buena suerte. – bobs

+1

Lo probé con diferentes bases de datos locales, y funcionó bien, los trabajos son lo suficientemente simples como para crear esto y los datos están sincronizados correctamente. Aunque utilicé la replicación de instantáneas ... ¿no estoy seguro de si esto podría ser malo? Además, tengo que configurar una suscripción en el servidor DB y hacer que el DB local actúe como editor, ¿correcto? –

8

Desafortunadamente, SQL Server Management Studio no ofrece mucho de esta manera.

usted debe tener una mirada seria a algunos de los excelentes ofertas comerciales por ahí:

  • Red Gate Software SQL Compare y SQL Data Compare - herramientas excelentes, muy recomendable! Incluso puede comparar una base de datos en vivo con una copia de seguridad desde otra base de datos y sincronizar los datos: ¡bastante ingenioso! Ellos cuestan dinero

  • de ApexSQL SQL Diff y SQL Data Diff

- pero si usted es serio al respecto, y se utilizan en su rutina diaria, se les paga porque en ningún momento a todos - vale la pena cada centavo.

La única opción "gratuita" que tiene en SQL Server 2008 sería crear un enlace entre los dos servidores y luego usar algo como el MERGE statement (nuevo en SQL Server 2008) para transferir los datos. Eso no funciona para cambios estructurales, y está limitado solo a tener una conexión en vivo entre los dos servidores.

+1

Sí, me temo que (por ahora, al menos) la solución de declaración MERGE es la ruta que debo seguir. Echaré un vistazo a ese ejemplo y a otros y me pondré en contacto contigo. –

4

Lo que queremos es Peer-to-Peer Transactional Replication, lo que permite que los datos se actualizarán en ambas bases de datos aún mantenerlos sincronizados a través de una fusión contigua de cambios. Esta es la combinación más cercana a lo que desea, pero es una opción bastante costosa (requiere Enterprise Edition en ambos sitios). Otra opción es Bidirectional Transactional Replication, pero como esto también requiere dos licencias de EE, digo que es más fácil de implementar de igual a igual por el mismo dinero.

Una opción más económica es Updatable Subscriptions for Transactional Replication, pero las suscripciones actualizadas se están desaprobando y usted apostaría su dinero a perder un caballo.

Otra opción es usar Merge Replication. Y finalmente, para los casos en que la base de datos 'local' es bastante móvil, hay Sync Framework.

Tenga en cuenta que todas estas opciones requieren alguna configuración y cooperación de la base de datos del servidor de la empresa.

+2

Supongo que tenemos diferentes interpretaciones de los requisitos de OP. No vi una necesidad bidireccional basada en que "los datos de la base de datos local se sincronicen con la base de datos del servidor". Eso sonó de una manera (de local a servidor) para mí. –

0

Existen algunas herramientas de terceros excelentes. Para mí, xSQL Data Compare siempre ha hecho el truco. Y debido a que las comparaciones son altamente modificables, es adecuado para casi cualquier escenario de comparación de datos o sincronización de datos. ¡Espero que esto ayude!

Cuestiones relacionadas