Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

データベース比較ツールです。
便利なのになぜか有名じゃないみたいなので紹介。
Pop01.png

概要

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の指定の仕方

  1. 起動すると「接続一覧」ダイアログが表示されます。
  2. ここで、比較対象の2つのDBを順番に指定します。
  3. 「新規」ボタンを押すと、「比較対象設定」ダイアログが開きます。 Pop02.png
  4. 「左側データソース」のデータベースアイコンをクリックすると、「データソースの選択」ダイアログが開きます。(右側もやり方は同じです)
  5. ここから先は、DBの種類ごとに指定の仕方が異なるので、以下で別々に説明します。
  6. 左側と右側のデータベースを両方指定したら、「確定」ボタンを押します。

2-1:SQL Server

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

Pop03.png
3. 「OK」ボタンを押すと「接続のプロパティ」ダイアログが開きます。
Pop06.png

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

2-2:MySQL

  1. 「データソース」選択欄で「その他」を選びます。
  2. 「データ プロバイダ」選択欄で「.NET Framework MySQL用データ プロバイダ」を選びます。 Pop04.png
  3. 「OK」ボタンを押すと「接続のプロパティ」ダイアログが開きます。
    Pop05.png

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

  5. 「OK」ボタンを押して設定を確定して下さい。

2-3:Postgresql

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

2-3-1:odbcドライバのダウンロード

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

上記のページから最新版(ページの一番下の方)のインストーラーをダウンロードします。
★重要: Popular Beetleは32bitアプリです。64bitのドライバは使えないので、x64と書かれていないドライバを選んでください。
Pop07.png

2-3-2:odbcドライバのWindowsへのインストール

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

2-3-3:コントロールパネルでのodbcデータソースの設定(32bit Windows の場合)

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

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

  6. 「保存」ボタンでダイアログを閉じると、「ユーザーDSN」タブに設定した項目が追加されています。

  7. もう一度「追加」ボタンを押下し、同じ手順で比較対象のテーブルの設定も追加します。

2-3-3’:コントロールパネルでの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
  6. 「データソース名」はデフォルトで「PostgreSQL35W」となっていると思いますので、対象DBが判るような名前にして下さい。(この設定は、DB毎に必要です)★日本語が混ざるとPopularBeetleで上手く行きません。半角英数で指定してください。
    Pop10.png

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

  8. 「保存」ボタンでダイアログを閉じると、「ユーザーDSN」タブに設定した項目が追加されています。

  9. もう一度「追加」ボタンを押下し、同じ手順で比較対象のテーブルの設定も追加します。

2-3-5:Popular Beetleの指定

  1. 前述の手順で、Popular Beetleの「データソースの選択」ダイアログを開きます。
  2. 「データソース」選択欄で「Microsoft ODBC データソース」を選びます。
  3. 「OK」ボタンを押すと「接続のプロパティ」ダイアログが開きます。
    Pop11.png

  4. 「ユーザー名またはシステムデータソース名を使用」のプルダウンを開くと、2-3-3で追加した選択肢が表示されます。

  5. ユーザー名とパスワードを入力します。設定が正しいかは、「テスト接続」ボタンの押下で確認できます。

  6. 「OK」ボタンを押して設定を確定して下さい。

3:使い方

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

3-1:2つのDBのスキーマを比較する

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

3-2:2つのDBのレコードを比較する

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

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

3-3:主キー以外を手がかりにレコードを比較する

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

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

3-4:比較したレコードの値をコピーする

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

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

3-5:レコードの値を手入力で編集する

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

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

3-6:スキーマが違うテーブル間で、値をコピーする

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

  1. 左のペインで、値をコピーしたいテーブルを選択します。
  2. 右クリックし、「マッチング項目設定」メニューを選択すると、「マッチング項目の選択」ダイアログが表示されます。(上部メニューの「→←」ボタンでも良いです)
  3. マッチング項目一覧が表示されます。「左側列名」の列に左側のテーブルのカラム名が表示されます。「右側列名」の列に右側のテーブルのカラム名が表示されます。
  4. 同一名称のカラムについては同じ行に表示されます(同一名称であっても、カラムの並び順が異なっている場合は、別の行に表示されます)
  5. 一番左のチェックボックス列は、最初は主キーのカラムのみがチェック状態です。ヘッダー行のチェックボックスをチェックすると、左右で対応するカラムがある行は全てチェック状態になります。
  6. 左右で別名称(または、別の行に表示されている)カラム同士をマッチングさせたい場合、「右側列名」の対象行をクリックすると、どのカラムが対応するかをプルダウンで選ぶことができます。
  7. 対応関係を指定し終わったら、「確定」ボタンでマッチングを確定します。
  8. 「3-4:比較したレコードの値をコピーする」の手順に従い、「→」または「←」ボタンをクリックすると、マッチングさせたカラム間でレコードがコピーされます。
  9. 型の違いなどでコピーした値をそのまま保存する事が出来ない場合、「3-5:レコードの値を手入力で編集する」の手順に従い、対象のセルの値を直接編集します。
  10. 保存する場合は、右ペイン上部の「データベースへ保存」ボタン(フロッピーディスクとDBが重なったアイコン)を押下すると、「SQLコマンド」ダイアログが開きます。
  11. 表示されているSQLを実行して良い場合は、ダイアログ上部の「!実行」ボタンをクリックすると、実行結果が表示されます(外部キー制約等により、実行が失敗する場合もあります)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした