Un no DBA pregunta: ¿Cómo copiar / mover sin dolor una instancia de SQL Server a otro servidor a través de Copia de seguridad / Restauración?

11

Acabamos de obtener un nuevo servidor, así que necesito copiar la instancia existente de SQL Server 2008 desde el antiguo cuadro de base de datos.

Normalmente hago esto copiando .mdf y archivos de registro y adjuntándolos, pero no puedo desconectar los dbs ya que se usan las 24 horas, los 7 días de la semana, así que hice una copia de seguridad de las bases de datos y las restauré en el nuevo máquina. Sin embargo, terminé con algunos problemas, uno de ellos relacionado con usuarios huérfanos . Entonces, lo que estoy buscando es un proceso a prueba de fallas para mover todo con un mínimo de alboroto / molestia / dolor de cabeza. Soy un desarrollador de .Net con una buena cantidad de SQL en mi haber, pero el funcionamiento interno de SQL Server es en gran parte un misterio para mí y encuentro que la documentación de MS es difícil de rastrear.

Por favor ayuda.

5arx
fuente
1
Puedes encontrar algunas ideas en esta pregunta anterior . Pero las respuestas anteriores son bastante explicativas. Creo que la mejor idea sería establecer un reflejo y romperlo después, o un envío de registro (solo se puede hacer desde el asistente) para todos los dbs y simplemente restaurar más las copias de seguridad de registro necesarias, pero si dice que no es un DBA , entonces probablemente el método de copias de seguridad sea mejor.
Marian

Respuestas:

10

Si no puede desconectar las bases de datos, debe hacer una copia de seguridad / restauración. Sugeriría lo siguiente:

  1. Instale SQL 2008 en el nuevo cuadro, utilizando la misma estructura de archivos que el cuadro anterior para los archivos MDF y LDF.
  2. Realice copias de seguridad de todas las bases de datos en el cuadro anterior.
  3. Restaure el maestro del cuadro antiguo al cuadro nuevo que tiene el SQL iniciado en modo de usuario único. Restaurar método maestro
  4. Restaure cada base de datos del cuadro anterior al cuadro nuevo con la opción NORECOVERY para poder aplicar futuras copias de seguridad de Diff o T-log.
  5. Restaure msdb del cuadro antiguo al cuadro nuevo.

Si construye y configura la nueva caja para que se vea exactamente como la anterior, entonces tendrá un escándalo mínimo.

No tengo idea de cuán grandes son sus bases de datos, por lo que este método podría llevar mucho tiempo. Lo más fácil sería cerrar la caja anterior y copiar los archivos MDF y LDF y luego (después de restaurar el maestro) solo necesitaría reiniciar SQL para tener sus bases de datos en línea. Pero declaró que no es una opción, ya que las bases de datos no pueden estar desconectadas.

SQLRockstar
fuente
3
No olvide copiar los cambios de datos realizados después de realizar las copias de seguridad. Puede realizar una copia de seguridad de diferencias o una copia de seguridad de tlog y aplicarlas al nuevo servidor después de que esté activo, pero antes de cambiar.
Eric Humphrey - lotsahelp
Buen punto, olvidé mencionar eso también. tal vez debería incluir una configuración de espejo db, que podría romperse después?
SQLRockstar
1
Me imagino que alguien ya tiene un extenso artículo sobre las diferentes formas de migrar servidores. Además, aquí hay un artículo sobre la transferencia de inicios de sesión a un nuevo servidor: support.microsoft.com/kb/246133
Eric Humphrey - lotsahelp
8

Usted menciona la operación las 24 horas del día, los 7 días de la semana, por lo que la mejor manera de hacerlo es crear un espejo de base de datos en el nuevo sistema, luego puede simplemente cambiar con un mínimo, tal vez cero, dependiendo de cómo esté estructurada su aplicación (tiempo de inactividad usando un cliente) redirección lateral. Los pasos básicos son:

  1. Asegúrese de que su base de datos principal se esté ejecutando en modo de recuperación COMPLETA .
  2. Copia de seguridad del primario y restaurarlo en el espejo WITH NORECOVERY
  3. Cree "puntos finales" en ambos servidores y garantice la conectividad (por ejemplo, reglas de firewall), configurando el puerto y la dirección IP correctamente) por ejemplo:

    CREATE ENDPOINT endpoint1
    STATE=STARTED AS TCP(LISTENER_PORT = 5222, LISTENER_IP = 192.168.1.5) 
    FOR DATA_MIRRORING(ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = REQUIRED ALGORITHM RC4)
  4. Configure el reflejo en el espejo, apuntando al primario:

    ALTER DATABASE GaiusMirrorDB SET PARTNER = 'TCP://192.168.1.5:5222'
    go
    EXEC sys.sp_dbmmonitoraddmonitoring
    go
  5. Y en el primario, apuntando al espejo (solo un nombre de base de datos y una dirección IP diferentes.

  6. Luego, cuando llegue el momento, simplemente cambie el primario al espejo:

    ALTER DATABASE GaiusDB SET PARTNER FAILOVER
    GO

Nota: Supongo que estos dos servidores están en la misma red, por lo que estará bien operar en modo síncrono. Si esto está sobre un enlace WAN, utilice el modo asíncrono.

Gayo
fuente