Habilitar 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 mesmo um simples banco de dados de backup 'xxx' para disco = 'aaa'), 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 permitirá que você faça backup dessas unidades, mas acho que há uma maneira de habilitar isso. Alguém pode me indicar os documentos?

Desde já, obrigado.

Martin Marconcini
fonte
11
Você pode simplesmente usar uma ferramenta de terceiros, como SQLBackupAndFTP, para fazer backup do SQL Server remotamente? sqlbackupandftp.com/blog/…
Nick Taylor

Respostas:

8

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 geralmente é executado como "Serviço Local" ou "Sistema Local" e, como tal, não possui 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 a essa conta permissão para gravar no diretório / compartilhamento em que 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 do domínio da máquina na qual o serviço está sendo executado. Conceda a essa conta permissão para gravar no diretório / compartilhamento em que você deseja armazenar o backup.

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

Evan Anderson
fonte
Além de mencionar os caminhos UNC, eu recomendaria que o usuário realmente se conectasse ao caminho UNC. A maneira rápida / fácil de fazer isso é abrir um navegador da Web e digitá-lo. Você será solicitado a fornecer um nome de usuário / senha e geralmente poderá dizer que deseja LEMBRAR esse usuário / senha para o futuro. Eu já vi muitas pessoas que estavam 99% do caminho e não conseguiram descobrir por que as coisas não funcionaram. TESTE SUA CONEXÃO! RI MUITO! :-)
KPWINC 13/07/2009
Era isso que eu estava procurando (a parte "domínio do pobre homem");) Obrigado!
1313 Martin Marconcini
4

Eu concordo totalmente com as duas respostas sobre o caminho UNC.

Eu também gostaria de acrescentar que, mesmo com unidades mapeadas, você tem uma solução simples. Você pode executar um backup em 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 que você executa.

Com o 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 na unidade mapeada (quando a conexão remota estiver muito lenta ...)

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

Bogdan_Ch
fonte
O utilitário ROBOCOPY do Win2003 Resource Kit fornece algumas opções extras sobre o XCOPY, que são úteis nesse tipo de operação. No meu caso, a capacidade de não substituir backups copiados anteriormente ou espelhar dois diretórios de backup é facilmente implementada sem scripts extras.
31909 kermatt
1

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

Você faz assim:

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

Acredito que, se o usuário que possui o trabalho for um sqs sysadmin, ele será executado sob o agente, caso contrário, será executado como um usuário não sysadmin.

Sam
fonte
1

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 nesta resposta do stackoverflow

Primeiro, você precisa ativar 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

Em seguida, 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'
Yepeekai
fonte
0

Lembre-se de que o SQL Server é muito intolerante a atrasos na rede. Se eles ocorrerem e tendem a ocorrer, o backup falhará. Eu não recomendo esta prática para ambientes de produção.

Melhor fazer backup localmente e depois copiar.

Steve Jones
fonte
0

A maneira mais fácil é criar uma unidade .vhd em um compartilhamento de rede por meio do gerenciamento de disco e atribuir uma letra de unidade a ela. O SQL pode acessar esta unidade sem nenhuma modificação.

Basta adicionar um script diskpart.exe ao agendador na inicialização para anexar automaticamente na reinicialização.

exemplo, selecione vdisk file = "\ {endereço IP / servidor} {networkhare} {filenamep.vhd}" anexar vdisk // lembra a última letra de unidade atribuída a.

Kimon
fonte