SQL ServerなしでSQL Server .bakファイルを復元できますか?


16

.bakSQL Server 2005ダンプの大きなファイルがいくつかあります。

SQL Serverを使用せずに、PostgreSQL、MySQL、またはフラットテキストファイルにこれらを復元できますか?

オープンソースのソリューションが最も役立ちます。


1
「このタスクのためだけにそうする必要はありません。」何故なの?それはあなたがやろうとしていることをする方法です。
-swasheck

他の何かに復元しても意味がありますか?結果のデータをどうしますか?
フィリ

1
@Phil結果のデータをPostgreSQLデータベース、またはフラットテキストファイルに移動したいと思います。
安倍

1
@swasheck引用された行を削除しました。質問を損ねているようです。しかし、あなたの質問に答えるために、私はそれを使用する方法がわからないので、私のサーバーはLinuxを実行しています。利用可能なWindowsラップトップには十分なスペースがありません。
安倍

2
まあそれは今まで持っていなかった情報です:)。追加情報をありがとう-私は計画があります
スワッシュック

回答:


19

ここに私が提案するものがあります:

  1. バックアップを保持するのに十分なディスク容量を持つWindowsを実行している仮想マシンを構築します。そこにバックアップファイルをコピーします。仮想マシンをまだ構築できない場合は、Oracle VirtualBoxなどの無料の製品を使用して構築できます
  2. SQL Serverの評価版をダウンロードしてインストールします。データベースエンジンと管理ツールの両方を含めるようにしてください-完全。
  3. VMにバックアップを保持するのに十分なスペースがあるが、それをリストアするのに十分なスペースがない場合、同じ名前のRed-Gateの製品の試用版を使用し「仮想リストア」を実行できます。まるで復元されたかのようなバックアップファイル)。それ以外の場合は、通常の方法でデータベースを復元します

  4. データベースが使用可能になったら(通常の復元または仮想復元を介して)、次の方法でスキーマとデータのスクリプトを生成できます。

    • Management Studioを開き、インスタンスに接続します。
    • オブジェクトエクスプローラーを開きます。
    • 新しく復元されたデータベースを右クリックし、[タスク]> [スクリプトの生成...]を選択します。
    • [次へ]、[次へ]の順にクリックします
    • [スクリプトオプションの選択]ページで、下にスクロールして[スクリプトデータ]をTrueに設定します。
    • 次へをクリックします
    • 関連するすべてのオブジェクトを確認し、「次へ」をクリックします
    • 必要なテーブルを確認し、[次へ]をクリックします
    • ファイルへのスクリプトを選択します。これで、SQL Serverの挿入構文を使用してすべてのオブジェクトとデータを含むファイルが作成されます。Postgresで機能する形式で出力するには、出力を再生する必要があります(小さな構文の違いはありません)。

または、bcpユーティリティを使用してデータをCSVファイルなどに抽出することもできますが、このテーブルごとに実行するか、巧妙なスクリプト(PowerShell、T-SQL、C#/ SMOなど)を使用する必要があります。 )すべてのbcpコマンドを生成します。CSVファイルを作成したら、Postgresにデータを一括ロードするのは簡単です(ただし、テーブルを生成するための作業はまだあります)。

最後の提案として、.bakファイルがひどくなく、データが機密でない場合、必要な形式でファイルを生成してみます。空き容量のあるWindows VMがたくさんあります。特に、ファイル共有サービスがサポートするほとんどのサイズよりも大きい場合は、.BAKファイルを取得できる場所に移動することが課題になります。


+1コンピューターに着いたら、bcpメソッドを提案するつもりでした。いくつかの落とし穴は、テーブルデリミタ、IDENTITY(シーケンス、pg)、nvarcharです。そうでなければ、これは編集セクションで私が提案したものです(sans Red-Gate)。
-swasheck

8個の20GBの.​​bakファイルがあります。お役に立てば幸いですが、gis.se、gis.stackexchange.com / q / 28281 / 3218gis.stackexchange.com / q / 28257で関連する質問をご覧ください。/ 3218 USDA土壌データベース(SSURGO)について。現在、シミュレーションモデリングのためにこれらのデータに自動化された方法でアクセスすることは非常に困難です。これらのデータをより使いやすい構造にすることは、科学にとって大きな利益になります。私のサーバーからダウンロードできます。データは機密ではなく、CDあたり50ドルまたはDVDあたり100ドル、あるいはおそらく拡張エージェントからそれ以下で入手できます。
安倍

GIS.SEでデータを取得する方法について回答があるようです。私は行ってそれらのサイトを見ましたが、ファイルがSQL Serverバックアップであることをどこで指定しているのかわかりません。これらのファイルはどこからどのように入手しましたか?
-swasheck

7

残念ながら、ファイル自体の内部についての深い知識がなくても、.bakファイルのコンテンツにアクセスする方法はありません。私はこの情報を知っている可能性のある人をここで考えることができますが、その人があなたにそれを行う方法を教えてくれるかどうかについて話すことはできません

そのため、SQL Serverインスタンスをインストールする必要があります。また、このインスタンスがPostgresサーバーと通信できることを確認する必要があります(pg_hba.confにフリギング)。そこで、データを移行するための適切なパスがいくつかあります。

最初の方法は、Postgres Windows ODBCドライバーをインストールし、pgサーバーへの接続をセットアップすることです。その後、SSISを使用してデータ移行のスクリプトを作成できます。このルートを使用する場合は、データベースサーバーをインストールするときにSSISをインストールすることをお勧めします。

もう1つのオプションにはODBCドライバー接続も含まれますが、SQL Serverでリンクサーバーを作成し、SQL Serverを介してpgインスタンスで挿入を実行できます。私は以前にこの正確な質問に答えたことがありますので、見つけるのは難しくありません。

編集

Aaronのコメントを組み込むには、SQL Serverを起動して実行したら、さまざまな方法でデータをフラットファイルにエクスポートすることもできます。この方法を選択した場合はお知らせください。そのための方法をいくつかご紹介します

編集(2):

事前に構造を作成しない限り、リンクサーバープロセスは最適なアプローチではない場合があります。これは私の好みの方法ですが、通常はすでに両側に構造があります。

アーロンバートランドの答えがベストアンサーとして残されています。データ型に加えて(IDENTITYvs. SEQUENCEではNVARCHAR、データベース自体にエンコーディングを設定しているため、postgresは何も知らないことに注意してください)。Postgresは何も知りませんCREATE CLUSTERED INDEXCLUSTERあなたに役立つかもしれません)。最後に、コメントで空間データを使用することになるので、postgresqlはCREATE SPATIAL INDEX構文について何も知りません。INDEXTYPE空間インデックスを作成するには、postgisをインストールし、キーワードを使用する必要があります。最後に、スキーマを適切に処理するようにしてください。

短い話:

  1. Aaron Bertrandの方法を使用してスクリプトとデータを生成します(おそらくテーブルレベルに固執します)
  2. インデックスDDL(まだ有効な場合)をメモしますが、含めないでください
  3. 構造とデータが整ったら、postgresにインデックスを作成します

3
Postgresと通信するようにSQL Serverを構成する必要はないと思います。SQL Serverをインストールしたら、Postgresが理解できるさまざまな形式にデータを抽出できると確信しています。
アーロンバートランド

謝罪。外部接続(この場合はSQL Server)を受け入れるようにPostgresを構成する必要があることを意味しました
-swasheck

謝らないで :-)私はちょうどあなたがPostgresのか、その逆に直接SQL Serverの話を持っている必要がないことを明確に..ました
アーロン・ベルトラン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.