Eu tenho alguns .bak
arquivos 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.
Eu tenho alguns .bak
arquivos 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.
Respostas:
Aqui está o que eu sugiro:
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 .
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:
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.
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 ( IDENTITY
vs. SEQUENCE
, o postgres não sabe nada NVARCHAR
desde que você definiu a codificação no próprio banco de dados). O Postgres não sabe nada CREATE CLUSTERED INDEX
( CLUSTER
pode funcionar para você). Finalmente, como eu vejo nos comentários que você usará dados espaciais, o postgresql não conhece nada de CREATE SPATIAL INDEX
sintaxe. Você precisará instalar o postgis e usar a INDEXTYPE
palavra - chave para criar índices espaciais. Por fim, certifique-se de manipular esquemas adequadamente.
Longa história curta: