Habilite SQL Server para realizar copias de seguridad en máquinas/unidades remotas

Habilite SQL Server para realizar copias de seguridad en máquinas/unidades remotas

Tengo un servidor SQL (2000, 2005 y 2008) y me gustaría usar el Agente SQL (o incluso una base de datos de respaldo simple 'xxx' en disco = 'yyy'), para realizar copias de seguridad en unidades remotas.

Es decir: tengo una unidad asignada en la máquina SQL, por ejemplo: "M:" que se asigna a \\otherbox\someshare

De forma predeterminada, SQL Server no le permitirá realizar copias de seguridad en dichas unidades, pero creo que hay una manera de habilitarlo. ¿Alguien puede indicarme los documentos?

Gracias de antemano.

Respuesta1

Utilice la ruta UNC al especificar el destino: el Agente SQL no tiene un concepto de "unidades" "asignadas".

Además, el Agente SQL normalmente se ejecuta como "Servicio local" o "Sistema local" y, como tal, no tiene derechos sobre recursos compartidos remotos en otras computadoras.

Usted tiene un par de opciones:

  • Ejecute el Agente SQL como una cuenta de rol en el dominio. Otorgue permiso a esa cuenta para escribir en el directorio/compartido donde desea almacenar las copias de seguridad.

  • Ejecute el Agente SQL como "Servicio de red". Se autenticará en el servidor compartido con la cuenta de computadora del dominio de la máquina en la que se ejecuta el servicio. Otorgue permiso a esa cuenta para escribir en el directorio/compartido donde desea almacenar la copia de seguridad.

  • Si no tiene un dominio, cree una cuenta con el mismo nombre de usuario y contraseña tanto en la máquina que aloja el Agente SQL como en la máquina que aloja los archivos de respaldo. Cambie el Agente SQL para que se ejecute como esta cuenta de "rol" y otorgue permiso a esa cuenta para escribir en el directorio/compartido donde desea almacenar la copia de seguridad. (El "dominio del pobre"...)

Respuesta2

Estoy totalmente de acuerdo con ambas respuestas sobre la ruta UNC.

También me gustaría agregar que incluso con unidades asignadas existe una solución sencilla. Puede ejecutar una copia de seguridad en cualquiera de las unidades normales de su servidor. Y luego puedes agregar

xp_cmdshell 'XCOPY [source] [destination] \flags'

Comando SQL al trabajo o script SQL que ejecuta.

Con xp_cmdshell puedes hacer aún más: por ejemplo, ejecutar una herramienta de línea de comando de archivo externo, como 7z para comprimir el archivo antes de copiarlo en la unidad asignada (cuando la conexión remota es demasiado lenta...)

PD: Olvidé mencionar que xp_cmdshell se puede habilitar y deshabilitar usando la herramienta de configuración de área de superficie y ejecutando sp_configure (y de manera predeterminada está deshabilitado)

Respuesta3

Si SQL Server no se ejecuta bajo una cuenta de dominio, puede asignar una unidad de red para la cuenta SQLServer (no su cuenta) como se describe en esterespuesta de desbordamiento de pila

Primero necesitas habilitar xp_cmdshell

-- allow changes to advanced options 
EXEC sp_configure 'show advanced options', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
-- To enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO

Luego puedes mapear una unidad usando:

EXEC xp_cmdshell 'NET USE Z: \\Srv\Path password1 /USER:Domain\UserName'

Finalmente puedes hacer una copia de seguridad en esa unidad asignada:

BACKUP DATABASE myDB TO DISK = 'z:\file.bak'

Respuesta4

Tenga en cuenta aquí que SQL Server es muy intolerante a los retrasos en la red. Si ocurren, y tienden a ocurrir, la copia de seguridad fallará. No recomiendo esta práctica en absoluto para entornos de producción.

Es mejor hacer una copia de seguridad local y luego copiar.

información relacionada