タイトルは自明です。そのような種類のインポートを直接行う方法はありますか?
10 に答える
SQL サーバーからの .BAK ファイルは Microsoft Tape Format (MTF) です。参照: http://www.fpns.net/willy/msbackup.htm
bak ファイルには、SQL サーバーがデータベースの格納に使用する LDF ファイルと MDF ファイルが含まれている可能性があります。
これらを抽出するには、SQL サーバーを使用する必要があります。SQL Server Express は無料で、十分に機能します。
そのため、SQL Server Express エディションをインストールし、SQL Server Powershell を開きます。そこに実行sqlcmd -S <COMPUTERNAME>\SQLExpress
します(管理者としてログインしている間)
次に、次のコマンドを発行します。
restore filelistonly from disk='c:\temp\mydbName-2009-09-29-v10.bak';
GO
これにより、バックアップの内容が一覧表示されます。必要なのは、論理名を示す最初のフィールドです。1 つは実際のデータベースで、もう 1 つはログ ファイルです。
RESTORE DATABASE mydbName FROM disk='c:\temp\mydbName-2009-09-29-v10.bak'
WITH
MOVE 'mydbName' TO 'c:\temp\mydbName_data.mdf',
MOVE 'mydbName_log' TO 'c:\temp\mydbName_data.ldf';
GO
この時点で、データベースが抽出されました。次に、Microsoft の「Sql Web Data Administrator」をインストールします。このエクスポート ツールと一緒に使用すると、データベースを含む SQL スクリプトが作成されます。
MySqlには、Microsoft sqlからdbをインポートするアプリケーションがあります。手順:
- MySql ワークベンチを開く
- [データベースの移行] をクリックします (表示されない場合は、MySql 更新からインストールする必要があります)。
- シンプルなウィザードを使用して移行タスク リストに従います。
私はそれを直接行う方法を見つけることができませんでした。
代わりに、bak ファイルを SQL Server 2008 Express にインポートしてから、MySQL Migration Toolkitを使用しました。
魔法のように働きました!
この問題では、回答がタイムリーに更新されません。そのため、2020 年の移行は非常MsSQL
にMySQL
簡単です。RebaseDataのようなオンライン コンバーターは、ワンクリックであなたの仕事をしてくれます。.bak
からのファイルをアップロードして、で読み取り可能な形式にMsSQL
変換するだけです。.sql
MySQL
追記:これはファイルを変換できるだけでなく、.bak
このサイトは必要なすべてのタイプのデータベース移行に対応しています。
私の MySQL のバックグラウンドは限られていますが、あなたがそれを行うのはあまり運がいいとは思いません。ただし、データベースを MSSQL サーバーに復元し、SSIS または DTS パッケージを作成してテーブルとデータを MySQL サーバーに送信することで、すべてのデータを移行できるはずです。
お役に立てれば
私が使用した方法には、リチャード・ハリソンの方法の一部が含まれていました。
したがって、SQL Server2008Expressエディションをインストールします。
これには、Webプラットフォームインストーラー「wpilauncher_n.exe」のダウンロードが必要です。これをインストールしたら、データベースの選択をクリックします(フレームワークとランタイムもダウンロードする必要があります)。
インストール後、Windowsのコマンドプロンプトに移動し、次の手順を実行します。
sqlcmd -S \ SQLExpressを使用します(管理者としてログインしている間)
次に、次のコマンドを発行します。
disk ='c:\ temp\mydbName-2009-09-29-v10.bak'からfilelistonlyを復元します。GOこれにより、バックアップの内容が一覧表示されます。必要なのは、論理名を示す最初のフィールドです。1つは実際のデータベースで、もう1つはログファイルです。
RESTORE DATABASE mydbName FROM disk ='c:\ temp \ mydbName-2009-09-29-v10.bak' WITH MOVE'mydbName' TO'c:\ temp \ mydbName_data.mdf'、MOVE'mydbName_log' TO'c:\ temp \ mydbName_data.ldf'; 行く
Web Platform Installerを起動し、[新機能]タブからSQL Server Management Studioをインストールし、データベースを参照してデータがそこにあることを確認しました...
その時点で、MSSQL「SQLインポートおよびエクスポートウィザード」に含まれているツールを試しましたが、csvダンプの結果には列名のみが含まれていました...
その代わりに、SQL ServerManagementStudioから「select*fromusers」などのクエリの結果をエクスポートしました。
上記のリチャードの解決策を試みている人のために、一般的なエラーをナビゲートするのに役立つ可能性のあるいくつかの追加情報があります。
1)restore filelistonlyを実行すると、オペレーティングシステムエラー5(アクセスが拒否されました)が発生する場合があります。その場合は、SQL Server Configuration Managerを開き、SQLEXPRESSのログインをローカルの書き込み権限を持つユーザーに変更します。
2)@ "これにより、バックアップの内容が一覧表示されます。必要なのは、論理名を示す最初のフィールドです"-ファイルに3つ以上のヘッダーが表示されている場合は、それらのファイルの処理方法も考慮する必要があります。 RESTOREDATABASEコマンド。データベースとログ以外のファイルをどう処理するかを指定しない場合、システムは.bakファイルにリストされている属性を使用しようとするようです。他の人の環境からファイルを復元すると、'パスに無効な属性が含まれます。ディレクトリである必要があります(問題のパスはマシンに存在しないため)。MOVEステートメントを提供するだけで、この問題は解決します。
私の場合、3番目のFTDataタイプのファイルがありました。追加したMOVEコマンド:
MOVE 'mydbName_log' TO 'c:\temp\mydbName_data.ldf',
MOVE 'sysft_...' TO 'c:\temp\other';
私の場合、実際には3番目のファイル用に新しいディレクトリを作成する必要がありました。最初に.mdfファイルと同じフォルダーに送信しようとしましたが、復元を実行すると、3番目のFTDataファイルで「正しく初期化できませんでした」というエラーが発生しました。
SQL Server の .bak ファイルはそのデータベースの方言に固有のものであり、MySQL とは互換性がありません。
etlalchemyを使用して、SQL Server データベースを MySQL に移行してみてください。これは、異なる RDBMS 間の移行を容易にするために私が作成したオープンソースのツールです。
簡単なインストールと例は、こちらの github ページで提供されています。プロジェクトの起源に関するより詳細な説明は、こちらにあります。
SQL Server データベースは、Microsoft 独自のものです。私が考えることができる2つのオプションは次のとおりです。
データベースを CSV、XML、または同様の形式でダンプし、それを MySQL にロードします。
MySQL への ODBC 接続をセットアップし、DTS を使用してデータを転送します。Charles Graham が示唆しているように、これを行う前にテーブルを構築する必要があるかもしれません。しかし、これは、SQL Enterprise Manager ウィンドウから対応する MySQL ウィンドウにカット アンド ペーストするのと同じくらい簡単です。
私はそれを非常に疑っています。Levi が言うように、DTS/SSIS を使用してこれを行うことができます。実際にデータをインポートせずにプロセスを開始することをお勧めします。基本的なテーブル構造をまとめるのに十分なだけです。次に、結果のテーブル構造を変更する必要があります。これは、どのような構造 tat が作成される可能性が高くても不安定になるためです。
これをさらに一歩進めて、すべてのデータを最初に文字列 (varchar) 形式で取り込むステージング領域を作成する必要がある場合もあります。次に、検証と変換を実行して「実際の」データベースに取得するスクリプトを作成できます。これは、特に日付を扱う場合、2 つのデータベースが常にうまく連携するとは限らないためです。