SQL: Se puede copiar una tabla, de na BD a otra de forma fácil?

AikonCWD

Hola, paso a detallar un poco el escenario:

  • Tengo 2 servidores diferentes
  • Cada servidor ejecuta un MS SQL Server
  • Cada instancia de SQL tiene una BD (que se llama igual en ambos casos)
  • La estructura (tablas, vistas) de cada BD es idéntica, el contenido no.
  • Solo hago modificaciones en una tabla de una BD en concreto.

Así que al finalizar el día, me gustaría que ambas tablas de ambas BDs tengan los mismos registros.
Hay alguna forma fácil de hacer este proceso? El camino largo (y pesado) de recorrer ambas tablas, coger los registros que no están en la segunda BD y hacer el INSERT manual entiendo que funcionaría, pero quiero dejar esto como última opción.

Hay algo más rápido que pueda implementar? Alguna instrucción SQL que haga ese trabajo? Podría hasta dropear la tabla de la segunda BD y luego insertar todos los registros, pero quiero pensar que existe alguna forma menos retard de hacerlo.

Alguien sabe algo? Gracias

B

Puedes descargarte la tabla 1 (donde haces las modificaciones) y hacer una load replace en la 2ª a diario..., es una solución retard, pero es que lo que necesitas es retarded también xd.

1 respuesta
Ranthas

insert into (tabla_1) select * from (tabla_2)

Edito para ponerte que si no quieres registros duplicados (y no vas a borrar el contenido de la tabla destino), tienes la clausula IGNORE para el insert

1 respuesta
AikonCWD

#3 Esto funciona tratándose de 2 BDs diferentes en 2 servidores diferentes?

#2 En plan hacer un backup y luego restaurar? Hum..., voy a probar

2 respuestas
sh31k

Yo cuando intento trabajar con varias DB, tengo un middleware entre el controlador y el ORM para decirle en que bases de datos quiero que me guarde cada modificación de la DB. Eso sí, derivas la lógica al código y no al SQL.

no se si te sirve, pero a mi para guardar el contenido realtime en dos o mas bases de datos es lo que hago.

B

.

1 1 respuesta
AikonCWD

#6 genial! Temas de lentitud no me preocupan, pues es algo que quiero hacer 1 vez cada día y me da igual que el proceso dure 5 minutos.
No sabía que podías hacer consultas entre servidores. Creo que la clave va a estar ahí.

Muchas gracias, voy a ponerme a leer un rato sobre el tema.

1
Ranthas

#4 En Oracle tienes los DBLINK, que te permiten conectar DB distintas y trabajar con ellas desde servidores diferentes; en MySQL seguro que hay alguna funcionalidad igual, pero no estoy seguro; ahí google te podrá ayudar más que yo.

1
Espectrox

En postgre hay dump restore de las tablas. Mira si hay algo similar para sql server. Si lo montas bien el script el dump genera un fichero, asi que tienes backups a la vez.

Edit: Acabo de leer que no quieres hacer drop. Yo me haria un script de sql que te mire los registros que no estan en la segunda bd y te los meta.

PiPePiTo

En el curro tenemos la DB de prod y la DB de arch, ambas MS SQL Server, Archive tiene prod vinculado como un DB Link, así puedo hacer insert into A desde B (siendo B prod).

Para hacer eso, lo que tenemos son SQL Agent Jobs, los configuras en el servidor que quieras que haga la operación y ale, muchos de ello lo que tienen dentro son Merge into table, así sólo se mueve la información que se ha cambiado y... poco más.

También probamos la opción de tener los 2 en espejo, no te lo recomiendo que el performance se va a la puta.

Usuarios habituales