Posso restaurar arquivos .bak do SQL Server sem o SQL Server?

16

Eu tenho alguns .bakarquivos grandes de um despejo do SQL Server 2005.

Posso restaurá-los sem usar o SQL Server, no PostgreSQL, MySQL ou em arquivos de texto simples?

Uma solução de código aberto seria mais útil.

Abe
fonte
11
"Eu preferiria não ter que fazer isso apenas para esta tarefa." Por que não? É a maneira de fazer o que você está tentando fazer.
swasheck
Restaurar para outra coisa faz algum sentido? O que você deseja fazer com os dados resultantes?
Philᵀᴹ
11
@ Phil Gostaria de mover os dados resultantes para um banco de dados PostgreSQL ou mesmo arquivos de texto simples.
Abe
11
@swasheck Eu removi a linha citada, pois parece ter prejudicado a questão. Mas, para responder à sua pergunta, porque não tenho idéia de como usá-lo, e meu servidor executa o Linux. Um laptop com Windows disponível não tem espaço suficiente.
Abe
2
Bem, essa é uma informação que não tínhamos antes agora :). Obrigado pela informação extra - Eu tenho um plano
swasheck

Respostas:

19

Aqui está o que eu sugiro:

  1. crie uma máquina virtual executando o Windows, com espaço em disco suficiente para armazenar o backup. Copie o arquivo de backup lá. Se você ainda não tem a capacidade de criar máquinas virtuais, poderá fazê-lo com produtos gratuitos como o Oracle VirtualBox .
  2. faça o download e instale a edição de avaliação do SQL Server . Certifique-se de incluir o mecanismo do banco de dados e as Ferramentas de Gerenciamento - Concluídas.
  3. se a VM tiver espaço suficiente para reter o backup, mas não houver espaço suficiente para restaurá-lo, você poderá executar uma "restauração virtual" usando a versão de avaliação de um produto da Red-Gate com o mesmo nome (o que permite interagir com o arquivo de backup como se tivesse sido restaurado). Caso contrário, restaure o banco de dados da maneira normal .

  4. Quando o banco de dados estiver disponível (por meio de uma restauração normal ou restauração virtual), você poderá gerar scripts para o esquema e os dados da seguinte maneira:

    • Abra o Management Studio e conecte-se à sua instância.
    • Abra o Pesquisador de Objetos.
    • Clique com o botão direito do mouse no banco de dados recém-restaurado, escolha Tarefas> Gerar scripts ...
    • Clique em Avançar, clique em Avançar
    • Na página "Escolha as opções de script", role para baixo e defina "Dados do script" como True
    • Clique em Next
    • Verifique todos os objetos relevantes e clique em Avançar
    • Marque as tabelas que você deseja e clique em Avançar
    • Escolha o script para um arquivo. Agora você terá um arquivo que contém todos os seus objetos e dados usando a sintaxe de inserção do SQL Server. Você precisará brincar com a saída para obtê-la em um formato que funcione no Postgres (não conheço pequenas diferenças de sintaxe).

Como alternativa, você pode tentar jogar com o utilitário bcp para extrair dados para arquivos CSV ou similares, mas precisará fazer isso tabela a tabela ou usar algum script inteligente (PowerShell, T-SQL, C # / SMO etc.) ) para gerar todos os comandos bcp para você. Uma vez nos arquivos CSV, deve ser trivial carregar em massa os dados no Postgres (mas você ainda terá algum trabalho para gerar as tabelas).

Como sugestão final, se o arquivo .bak não for gigantesco e os dados não forem confidenciais, estou mais do que disposto a tentar gerar arquivos para você no formato necessário. Eu tenho muitas VMs do Windows com espaço, o desafio seria levar o arquivo .BAK para um local onde eu possa recuperá-lo - especialmente se for maior do que a maioria dos serviços de compartilhamento de arquivos.

Aaron Bertrand
fonte
+1 Eu sugeriria o método bcp assim que chegasse ao computador. Algumas dicas são delimitadores de tabela, IDENTITY (sequência, em pg), nvarchar, apenas para citar alguns. Caso contrário, é isso que eu teria sugerido (sem Red-Gate) na minha seção de edição.
swasheck
Existem 8. 20 GB de arquivos .bak, e seria ótimo se você pudesse ajudar, mas consulte as perguntas relacionadas em gis.se, gis.stackexchange.com/q/28281/3218 e gis.stackexchange.com/q/28257 / 3218 sobre o USDA Soils Database (SSURGO). Atualmente, é muito difícil usar o acesso a esses dados de maneira automatizada para modelagem de simulação. Seria um grande benefício para a ciência ter esses dados em uma estrutura mais útil. Você pode baixá-lo do meu servidor. Os dados não são confidenciais, qualquer um pode obtê-lo por US $ 50 / CD ou US $ 100 / DVD ou talvez menos do seu agente de extensão.
Abe
Parece que você tem respostas sobre como obter os dados no GIS.SE. Analisei esses sites, mas não vejo onde eles especificam que o arquivo é um backup do SQL Server. Como / de onde você obteve esses arquivos?
swasheck
7

Infelizmente, não existe uma maneira de obter acesso ao conteúdo de um arquivo .bak sem ter um conhecimento profundo das partes internas do próprio arquivo. Posso pensar em uma pessoa aqui que possa estar a par dessa informação, mas não posso falar se essa pessoa lhe diria ou não como fazê-lo.

Então, você precisará instalar uma instância do SQL Server. Você também precisará garantir que esta instância possa conversar com o servidor Postgres (com o pg_hba.conf). Uma vez lá, você tem alguns bons caminhos para migrar os dados.

O primeiro caminho seria instalar o driver ODBC do Windows do Postgres e configurar uma conexão com o servidor pg. Em seguida, você pode usar o SSIS para criar um script de migração de dados. Se você for seguir esse caminho, sugiro instalar o SSIS ao instalar o servidor de banco de dados.

A outra opção também envolve a conexão do driver ODBC, mas você pode criar um servidor vinculado no SQL Server e executar inserções na instância pg através do SQL Server. Já respondi a essa pergunta exata aqui antes, portanto não deve ser difícil de encontrar.

EDITAR

Para incorporar o comentário de Aaron, depois de instalar o SQL Server, você também pode exportar os dados para arquivos simples de várias maneiras diferentes. Se você escolher esse caminho, avise-me e postarei algumas maneiras de fazer isso

EDIT (2):

O processo do servidor vinculado pode não ser a melhor abordagem, a menos que você queira criar as estruturas antecipadamente. É o meu método preferido, mas geralmente já tenho a estrutura nos dois lados.

Isso deixa a resposta de Aaron Bertrand como a melhor resposta. Observe que, além dos tipos de dados ( IDENTITYvs. SEQUENCE, o postgres não sabe nada NVARCHARdesde que você definiu a codificação no próprio banco de dados). O Postgres não sabe nada CREATE CLUSTERED INDEX( CLUSTERpode funcionar para você). Finalmente, como eu vejo nos comentários que você usará dados espaciais, o postgresql não conhece nada de CREATE SPATIAL INDEXsintaxe. Você precisará instalar o postgis e usar a INDEXTYPEpalavra - chave para criar índices espaciais. Por fim, certifique-se de manipular esquemas adequadamente.

Longa história curta:

  1. Gere scripts e dados usando o método de Aaron Bertrand (eu provavelmente ficaria com o nível da tabela)
  2. Anote o DDL do índice (se ainda for válido), mas não o inclua
  3. Crie índices no postgres quando a estrutura e os dados estiverem em vigor
swasheck
fonte
3
Eu não acho que você precise configurar o SQL Server para conversar com o Postgres. Tenho certeza de que, depois de instalar o SQL Server, você poderá extrair os dados para vários formatos. O Postgres entenderá.
Aaron Bertrand
Desculpas. Eu quis dizer que você precisaria Postgres configurar para aceitar conexões externas (SQL Server, neste caso)
swasheck
Não peça desculpas. :-) Eu só estava esclarecendo que você não precisa ter talk SQL Server diretamente para Postgres ou vice-versa ..
Aaron Bertrand