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

8

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 disk = 'yyy'), para fazer backup para 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 permitirá o backup em tais unidades, mas acho que há uma maneira de permitir isso. Alguém pode me indicar os documentos?

Obrigado antecipadamente.

    
por Martin Marconcini 13.07.2009 / 17:26

4 respostas

8

Use o caminho UNC ao especificar o destino - o SQL Agent não possui 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ê gostaria de armazenar os backups.

  • 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ê gostaria que o backup fosse 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 essa conta de "função" e conceda a essa conta permissão para gravar no diretório / compartilhamento em que você gostaria que o backup fosse armazenado. (O "domínio do pobre" ...)

por 13.07.2009 / 17:37
4

Concordo totalmente com as duas respostas sobre o caminho da UNC.

Eu também gostaria de acrescentar que, mesmo com unidades mapeadas, você tem uma solução simples. Você pode executar um backup para qualquer uma das unidades normais do seu servidor. E então você pode adicionar

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

Comando SQL para o trabalho ou script SQL executado.

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

P.S .: Esqueceu de mencionar que xp_cmdshell pode ser ativado e desativado usando a ferramenta Surface Area Configuration e executando sp_configure (e por padrão ele está desabilitado)

    
por 13.07.2009 / 18:23
1

Seu agente precisa acessar os compartilhamentos de rede. Eles não precisam ser mapeados de antemão.

Você faz assim:

BACKUP DATABASE myDB TO DISK = '\machine\share\dir\file.bak'

Acredito que, se o usuário que possui o job for sql sysadmin, ele será executado sob o agente, caso contrário, ele será executado como o usuário que não é sysadmin.

    
por 13.07.2009 / 17:35
0

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

É melhor fazer backup localmente e depois copiar.

    
por 15.07.2009 / 00:07