DBの扱いが雑なプロジェクトの救世主PopularBeetle様の使い方

データベース比較ツールです。
便利なのになぜか有名じゃないみたいなので紹介。
![Pop01.png](https://qiita-image-store.s3.amazonaws.com/0/34570/f785c242-af67-4971-a56c-eadf5b985dd6.png)

# 概要

 2つのDB間で、スキーマやデータの比較を一発で行なってくれるツールです。（機能限定版は無料）
比較したデータベース間でデータをコピーして、Update（やInsert/Delete）用のSQLを生成したり、
そのまま実行したりできます。

開発環境、ステージング環境、プロダクション環境間でDBの内容に差異が出てしまった場合などに、
差異の部分を一瞬で抽出し、その場で適切に解消する事ができます。

# １：ダウンロード方法

本家:https://product.popular-soft.com/beetle-jp/editInitAction.action
または
Vector:http://www.vector.co.jp/soft/winnt/business/se498449.html
からExpressエディションをダウンロードし、インストールしてください。


# ２：DBの指定の仕方
1. 起動すると「接続一覧」ダイアログが表示されます。
2. ここで、比較対象の2つのDBを順番に指定します。
3. 「新規」ボタンを押すと、「比較対象設定」ダイアログが開きます。
![Pop02.png](https://qiita-image-store.s3.amazonaws.com/0/34570/05fa742f-dfd8-97a6-56bf-4ef9ba0a787e.png)
4. 「左側データソース」のデータベースアイコンをクリックすると、「データソースの選択」ダイアログが開きます。（右側もやり方は同じです）
5. ここから先は、DBの種類ごとに指定の仕方が異なるので、以下で別々に説明します。
6. 左側と右側のデータベースを両方指定したら、「確定」ボタンを押します。

## ２-１：SQL Server

1. 「データソース」選択欄で「Microsoft SQL Server」を選びます。
2. 「データ　プロバイダ」選択欄で「.NET Framework SQL Server用データ　プロバイダ」を選びます。

![Pop03.png](https://qiita-image-store.s3.amazonaws.com/0/34570/3989a861-4f9f-0790-3d60-1b92e9233eb2.png)
3. 「OK」ボタンを押すと「接続のプロパティ」ダイアログが開きます。
![Pop06.png](https://qiita-image-store.s3.amazonaws.com/0/34570/7d271fc9-70b1-79bd-2b2d-5de2fa9f3b9c.png)

4. 接続情報を設定します。設定が正しいかは、「テスト接続」ボタンの押下で確認できます。
5. 「OK」ボタンを押して設定を確定して下さい。

## ２-２：MySQL

1. 「データソース」選択欄で「その他」を選びます。
2. 「データ　プロバイダ」選択欄で「.NET Framework MySQL用データ　プロバイダ」を選びます。
![Pop04.png](https://qiita-image-store.s3.amazonaws.com/0/34570/56ee6207-e1d3-c7ec-1241-079ae7ed5acf.png)
3. 「OK」ボタンを押すと「接続のプロパティ」ダイアログが開きます。
![Pop05.png](https://qiita-image-store.s3.amazonaws.com/0/34570/85988b7d-65f5-df50-b446-ab90966e03ca.png)

4. 接続情報を設定します。設定が正しいかは、「テスト接続」ボタンの押下で確認できます。
5. 「OK」ボタンを押して設定を確定して下さい。

## ２-３：Postgresql

PostgreSQLの場合は、WindowsのコントロールパネルからODBCドライバの設定を行わなければならないので、面倒です。
以下に、その設定方法を記載します。

### ２-３-１：odbcドライバのダウンロード

http://www.postgresql.org/ftp/odbc/versions/msi/

上記のページから最新版（ページの一番下の方）のインストーラーをダウンロードします。
★重要： Popular Beetleは32bitアプリです。64bitのドライバは使えないので、x64と書かれていないドライバを選んでください。
![Pop07.png](https://qiita-image-store.s3.amazonaws.com/0/34570/09790b0d-c193-1e5e-5de8-54ffb5915fdf.png)


### ２-３-２：odbcドライバのWindowsへのインストール

ダウンロードしたインストーラーを実行し、普通にインストールします。

### ２-３-３：コントロールパネルでのodbcデータソースの設定（32bit Windows の場合）

1. 「コントロールパネル」 ⇒ 「管理ツール」 ⇒ 「データソース（ODBC）」を開くと、「ODBCデータソースアドミニストレーター」ダイアログが開きます。
2. 「ユーザーDSN」タブで「追加」ボタンを押下すると「データソースの新規作成」ダイアログが開きます。
3. 「PostgreSQL Unicode」を選択してください。（選択肢に無い場合は、「２-３-３’：コントロールパネルでのodbcデータソースの設定（64bit Windows の場合）」の手順を実行して下さい）
![Pop08.png](https://qiita-image-store.s3.amazonaws.com/0/34570/8e52b2e2-c8cd-f15b-0dfc-a7ee0734f0dd.png)
4. 「データソース名」はデフォルトで「PostgreSQL35W」となっていると思いますので、対象DBが判るような名前にして下さい。（この設定は、DB毎に必要です）
★日本語が混ざるとPopularBeetleで上手く行きません。半角英数で指定してください。
![Pop10.png](https://qiita-image-store.s3.amazonaws.com/0/34570/f867b5c3-6d29-d65e-c83e-7107f623c0a6.png)

5.  接続情報を設定します。設定が正しいかは、「テスト接続」ボタンの押下で確認できます。
6. 「保存」ボタンでダイアログを閉じると、「ユーザーDSN」タブに設定した項目が追加されています。
7. もう一度「追加」ボタンを押下し、同じ手順で比較対象のテーブルの設定も追加します。

### ２-３-３’：コントロールパネルでのodbcデータソースの設定（64bit Windows の場合）検証環境：Windows7

64bit版Windows の場合、コントロールパネルからODBCデータソースを設定しようとしても選択肢に「PostgreSQL Unicode」が出てきません。
以下の手順で、32bit版のODBCデータソースの設定を行って下さい。

1. もし、コントロールパネルから「ODBCデータソースアドミニストレーター」ダイアログを開いていたら、それらは全て閉じてください。（開いていると、選択肢に「PostgreSQL Unicode」が出てきません。
2. Explorerで「C:\Windows\SysWOW64」フォルダを開きます。
3. 「odbcad32.exe」を実行すると、「ODBCデータソースアドミニストレーター」ダイアログが開きます。
4. 「ユーザーDSN」タブで「追加」ボタンを押下すると「データソースの新規作成」ダイアログが開きます。
5. 「PostgreSQL Unicode」を選択してください。
![Pop09.png](https://qiita-image-store.s3.amazonaws.com/0/34570/0e96971d-517d-adb7-158b-521ecde76db7.png)
6. 「データソース名」はデフォルトで「PostgreSQL35W」となっていると思いますので、対象DBが判るような名前にして下さい。（この設定は、DB毎に必要です）★日本語が混ざるとPopularBeetleで上手く行きません。半角英数で指定してください。
![Pop10.png](https://qiita-image-store.s3.amazonaws.com/0/34570/f867b5c3-6d29-d65e-c83e-7107f623c0a6.png)

7.  接続情報を設定します。設定が正しいかは、「テスト接続」ボタンの押下で確認できます。
8. 「保存」ボタンでダイアログを閉じると、「ユーザーDSN」タブに設定した項目が追加されています。
9. もう一度「追加」ボタンを押下し、同じ手順で比較対象のテーブルの設定も追加します。

### ２-３-５：Popular Beetleの指定

1. 前述の手順で、Popular Beetleの「データソースの選択」ダイアログを開きます。
2. 「データソース」選択欄で「Microsoft ODBC データソース」を選びます。
3. 「OK」ボタンを押すと「接続のプロパティ」ダイアログが開きます。
![Pop11.png](https://qiita-image-store.s3.amazonaws.com/0/34570/c7bcd6ba-749d-4cf9-0480-a2847936a300.png)

4. 「ユーザー名またはシステムデータソース名を使用」のプルダウンを開くと、２-３-３で追加した選択肢が表示されます。
5. ユーザー名とパスワードを入力します。設定が正しいかは、「テスト接続」ボタンの押下で確認できます。
6. 「OK」ボタンを押して設定を確定して下さい。

# ３：使い方

比較する2つのデータベースの設定を確定すると、「オブジェクト選択」ダイアログが開きます。
何を比較するかをチェックボックスで選び、OKボタンを押すと、比較を実行します。
(適当なDBが手元に無いので、スクリーンショットは省略）

## ３-１：2つのDBのスキーマを比較する

1. 「３：使い方」に記載の「オブジェクト選択」ダイアログで、「スキーマ」チェックボックスをチェックし、OKボタンを押下します。
2. 2ペインのウィンドウが表示されます。
3. 左のペインには、テーブル単位で左右のデータベースを比較した結果が表示されています。赤文字がスキーマが異なるテーブル、黒文字がスキーマが同一のテーブルです。
4. 詳細に比較したい赤文字の行を選択します。
5. 右クリックし、「ダイレクトスキーマ比較」メニューを選択します。（※行をダブルクリックした場合、スキーマではなくレコードを比較した内容が右のペインに表示されます）
6. 右のペインに、カラム毎の詳細なスキーマの比較結果が表示されます。一目瞭然ですが、青背景の行が違いのあるカラムです。赤文字が、違いのある設定値です。

## ３-２：2つのDBのレコードを比較する

下記では、最初に全テーブルの全データ（無料版は、テーブル毎に1万件まで）を比較する方法を説明しています。
しかしこの方法は最初の比較に時間がかかるのと、メモリが厳しい場合に途中でメモリ不足でエラーが発生する場合があるので、「どのテーブルに差異があるのか判らない」というケースでのみ使用するべきでしょう。
比較したいテーブルが決まっているのであれば、上記のスキーマ比較の状態から、左ペインのテーブル名をダブルクリックする事で、右ペインにデータ比較結果を表示する事ができます。
日常的には、そちらの方法の方が早いのでよく使うことになるでしょう。

1. 「３：使い方」に記載の「オブジェクト選択」ダイアログで、「レコード」のチェックボックスをチェックし、OKボタンを押下します。（「スキーマ」も自動的に比較されます）
2. 2ペインのウィンドウが表示されます。
3. 左のペインには、テーブル単位で左右のデータベースを比較した結果が表示されています。青背景の行が、中身のレコードに違いのあるテーブルです（※赤文字はスキーマが異なるテーブル、黒文字がスキーマが同一のテーブルです。）
青背景の行をダブルクリックすると、右ペインに詳細なレコードの比較結果が表示されます。一目瞭然ですが、青背景の行が違いのあるレコードです。赤文字が、違いのある値です。
4. 右ペインの行をダブルクリックすると、対象レコードのカラム毎の比較結果がダイアログで表示されます。カラム数が多いテーブルのチェックに便利です。
5. 他に、ウィンドウ上部の各ボタンで、比較結果の表示方法を色々選べます（※「マッチング項目設定」ボタンについては、「３-３：主キー以外を手がかりにレコードを比較する」で後述します。）

## ３-３：主キー以外を手がかりにレコードを比較する

PopularBeetleは、デフォルトでは「主キーが一致しているレコード」同士を比較しています。
そのため、主キーがないテーブルや、オートインクリメント等によって主キーが異なるテーブルは、実質的に対応するデータがあっても「データが異なる」と判定されます。
これを回避する方法を説明します。

1. 左のペインで、データを比較したいテーブルを選択します。
2. 右クリックし、「マッチング項目設定」メニューを選択すると、「マッチング項目の選択」ダイアログが表示されます。（上部メニューの「→←」ボタンでも良いです）
3. マッチング項目一覧が表示されます。「左側列名」の列に左側のテーブルのカラム名が表示されます。「右側列名」の列に右側のテーブルのカラム名が表示されます。
4. 同一名称のカラムについては同じ行に表示されます（同一名称であっても、カラムの並び順が異なっている場合は、別の行に表示されます）
5. 一番左のチェックボックス列は、最初は主キーのカラムのみがチェック状態です。
6. 主キーのチェックを外し、手がかりとするカラム（複数可）をチェックします。
7. 左右で別名称（または、別の行に表示されている）カラム同士をマッチングさせたい場合、「右側列名」の対象行をクリックすると、どのカラムが対応するかをプルダウンで選ぶことができます。
8. 対応関係を指定し終わったら、「確定」ボタンでマッチングを確定します。

## ３-４：比較したレコードの値をコピーする

比較したレコードの値を、片方のDBから、もう片方のDBにコピーして保存する事ができます。

1. ３-２または３-３の手順で、レコードを比較します。
2. 値をコピーしたい行を選択状態にします。
（※複数行同時も可能です。全行を選択したい場合は、ヘッダー行ヘッダー列の「＊」マークをクリックします、）（※特定カラムのセルの値のみコピーする事も出来ます。その場合、行ではなくセルを選択状態にします）
3. 右ペインの上部の「→」ボタンまたは「←」ボタンをクリックすると、選択した行の値がもう一方に上書きコピーされます。（この時点では、まだDBに保存はされません）
4. 保存する場合は、右ペイン上部の「データベースへ保存」ボタン（フロッピーディスクとDBが重なったアイコン）を押下すると、「SQLコマンド」ダイアログが開きます。
5. 表示されているSQLを実行して良い場合は、ダイアログ上部の「！実行」ボタンをクリックすると、実行結果が表示されます（外部キー制約等により、実行が失敗する場合もあります）

## ３-５：レコードの値を手入力で編集する

レコードの値を、手入力で編集する事が出来ます。

1. ３-２または３-３の手順で、レコードを比較します。
2. 編集したい値のセルをダブルクリック（またはF2キー）して、値を編集します。（この時点では、まだDBに保存はされません）
3. 保存する場合は、右ペイン上部の「データベースへ保存」ボタン（フロッピーディスクとDBが重なったアイコン）を押下すると、「SQLコマンド」ダイアログが開きます。
4. 表示されているSQLを実行して良い場合は、ダイアログ上部の「！実行」ボタンをクリックすると、実行結果が表示されます（外部キー制約等により、実行が失敗する場合もあります）

## ３-６：スキーマが違うテーブル間で、値をコピーする

テーブルのスキーマが変更された場合など、左右のDBで、同一テーブルのスキーマが異なる場合があります。そうしたスキーマの異なるテーブル間でも、レコードの値をコピーする事が出来ます。

1. 左のペインで、値をコピーしたいテーブルを選択します。
2. 右クリックし、「マッチング項目設定」メニューを選択すると、「マッチング項目の選択」ダイアログが表示されます。（上部メニューの「→←」ボタンでも良いです）
3. マッチング項目一覧が表示されます。「左側列名」の列に左側のテーブルのカラム名が表示されます。「右側列名」の列に右側のテーブルのカラム名が表示されます。
4. 同一名称のカラムについては同じ行に表示されます（同一名称であっても、カラムの並び順が異なっている場合は、別の行に表示されます）
5. 一番左のチェックボックス列は、最初は主キーのカラムのみがチェック状態です。ヘッダー行のチェックボックスをチェックすると、左右で対応するカラムがある行は全てチェック状態になります。
6. 左右で別名称（または、別の行に表示されている）カラム同士をマッチングさせたい場合、「右側列名」の対象行をクリックすると、どのカラムが対応するかをプルダウンで選ぶことができます。
7. 対応関係を指定し終わったら、「確定」ボタンでマッチングを確定します。
8. 「３-４：比較したレコードの値をコピーする」の手順に従い、「→」または「←」ボタンをクリックすると、マッチングさせたカラム間でレコードがコピーされます。
9. 型の違いなどでコピーした値をそのまま保存する事が出来ない場合、「３-５：レコードの値を手入力で編集する」の手順に従い、対象のセルの値を直接編集します。
10. 保存する場合は、右ペイン上部の「データベースへ保存」ボタン（フロッピーディスクとDBが重なったアイコン）を押下すると、「SQLコマンド」ダイアログが開きます。
11. 表示されているSQLを実行して良い場合は、ダイアログ上部の「！実行」ボタンをクリックすると、実行結果が表示されます（外部キー制約等により、実行が失敗する場合もあります）