データベース比較ツールです。
便利なのになぜか有名じゃないみたいなので紹介。
概要
2つのDB間で、スキーマやデータの比較を一発で行なってくれるツールです。(機能限定版は無料)
比較したデータベース間でデータをコピーして、Update(やInsert/Delete)用のSQLを生成したり、
そのまま実行したりできます。
開発環境、ステージング環境、プロダクション環境間でDBの内容に差異が出てしまった場合などに、
差異の部分を一瞬で抽出し、その場で適切に解消する事ができます。
1:ダウンロード方法
本家:https://product.popular-soft.com/beetle-jp/editInitAction.action
または
Vector:http://www.vector.co.jp/soft/winnt/business/se498449.html
からExpressエディションをダウンロードし、インストールしてください。
2:DBの指定の仕方
- 起動すると「接続一覧」ダイアログが表示されます。
- ここで、比較対象の2つのDBを順番に指定します。
- 「新規」ボタンを押すと、「比較対象設定」ダイアログが開きます。
- 「左側データソース」のデータベースアイコンをクリックすると、「データソースの選択」ダイアログが開きます。(右側もやり方は同じです)
- ここから先は、DBの種類ごとに指定の仕方が異なるので、以下で別々に説明します。
- 左側と右側のデータベースを両方指定したら、「確定」ボタンを押します。
2-1:SQL Server
- 「データソース」選択欄で「Microsoft SQL Server」を選びます。
- 「データ プロバイダ」選択欄で「.NET Framework SQL Server用データ プロバイダ」を選びます。
3. 「OK」ボタンを押すと「接続のプロパティ」ダイアログが開きます。
- 接続情報を設定します。設定が正しいかは、「テスト接続」ボタンの押下で確認できます。
- 「OK」ボタンを押して設定を確定して下さい。
2-2:MySQL
- 「データソース」選択欄で「その他」を選びます。
- 「データ プロバイダ」選択欄で「.NET Framework MySQL用データ プロバイダ」を選びます。
接続情報を設定します。設定が正しいかは、「テスト接続」ボタンの押下で確認できます。
「OK」ボタンを押して設定を確定して下さい。
2-3:Postgresql
PostgreSQLの場合は、WindowsのコントロールパネルからODBCドライバの設定を行わなければならないので、面倒です。
以下に、その設定方法を記載します。
2-3-1:odbcドライバのダウンロード
上記のページから最新版(ページの一番下の方)のインストーラーをダウンロードします。
★重要: Popular Beetleは32bitアプリです。64bitのドライバは使えないので、x64と書かれていないドライバを選んでください。
2-3-2:odbcドライバのWindowsへのインストール
ダウンロードしたインストーラーを実行し、普通にインストールします。
2-3-3:コントロールパネルでのodbcデータソースの設定(32bit Windows の場合)
- 「コントロールパネル」 ⇒ 「管理ツール」 ⇒ 「データソース(ODBC)」を開くと、「ODBCデータソースアドミニストレーター」ダイアログが開きます。
- 「ユーザーDSN」タブで「追加」ボタンを押下すると「データソースの新規作成」ダイアログが開きます。
- 「PostgreSQL Unicode」を選択してください。(選択肢に無い場合は、「2-3-3’:コントロールパネルでのodbcデータソースの設定(64bit Windows の場合)」の手順を実行して下さい)
「データソース名」はデフォルトで「PostgreSQL35W」となっていると思いますので、対象DBが判るような名前にして下さい。(この設定は、DB毎に必要です)
★日本語が混ざるとPopularBeetleで上手く行きません。半角英数で指定してください。
接続情報を設定します。設定が正しいかは、「テスト接続」ボタンの押下で確認できます。
「保存」ボタンでダイアログを閉じると、「ユーザーDSN」タブに設定した項目が追加されています。
もう一度「追加」ボタンを押下し、同じ手順で比較対象のテーブルの設定も追加します。
2-3-3’:コントロールパネルでのodbcデータソースの設定(64bit Windows の場合)検証環境:Windows7
64bit版Windows の場合、コントロールパネルからODBCデータソースを設定しようとしても選択肢に「PostgreSQL Unicode」が出てきません。
以下の手順で、32bit版のODBCデータソースの設定を行って下さい。
- もし、コントロールパネルから「ODBCデータソースアドミニストレーター」ダイアログを開いていたら、それらは全て閉じてください。(開いていると、選択肢に「PostgreSQL Unicode」が出てきません。
- Explorerで「C:\Windows\SysWOW64」フォルダを開きます。
- 「odbcad32.exe」を実行すると、「ODBCデータソースアドミニストレーター」ダイアログが開きます。
- 「ユーザーDSN」タブで「追加」ボタンを押下すると「データソースの新規作成」ダイアログが開きます。
- 「PostgreSQL Unicode」を選択してください。
「データソース名」はデフォルトで「PostgreSQL35W」となっていると思いますので、対象DBが判るような名前にして下さい。(この設定は、DB毎に必要です)★日本語が混ざるとPopularBeetleで上手く行きません。半角英数で指定してください。
接続情報を設定します。設定が正しいかは、「テスト接続」ボタンの押下で確認できます。
「保存」ボタンでダイアログを閉じると、「ユーザーDSN」タブに設定した項目が追加されています。
もう一度「追加」ボタンを押下し、同じ手順で比較対象のテーブルの設定も追加します。
2-3-5:Popular Beetleの指定
- 前述の手順で、Popular Beetleの「データソースの選択」ダイアログを開きます。
- 「データソース」選択欄で「Microsoft ODBC データソース」を選びます。
「ユーザー名またはシステムデータソース名を使用」のプルダウンを開くと、2-3-3で追加した選択肢が表示されます。
ユーザー名とパスワードを入力します。設定が正しいかは、「テスト接続」ボタンの押下で確認できます。
「OK」ボタンを押して設定を確定して下さい。
3:使い方
比較する2つのデータベースの設定を確定すると、「オブジェクト選択」ダイアログが開きます。
何を比較するかをチェックボックスで選び、OKボタンを押すと、比較を実行します。
(適当なDBが手元に無いので、スクリーンショットは省略)
3-1:2つのDBのスキーマを比較する
- 「3:使い方」に記載の「オブジェクト選択」ダイアログで、「スキーマ」チェックボックスをチェックし、OKボタンを押下します。
- 2ペインのウィンドウが表示されます。
- 左のペインには、テーブル単位で左右のデータベースを比較した結果が表示されています。赤文字がスキーマが異なるテーブル、黒文字がスキーマが同一のテーブルです。
- 詳細に比較したい赤文字の行を選択します。
- 右クリックし、「ダイレクトスキーマ比較」メニューを選択します。(※行をダブルクリックした場合、スキーマではなくレコードを比較した内容が右のペインに表示されます)
- 右のペインに、カラム毎の詳細なスキーマの比較結果が表示されます。一目瞭然ですが、青背景の行が違いのあるカラムです。赤文字が、違いのある設定値です。
3-2:2つのDBのレコードを比較する
下記では、最初に全テーブルの全データ(無料版は、テーブル毎に1万件まで)を比較する方法を説明しています。
しかしこの方法は最初の比較に時間がかかるのと、メモリが厳しい場合に途中でメモリ不足でエラーが発生する場合があるので、「どのテーブルに差異があるのか判らない」というケースでのみ使用するべきでしょう。
比較したいテーブルが決まっているのであれば、上記のスキーマ比較の状態から、左ペインのテーブル名をダブルクリックする事で、右ペインにデータ比較結果を表示する事ができます。
日常的には、そちらの方法の方が早いのでよく使うことになるでしょう。
- 「3:使い方」に記載の「オブジェクト選択」ダイアログで、「レコード」のチェックボックスをチェックし、OKボタンを押下します。(「スキーマ」も自動的に比較されます)
- 2ペインのウィンドウが表示されます。
- 左のペインには、テーブル単位で左右のデータベースを比較した結果が表示されています。青背景の行が、中身のレコードに違いのあるテーブルです(※赤文字はスキーマが異なるテーブル、黒文字がスキーマが同一のテーブルです。) 青背景の行をダブルクリックすると、右ペインに詳細なレコードの比較結果が表示されます。一目瞭然ですが、青背景の行が違いのあるレコードです。赤文字が、違いのある値です。
- 右ペインの行をダブルクリックすると、対象レコードのカラム毎の比較結果がダイアログで表示されます。カラム数が多いテーブルのチェックに便利です。
- 他に、ウィンドウ上部の各ボタンで、比較結果の表示方法を色々選べます(※「マッチング項目設定」ボタンについては、「3-3:主キー以外を手がかりにレコードを比較する」で後述します。)
3-3:主キー以外を手がかりにレコードを比較する
PopularBeetleは、デフォルトでは「主キーが一致しているレコード」同士を比較しています。
そのため、主キーがないテーブルや、オートインクリメント等によって主キーが異なるテーブルは、実質的に対応するデータがあっても「データが異なる」と判定されます。
これを回避する方法を説明します。
- 左のペインで、データを比較したいテーブルを選択します。
- 右クリックし、「マッチング項目設定」メニューを選択すると、「マッチング項目の選択」ダイアログが表示されます。(上部メニューの「→←」ボタンでも良いです)
- マッチング項目一覧が表示されます。「左側列名」の列に左側のテーブルのカラム名が表示されます。「右側列名」の列に右側のテーブルのカラム名が表示されます。
- 同一名称のカラムについては同じ行に表示されます(同一名称であっても、カラムの並び順が異なっている場合は、別の行に表示されます)
- 一番左のチェックボックス列は、最初は主キーのカラムのみがチェック状態です。
- 主キーのチェックを外し、手がかりとするカラム(複数可)をチェックします。
- 左右で別名称(または、別の行に表示されている)カラム同士をマッチングさせたい場合、「右側列名」の対象行をクリックすると、どのカラムが対応するかをプルダウンで選ぶことができます。
- 対応関係を指定し終わったら、「確定」ボタンでマッチングを確定します。
3-4:比較したレコードの値をコピーする
比較したレコードの値を、片方のDBから、もう片方のDBにコピーして保存する事ができます。
- 3-2または3-3の手順で、レコードを比較します。
- 値をコピーしたい行を選択状態にします。 (※複数行同時も可能です。全行を選択したい場合は、ヘッダー行ヘッダー列の「*」マークをクリックします、)(※特定カラムのセルの値のみコピーする事も出来ます。その場合、行ではなくセルを選択状態にします)
- 右ペインの上部の「→」ボタンまたは「←」ボタンをクリックすると、選択した行の値がもう一方に上書きコピーされます。(この時点では、まだDBに保存はされません)
- 保存する場合は、右ペイン上部の「データベースへ保存」ボタン(フロッピーディスクとDBが重なったアイコン)を押下すると、「SQLコマンド」ダイアログが開きます。
- 表示されているSQLを実行して良い場合は、ダイアログ上部の「!実行」ボタンをクリックすると、実行結果が表示されます(外部キー制約等により、実行が失敗する場合もあります)
3-5:レコードの値を手入力で編集する
レコードの値を、手入力で編集する事が出来ます。
- 3-2または3-3の手順で、レコードを比較します。
- 編集したい値のセルをダブルクリック(またはF2キー)して、値を編集します。(この時点では、まだDBに保存はされません)
- 保存する場合は、右ペイン上部の「データベースへ保存」ボタン(フロッピーディスクとDBが重なったアイコン)を押下すると、「SQLコマンド」ダイアログが開きます。
- 表示されているSQLを実行して良い場合は、ダイアログ上部の「!実行」ボタンをクリックすると、実行結果が表示されます(外部キー制約等により、実行が失敗する場合もあります)
3-6:スキーマが違うテーブル間で、値をコピーする
テーブルのスキーマが変更された場合など、左右のDBで、同一テーブルのスキーマが異なる場合があります。そうしたスキーマの異なるテーブル間でも、レコードの値をコピーする事が出来ます。
- 左のペインで、値をコピーしたいテーブルを選択します。
- 右クリックし、「マッチング項目設定」メニューを選択すると、「マッチング項目の選択」ダイアログが表示されます。(上部メニューの「→←」ボタンでも良いです)
- マッチング項目一覧が表示されます。「左側列名」の列に左側のテーブルのカラム名が表示されます。「右側列名」の列に右側のテーブルのカラム名が表示されます。
- 同一名称のカラムについては同じ行に表示されます(同一名称であっても、カラムの並び順が異なっている場合は、別の行に表示されます)
- 一番左のチェックボックス列は、最初は主キーのカラムのみがチェック状態です。ヘッダー行のチェックボックスをチェックすると、左右で対応するカラムがある行は全てチェック状態になります。
- 左右で別名称(または、別の行に表示されている)カラム同士をマッチングさせたい場合、「右側列名」の対象行をクリックすると、どのカラムが対応するかをプルダウンで選ぶことができます。
- 対応関係を指定し終わったら、「確定」ボタンでマッチングを確定します。
- 「3-4:比較したレコードの値をコピーする」の手順に従い、「→」または「←」ボタンをクリックすると、マッチングさせたカラム間でレコードがコピーされます。
- 型の違いなどでコピーした値をそのまま保存する事が出来ない場合、「3-5:レコードの値を手入力で編集する」の手順に従い、対象のセルの値を直接編集します。
- 保存する場合は、右ペイン上部の「データベースへ保存」ボタン(フロッピーディスクとDBが重なったアイコン)を押下すると、「SQLコマンド」ダイアログが開きます。
- 表示されているSQLを実行して良い場合は、ダイアログ上部の「!実行」ボタンをクリックすると、実行結果が表示されます(外部キー制約等により、実行が失敗する場合もあります)