web-dev-qa-db-ja.com

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

大きな.bak SQL Server 2005ダンプのファイル。

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

オープンソースのソリューションが最も有用でしょう。

17
Abe

これが私が提案するものです:

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

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

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

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

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

19
Aaron Bertrand

残念ながら、ファイル自体の内部について深い知識がなければ、.bakファイルの内容にアクセスする方法はありません。この情報を知っているかもしれない人がここにいると思いますが、その人がどうやってそれを行うかを教えてくれるかどうかは言えません

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

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

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

編集

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

編集(2):

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

これにより、Aaron Bertrandの回答が最良の回答になります。データタイプ(IDENTITYSEQUENCEの比較)に加えて、postgresはデータベース自体にエンコードを設定しているため、NVARCHARを認識しません。 PostgresはCREATE CLUSTERED INDEXを何も知りません( CLUSTER はあなたのために働くかもしれません)。最後に、コメントで空間データを使用することになるので、postgresqlはCREATE SPATIAL INDEX構文を認識しません。空間インデックスを作成するには、postgisをインストールし、INDEXTYPEキーワードを使用する必要があります。最後に、スキーマを適切に処理するようにしてください。

短い話:

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