Habilite o SQL Server para fazer backup em máquinas/unidades remotas

Habilite o SQL Server para fazer backup em máquinas/unidades remotas

Eu tenho um SQL Server (2000, 2005 e 2008) e gostaria de usar o SQL Agent (ou até mesmo um banco de dados de backup simples 'xxx' para disco = 'yyy'), para fazer backup em unidades remotas.

Ou seja: eu tenho uma unidade mapeada na máquina SQL, por exemplo: "M:" que mapeia para \\otherbox\someshare

Por padrão, o SQL Server não permite fazer backup nessas unidades, mas acho que existe uma maneira de ativar isso. Alguém pode me indicar os documentos?

Desde já, obrigado.

Responder1

Use o caminho UNC ao especificar o destino - o SQL Agent não tem um conceito de "unidades" "mapeadas".

Além disso, o SQL Agent normalmente é executado como “Serviço Local” ou “Sistema Local” e, como tal, não tem direitos para compartilhamentos remotos em outros computadores.

Você tem algumas opções:

  • Execute o SQL Agent como uma conta de função no domínio. Conceda permissão a essa conta para gravar no diretório/compartilhamento onde você deseja que os backups sejam armazenados.

  • Execute o SQL Agent como "Serviço de Rede". Ele será autenticado no servidor de compartilhamento com a conta do computador de domínio da máquina em que o serviço está sendo executado. Conceda permissão a essa conta para gravar no diretório/compartilhamento onde você deseja que o backup seja armazenado.

  • Se você não tiver um domínio, crie uma conta com o mesmo nome de usuário e senha na máquina que hospeda o SQL Agent e na máquina que hospeda os arquivos de backup. Altere o SQL Agent para ser executado como esta conta de "função" e conceda a essa conta permissão para gravar no diretório/compartilhamento onde você deseja que o backup seja armazenado. (O "domínio do pobre"...)

Responder2

Concordo totalmente com ambas as respostas sobre o caminho UNC.

Gostaria também de acrescentar que mesmo com unidades mapeadas você tem uma solução simples. Você pode executar um backup em qualquer unidade normal do seu servidor. E então você pode adicionar

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

Comando SQL para o trabalho ou script SQL que você executa.

Com xp_cmdshell você pode fazer ainda mais - por exemplo, executar uma ferramenta de linha de comando de arquivo externo, como 7z, para compactar o arquivo antes de copiá-lo para a unidade mapeada (quando a conexão remota for muito lenta...)

PS: Esqueci de mencionar que xp_cmdshell pode ser habilitado e desabilitado usando a ferramenta Surface Area Configuration e executando sp_configure (e por padrão está desabilitado)

Responder3

Se o SQL Server não for executado em uma conta de domínio, você poderá mapear uma unidade de rede para a conta sqlserver (não sua conta), conforme descrito nesteresposta stackoverflow

Primeiro você precisa habilitar o 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

Então você pode mapear uma unidade usando:

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

Finalmente, você pode fazer backup para essa unidade mapeada:

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

Responder4

Tenha em mente aqui que o SQL Server é muito intolerante com atrasos de rede. Se ocorrerem, e tendem a ocorrer, o backup falhará. Eu não recomendo essa prática para ambientes de produção.

Melhor fazer backup localmente e depois copiar.

informação relacionada