Como posso fazer backup de um banco de dados remoto do SQL Server em uma unidade local?

241

Preciso copiar um banco de dados de um servidor remoto para um local. Tentei usar o SQL Server Management Studio, mas ele faz backup apenas em uma unidade no servidor remoto.

Alguns pontos:

  • Não tenho acesso ao servidor remoto de maneira que possa copiar arquivos;
  • Não tenho acesso para configurar um caminho UNC para o meu servidor;

Alguma idéia de como posso copiar esse banco de dados? Terei que usar ferramentas de terceiros?

Fernando
fonte
1
Eu acho que se você não tiver acesso à estrutura de diretórios, será desafiado a tentar fazer isso.
JNK
3
Você está apenas tentando copiar o banco de dados, em vez de fazer backup específico? Nesse caso, você pode usar o Assistente para Copiar Banco de Dados ou (no SQL Server 2008) usar a opção "Gerar Scripts" para criar scripts para o Esquema e Dados. O Redgate SQL Compare e o Data Compare também podem ser úteis aqui.
Martin Smith
1
@ MartinSmith De acordo com a sua sugestão, eu gerei script usando a Generate and Publish Scriptsopção. Eu recebo todas as tabelas e esquemas. Mas não obtive nenhum dado com tabelas. Como posso consertar isso.
ur verdadeiramente amigo

Respostas:

182

No Microsoft SQL Server Management Studio, você pode clicar com o botão direito do mouse no banco de dados que deseja fazer backup e clicar em Tarefas -> Gerar scripts.

Isso abre um assistente onde você pode definir o seguinte para executar um backup decente do seu banco de dados, mesmo em um servidor remoto :

  • Selecione o banco de dados que você deseja fazer backup e clique em Avançar.
  • Nas opções apresentadas a você:
    1. Em 2010: em Opções de tabela / exibição, altere 'Script Data' e 'Script Indexes' para True e pressione Next,
    2. Em 2012: em 'Geral', altere 'Tipos de dados para script' de 'Somente esquema' para 'Esquema e dados'
    3. Em 2014: a opção de script dos dados agora está "oculta" na etapa "Definir opções de script", você deve clicar no "Avançado" e definir o valor "Tipos de dados para script" para "Esquema e dados"
  • Nas próximas quatro janelas, pressione 'selecionar tudo' e, em seguida,
  • Escolha o script para uma nova janela de consulta

Uma vez feito isso, você terá um script de backup à sua frente. Crie um novo banco de dados local (ou remoto) e altere a primeira instrução 'USE' no script para usar seu novo banco de dados. Salve o script em um local seguro e vá em frente e execute-o no seu novo banco de dados vazio. Isso deve criar um banco de dados local (quase) duplicado e você pode fazer backup como desejar.

Se você tiver acesso total ao banco de dados remoto, poderá selecionar 'script todos os objetos' na primeira janela do assistente e, em seguida, alterar a opção 'Banco de Dados de Script' para True na próxima janela. Cuidado, porém, você precisará realizar uma pesquisa completa e substituir o nome do banco de dados no script por um novo banco de dados que, nesse caso, não será necessário criar antes de executar o script. Isso deve criar uma duplicata mais precisa, mas às vezes não está disponível devido a restrições de permissões.

Daniel Gill
fonte
9
No SQL Server Management Studio 2012, não existe uma opção como 'Dados do Script'; portanto, nas versões mais recentes, faça o seguinte na etapa 2: em 'Geral', altere 'Tipos de dados para script' de 'Somente esquema' para 'Esquema e dados ".
berezovskyi
1
Eu verifiquei no SQL Server 2008 R2 e funcionou como charme. No cuidado de usá-lo para a estratégia de backup, preciso de algum trabalho adicional sozinho, mas acho que é melhor do que usar algumas ferramentas de terceiros como o RedGate etc. controlar e reduzir a simplicidade e esclarecer o script. Muito obrigado.
QMaster
2
@ShaunLuttin Se você mudar de 'Tipos de dados para script' de 'Somente esquema' para 'Esquema e dados na segunda etapa (em 2012), as instruções INSERT deverão ser exibidas.
Daniel Gill
6
No SSMS 2014, a opção de alterar apenas do esquema para esquema e dados agora está oculta por trás de um "Avançado" ao selecionar onde salvar o script.
MushinNoShin
2
Quando tento executar um script usando esse método, recebo um erroor do SQL Server Management Studio sobre "Memória insuficiente para continuar a execução do programa. (Mscorelib)"
Rob
51

Primeiro, conceda permissões de controle total a um caminho local em sua máquina (como mostrado abaixo) com Todos. (Ou, como alternativa, conceda permissões especificamente à conta do SQL Server Agent).

Segundo, execute o seguinte:

BACKUP DATABASE [dev] TO  DISK = N'\\myMachine\c\dev.bak' WITH COPY_ONLY, INIT;
T. Webster
fonte
14
Essa é a resposta para a pergunta. Isso "fará backup de um banco de dados remoto do SQL Server em uma unidade local" e não "tabelas e dados de script". Alguém: marque esta resposta como aceita e remova a resposta errada. Daniel Gill
Henrik Holmgaard Høyer 19/17/17
enquanto eu acho que essa é a melhor resposta, a pergunta é "Alguma idéia de como copiar esse banco de dados?" não especificamente backup.
22417 Oliver Townshend
11
Isso pressupõe que a máquina remota tenha acesso aos arquivos das máquinas locais, o que não é o caso geral.
Anders Lindén 22/10
Gostaria de poder te votar mais de uma vez. Esta é a resposta perfeita e algo que eu queria fazer há anos. Tão simples ... tão perfeito. Ele não resolverá todos os casos do mundo, mas funcionou perfeitamente para o meu, onde sou remotado em uma máquina, mas não na máquina que possui o SQL Server.
Wade Hatler,
Isso também tem trabalho para mim. Apenas compartilhe a pasta local temporariamente com todos , faça o backup e desative o compartilhamento. Eu também acho que essa deve ser a resposta correta.
Fred Rogers
51

Para copiar apenas dados e esquema (não copiará procedimentos, funções, etc. armazenados), use o Assistente para Importação e Exportação do SQL Server e escolha Novo ... ao escolher o banco de dados de destino.

Clique com o botão direito do mouse em Banco de Dados> Tarefas> Importar Dados.

Escolha uma fonte de dados

  • Fonte de dados : SQL Server Native Client
  • Nome do servidor: o servidor remoto
  • Autenticação :
  • Banco de Dados : o nome do banco de dados

Escolha um destino

  • Fonte de dados : SQL Server Native Client
  • Nome do servidor: o servidor local
  • Autenticação :
  • Base de dados :New...

O resto é direto.

Shaun Luttin
fonte
2
Isso funcionou muito melhor para mim do que a resposta aceita. Lida com relações entre tabelas de maneira muito mais limpa.
MushinNoShin
7
Welp. Infelizmente, não define identidades e restrições padrão. :(
MushinNoShin
1
Essa é uma maneira muito mais melhor do que gerar scripts. Os scripts podem ser bem grandes às vezes. Preferência pessoal. Sem ofensa :)
Vikas
Isso é muito mais simples e seria meu caminho para, mas se por algum motivo você precisar de colunas como object_id, create_data, modifique a data COMO ESTÁ no sys.tables, lembre-se de que elas serão modificadas na criação.
Crismogram 9/09/19
@MushinNoShin, você pode gerar scripts primeiro e depois importar / exportar dados ativando a inserção de identidade na etapa de mapeamento.
Hasang
29

Você não pode criar um backup de um servidor remoto para um disco local - simplesmente não há como fazer isso. E também não há ferramentas de terceiros para fazer isso, tanto quanto eu sei.

Tudo o que você pode fazer é criar um backup na máquina do servidor remoto e pedir que alguém o feche e envie para você.

marc_s
fonte
5
Discordo. Em muitas circunstâncias, você pode usar o comando 'Gerar scripts' do MS SQL Server Management Studio para criar um script que possa ser executado para gerar um banco de dados local, com o qual você poderá fazer o que desejar. Veja minha resposta abaixo ou o comentário de Martin Smith sobre a questão.
Daniel Gill
19
@Rafid: sim -mas isso é não um verdadeiro BACKUP - é uma exportação de script / dados .....
marc_s
2
@marc_s O que há em um "backup verdadeiro" diferente de uma cópia exportada? O registro? Algo mais?
Dronz 20/03/12
31
@Dronz: SIM! A exportação de script reproduzirá a estrutura e possivelmente até os dados em uma tabela - mas não pode incluir itens como logs e estatísticas de transações e outras partes vitais de um banco de dados do SQL Server.
marc_s
1
@ ShaunLuttin, você pode incluir os dados.
Erwin Rooijakkers
17

Sei que esta é uma resposta tardia, mas tenho que fazer um comentário sobre a resposta mais votada que diz usar a opção de gerar scripts no SSMS.

O problema é que essa opção não gera necessariamente o script na ordem de execução correta, porque não leva em consideração as dependências.

Para bancos de dados pequenos, isso não é um problema, mas para bancos maiores, certamente é porque exige que você reordene manualmente esse script. Tente isso no banco de dados 500 objetos;)

Infelizmente, neste caso, a única solução são ferramentas de terceiros.

Usei com êxito ferramentas de comparação do ApexSQL (Diff e Data Diff) para tarefas semelhantes, mas você não pode errar com outras já mencionadas aqui, especialmente o Red Gate.

Phill C
fonte
1
eu não concordo, para mim o sql sempre ordena as dependências corretamente, você tem um exemplo específico de como reproduzir o comportamento que você mencionou?
Sawe
Além disso, há uma opção para levar este assunto em consideração
Gaspa79
13

Você pode tentar SQLBackupAndFTP . Ele criará scripts para criar todos os objetos em seu banco de dados e instruções INSERT para todas as linhas em suas tabelas. Em qualquer banco de dados, você pode executar esse arquivo de script e o banco de dados inteiro será recriado.

adinas
fonte
4
Destacado. Tive que instalar uma nova versão do sql server management studio e não consegui escrever scripts como antes. Esta ferramenta cuidou de-lo rapidamente e sem problemas mesmo sem ter acesso completo ao servidor remoto (appharbor sqlserver add-on)
Daniel Gill
1
Observe que este software utiliza muito recursos.
Dementic
Além de ser de buggy e não totalmente certo de que isso funcione corretamente. Não consegue conectar nenhum problema a um servidor remoto via PHP, mas isso não pode? Quando tenho as configurações adequadas no próprio servidor. Então você ... seguindo em frente.
Shawn Rebelo
7

Veja este blog para obter uma descrição de como copiar um banco de dados remoto:

Faça backup de um banco de dados do SQL Server 2008 em um ambiente de hospedagem compartilhada

Marcel W
fonte
1
Essa abordagem explica como criar um script para a estrutura do banco de dados, criá-lo localmente e, em seguida, usar as ferramentas de gerenciamento SQL para copiar dados entre um banco de dados local e remoto.
de Drew Noakes
1
Você pode alternar a opção 'Script Data' para True para também fazer o script dos dados de uma só vez.
Daniel Gill
Cópia e backup são duas coisas diferentes.
Anders Lindén 22/10
Este foi perfeito porque eu preciso trabalhar em um banco de dados de 2016 usando o sql server 2012 e não posso usar um backup 2.016 em 2012.
majjam
6

Existe a solução de 99% para obter o arquivo bak do servidor sql remoto para o seu PC local. Eu o descrevi lá no meu post http://www.ok.unsode.com/post/2015/06/27/remote-sql-backup-to-local-pc

Em geral, será assim:

  • executar script sql para gerar arquivos bak

  • execute o script sql para inserir cada arquivo bak na tabela temporária com o tipo de campo varbinário e selecione esta linha e faça o download dos dados

  • repetir anterior. pise quantas vezes você tiver arquivos bak

  • executar script sql para remover todos os recursos temporários

é isso, você tem seus arquivos bak no seu PC local.

okarpov
fonte
5

Você pode usar o banco de dados de cópia ... clique com o botão direito do mouse no banco de dados remoto ... selecione tarefas e use o banco de dados de cópia ... ele perguntará sobre o servidor de origem e o servidor de destino. que sua origem é remota e o destino é sua instância local do servidor sql.

É tão fácil

Pouyan
fonte
O banco de dados de cópia requer privilégios do SysAdmin. Esta não é uma solução para usuários regulares do banco de dados.
Buggieboy #
Na minha edição de hoje, nossa equipe de desenvolvimento tem privilégios de administrador de sistema. Então, eu vou usar a abordagem de Pouyan.
Códigos com Hammer
mas eu preciso fazê-lo em uma base diária e eu preciso de roteiro para alcançar este objetivo
clarificador
3

A turma do AppHarbor está lutando com isso e desenvolveu uma solução temporária usando objetos de gerenciamento do servidor SQL e SqlBulkCopy.

Confira o post no blog ou vá direto ao código .

Eles só testaram com AppHarbor, mas pode valer a pena conferir.

Daniel Gill
fonte
3

As respostas acima não estão corretas. Um script SQL, mesmo com dados, não é um backup. Um backup é um arquivo BAK que contém o banco de dados completo em sua estrutura atual, incluindo indizes.

Obviamente, um arquivo BAK contendo o backup completo com todos os dados e indizes de um banco de dados remoto do SQL Server pode ser recuperado em um sistema local.

Isso pode ser feito com um software comercial, para salvar diretamente um arquivo BAK de backup na sua máquina local, por exemplo. Este criará diretamente um backup a partir de um banco de dados SQL remoto na sua máquina local.

Matthias
fonte
Você precisa de permissões sysadmin para fazer isso.
LarryBud
Certo. A conta (windows ou sql server) usada para conectar-se remotamente à instância do sql server precisa de permissões sysadmin para recuperar os junks de backup e armazená-los na máquina local. A ferramenta mencionada no software da FIDA criptografa e compacta o tráfego de rede de e para o servidor sql enquanto recupera os arquivos de backup. Depois de ter o arquivo bak na sua máquina, você pode restaurá-lo onde quiser.
Matthias
1

Como Martin Smith disse, se você não tiver acesso à máquina ou ao sistema de arquivos, precisará usar ferramentas de terceiros, como Red Gate ou Adept, para fazer uma comparação nos sistemas de origem e destino. As ferramentas do Red Gate permitem copiar os objetos e esquemas E os dados.

Vinnie
fonte
1

você pode fazer um backup de uma instância remota do SQL Server para sua unidade local, desde que a seguinte condição seja atendida:

  1. Você tem uma pasta compartilhada na sua unidade local.
  2. a pasta compartilhada pode ser acessada na caixa SQL Server.

Agora, ao especificar o comando de backup, use o caminho da pasta compartilhada ao especificar a opção de disco.

Naresh
fonte
E qual é a sua resposta diferente da resposta do @Vivek?
Martin Schröder
1

apenas tente este:

1) Compartilhe uma pasta com permissão total no seu computador

2) no servidor SQL: painel de controle -> ferramentas administrativas -> serviços -> clique com o botão direito do mouse em todos os serviços SQL

na guia logon deve começar com o administrador do domínio

3) no assistente de manutenção do servidor sql, coloque o local e a pasta de backup (\ yourcomputername \ sharedfoldernam)

Fiz backup remoto em 8 servidores do sql server 2008 em nossa empresa

Parsaria
fonte
1

Estou surpreso que ninguém tenha mencionado a solução de backup com script oferecida por Ola Hallengren, que absolutamente permite que você faça backup de um banco de dados de um servidor remoto para um caminho UNC na sua rede de graça (na verdade, estou usando-o enquanto digito para fazer backup de um banco de dados de um servidor de desenvolvimento no qual não tenho acesso remoto além do SSMS para um compartilhamento no meu PC de desenvolvimento). Está disponível desde 2008 e funciona no SQL Server 2005 até 2014.

Você precisa garantir que o compartilhamento que você configurou tenha acesso suficiente: eu costumo permitir a leitura / gravação completa no grupo de anúncios 'Todos' pelo período do processo de backup, porque tenho preguiça de descobrir algo mais restritivo, mas isso é escolha pessoal.

É bem usado, bem documentado e muito flexível. Costumo colocar os procs e a tabela de log em seu próprio banco de dados de utilitários e depois acioná-lo. Desde que tudo esteja no seu domínio do AD e não seja remoto no sentido de que está em um servidor co-localizado ou algo assim, isso funciona muito bem.

Desculpas por adicionar a um tópico muito antigo, mas me deparei com isso ao procurar outra coisa e achei que era uma adição útil para quem procura esse tópico.

Steve Pettifer
fonte
1

Para 2019, eu recomendaria o uso do mssql-scripter se você quiser um backup local real. Sim, são scripts, mas você pode ajustá-lo para incluir o que quiser, que pode incluir todos os dados. Eu escrevi um script bash para fazer backups diários automatizados usando isso em uma máquina Linux. Confira minha essência:

https://gist.github.com/tjmoses/45ee6b3046be280c9daa23b0f610f407
Tim Moses
fonte
0

Eu poderia fazer isso uma vez ... Para fazer isso, você precisa ter um compartilhamento aberto no servidor remoto. então você pode colocar diretamente o backup no compartilhamento em si, além do local padrão ...

Normalmente, o administrador faz o backup e o compartilha conosco em alguma pasta compartilhada. Eu tentei se isso funcionaria se eu colocar o backup lá. Funcionou.

Vivek
fonte
0

Se você usar o Gerar scripts no SSMS, clique no botão Avançado. Na opção 'Gerar scripts para os objetos dependentes', clique em Verdadeiro. Ao clicar em que quaisquer dependências de cada objeto também serão roteirizadas na ordem correta.

user2684
fonte
True é o padrão no SSMS v17.8.1.
22418 Chris Catignani
0

Alguns programas de backup de terceiros permitem configurar a transferência de arquivos com permissões de rede específicas. É muito útil quando o serviço SQL Server está sendo executado em uma conta restrita e não possui permissões de rede suficientes. Tente usar o EMS SQL Backup, que resolve esta tarefa.

curandero
fonte
0

Eu uso o Redgate backup pro 7 ferramentas para esse fim. você pode criar espelho a partir do arquivo de backup em criar bloco em outro local. e pode copiar o arquivo de backup após criar automaticamente na rede e no armazenamento do host.

mehdi lotfi
fonte
0

Crie uma pasta compartilhada local, com privilégios de leitura / gravação para "todos"

Conecte-se ao banco de dados de destino, inicie o backup e aponte para o compartilhamento como abaixo

\ mymachine \ shared_folder \ mybackup.bak

(Tentei no ambiente de domínio do Windows)

Rajesh Thampi
fonte
0

Sei que esta é uma postagem mais antiga, mas, pelo que vale, descobri que a solução "mais simples" é apenas clicar com o botão direito do mouse no banco de dados e selecionar "Tarefas" -> "Exportar aplicativo da camada de dados". É possível que esta opção esteja disponível apenas porque o servidor está hospedado no Azure (pelo que me lembro de trabalhar com o Azure no passado, o formato .bacpac era bastante comum lá).

Feito isso, você pode clicar com o botão direito do mouse na lista "Bancos de dados" do servidor local e usar o "Importar aplicativo da camada de dados" para obter os dados em sua máquina local usando o arquivo .bacpac.

Basta ter em mente que a exportação pode demorar muito tempo. Demorou aproximadamente duas horas para a mina terminar de exportar. A parte de importação é muito mais rápida, no entanto.

Kiran Ramaswamy
fonte
-1

Se você estiver em uma rede local, poderá compartilhar uma pasta em sua máquina local e usá-la como pasta de destino para o backup.

Exemplo:

  • Pasta lo cal:

    C:\MySharedFolder -> URL: \\MyMachine\MySharedFolder

  • SQL Server remoto:

    Select your database -> Tasks -> Back Up -> Destination -> Add -> Apply '\\MyMachine\MySharedFolder'

Tonatio
fonte