
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.