none
Actualizar en Cascada Bases de Datos SQL RRS feed

  • Pregunta

  • Hola a todos,

    Tengo varias instancias de Sql Server en un mismo servidor. Cada una de ellas tiene las mismas bases de datos con los mismos procedimientos, las mismas vistas, las mimas tablas, es decir los mismos objetos de base de datos. Lo que quiero hacer de alguna forma, que no sé si es posible, es que cuando agregue una columna a una tabla de una base de datos de una de las instancias, de alguna forma automática se actualicen el resto de instancias añadiendo la misma columna en la misma tabla de la misma base de datos pero del resto de las instancias. Y los mismo para los diferentes objetos de base de datos. No sé si me he explicado, lo que no veo optimo es tener que ir instancia a instancia de sql añadiendo dicha columna a la tabla de la base de datos correspondiente de forma manual para mantener el mismo diseño de base de datos en todas las instancias.

    Espero que alguien me pueda ayudas. 

    Muchas gracias de antemano.

    miércoles, 6 de mayo de 2015 11:58

Respuestas

  • Hola, aunque el escenario que tienes, tal y como dicen otros compañeros, tal vez pudieras enfocarlo a un sistema de replicación, la opción de ejecutar sentencias en varios servidores simultaneamente si es posible hacerla en teoría, aunque tengo que decir que nunca lo he probado.

    En el Management Studio, puedes crearte "Servidores registrados" (Ver -> Servidores registrados, para mostrar la ventana). En ese apartado del Management Studio puedes crear grupos de servidores y registrarlos. Una vez tienes todos tus servidores registrados, si pinchas en EL GRUPO (aparece como una carpeta) con el botón derecho, y seleccionas "nueva consulta", esa nueva ventana de consulta que te aparece estará apuntando al grupo completo.

    En la barra de estado de la ventana de consulta podrás ver como en lugar de el nombre de un servidor aparece el nombre del grupo como SQLServer al que estás conectado.

    Una vez tienes esto, la consulta que ejecutes se lanzará contra todos los servidores de este grupo.

    Si por ejemplo quieres hacer un ALTER de una vista y lo ejecutas ahí, esa vista se actualizará en todos los servidores.

    Dicho esto, como te comento yo no lo he probado, de modo que te recomiendo que hagas muchas pruebas ántes de lanzarlo a todos tus servidores de producción.

    Un saludo y espero que te sirva.

    Diego


    miércoles, 6 de mayo de 2015 13:35
  • Hola,

    Yo he hecho la prueba hace un rato (por la curiosidad de comprobar que realmente funcionara) y sin ningún problema.

    He creado un grupo llamado prueba con dos servidores, y he lanzado un script de crear un usuario:

    USE [master]
    GO
    CREATE LOGIN [Borrar] WITH PASSWORD=N'borrar', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
    GO

    La ejecución devuelve:

    Command(s) completed successfully. (2 servers)

    Y el usuario se ha creado correctamente en ambos servidores.

    Posteriormente he lanzado el drop login [borrar] y de nuevo se ha borrado sin problema.

    Comprueba que puedes conectar correctamente a los servidores. Si haces doble click en el nombre del servidor de la ventana "Servidores Registrados" debería conectarse sin pedir nada.

    En las propiedades del servidor registrado también tienes un botón para comprobar la conexión.

    Un saludo.

    Diego.

    • Marcado como respuesta AVLOC jueves, 7 de mayo de 2015 14:40
    jueves, 7 de mayo de 2015 8:59

Todas las respuestas

  • Dejando de lado el hecho de que no entiendo porque estas haciendo esto, replicación seria lo más optimo pero nota que solo puedes replicar acciones sobre las bases exisentes, no puedes replicar de esta manera configuraciones de seguridad, jobs, o nuevas bases (a menos que las repliques tambien).
    miércoles, 6 de mayo de 2015 12:24
  • Hola.

    Salvo que algún otro forista opine lo contrario, no se puede hacer lo que solicitas desde una base de datos.

    El procedimiento, incluso como práctica recomendada, es que actualices o modifiques en cada instancia con un script que ejecutes en dicha instancia con las sentencias ALTER TABLE o las que puedas llegar a requerir.

    Saludos,


    Guillermo Taylor F.
    IT Pro & Xbox gamer
    My blog

    miércoles, 6 de mayo de 2015 12:33
  • Hola, aunque el escenario que tienes, tal y como dicen otros compañeros, tal vez pudieras enfocarlo a un sistema de replicación, la opción de ejecutar sentencias en varios servidores simultaneamente si es posible hacerla en teoría, aunque tengo que decir que nunca lo he probado.

    En el Management Studio, puedes crearte "Servidores registrados" (Ver -> Servidores registrados, para mostrar la ventana). En ese apartado del Management Studio puedes crear grupos de servidores y registrarlos. Una vez tienes todos tus servidores registrados, si pinchas en EL GRUPO (aparece como una carpeta) con el botón derecho, y seleccionas "nueva consulta", esa nueva ventana de consulta que te aparece estará apuntando al grupo completo.

    En la barra de estado de la ventana de consulta podrás ver como en lugar de el nombre de un servidor aparece el nombre del grupo como SQLServer al que estás conectado.

    Una vez tienes esto, la consulta que ejecutes se lanzará contra todos los servidores de este grupo.

    Si por ejemplo quieres hacer un ALTER de una vista y lo ejecutas ahí, esa vista se actualizará en todos los servidores.

    Dicho esto, como te comento yo no lo he probado, de modo que te recomiendo que hagas muchas pruebas ántes de lanzarlo a todos tus servidores de producción.

    Un saludo y espero que te sirva.

    Diego


    miércoles, 6 de mayo de 2015 13:35
  • Hola, lo primero muchas gracias a todos por vuestras respuestas. La necesidad de este diseño es un sistema de franquicias en donde todas tienen la misma estructura de base de datos, pero cada una con los datos correspondientes a su franquicia. Cada una de estas bases de datos idénticas que tienen cada una de las franquicias está una instancia sql server diferente dentro del mismo servidor. El problema surge cuando hay que hacer algún cambio, a día de hoy disponemos de  3 franquicias, pero está ya pensado que para el año que viene sean 15 o 20. Imaginaros repetir 15 o 20 veces la misma operación de cambio. Sería una auténtica locura.

    Mañana haré pruebas con lo que me comentas Diego. Ya os cuento.

    Y muchas gracias de nuevo por vuestras respuestas.

    Saludos.

    miércoles, 6 de mayo de 2015 15:13
  • Aunque puedo ver la logica en esto no comprendo porque tienen la solucion de esta manera, porque no hacer una base de datos en cada instancia para cada franquicia (y a menos que los acuerdos de servicio lo dicten asi ni esto lo veo como optimo). Lo obtimo seria dentro de una base y debido a la normalizacion puedas separar las necesidades de cada cliente o franquicia.
    miércoles, 6 de mayo de 2015 15:29
  • Buenos días, la cuestión en este caso Enrique, es que las necesidades de cada franquicia son la mismas, el sistema informático es el mismo, y además dicho sistema informático esta centralizado en la sede principal, en donde se gestionan todos los cambios. De tal forma que si se va a prestar un nuevo servicio, se va a prestar a todas las franquicias, por lo tanto los cambios en base de datos van a ser iguales para todas. Lo único que cambia en las franquicias es que cada una en su zona de exclusividad va a tener sus propios clientes.

    Diego, he probado lo que comentabas ayer, me he creado un grupo de servidores, he registrado varios servidores con la misma estructura, pero cuando intento modificar dicha estructura atacando al grupo de servidores que me he creado me dice que el servidor no está conectado. Voy a intentar indagar un poco más al respecto ya que esta solución es la que más se aproxima a lo que necesito.

    Ya os cuento. 

    Gracias

    jueves, 7 de mayo de 2015 8:03
  • Hola,

    Yo he hecho la prueba hace un rato (por la curiosidad de comprobar que realmente funcionara) y sin ningún problema.

    He creado un grupo llamado prueba con dos servidores, y he lanzado un script de crear un usuario:

    USE [master]
    GO
    CREATE LOGIN [Borrar] WITH PASSWORD=N'borrar', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
    GO

    La ejecución devuelve:

    Command(s) completed successfully. (2 servers)

    Y el usuario se ha creado correctamente en ambos servidores.

    Posteriormente he lanzado el drop login [borrar] y de nuevo se ha borrado sin problema.

    Comprueba que puedes conectar correctamente a los servidores. Si haces doble click en el nombre del servidor de la ventana "Servidores Registrados" debería conectarse sin pedir nada.

    En las propiedades del servidor registrado también tienes un botón para comprobar la conexión.

    Un saludo.

    Diego.

    • Marcado como respuesta AVLOC jueves, 7 de mayo de 2015 14:40
    jueves, 7 de mayo de 2015 8:59
  • Hola Digo, efectivamente funciona, es exactamente lo que necesitaba. El problema lo estaba teniendo porque el grupo de servidores lo estaba creando en el grupo de servidores locales. En el momento que me he creado un servidor de administración central y dentro el grupo de servidores, no he tenido  ningún problema.

    Muchas Gracias amigo!!

    jueves, 7 de mayo de 2015 14:36