Amazon

2015年3月8日日曜日

データベースのdiff(その3)

schemacrawlerでデータベース間のdiffをする場合にdiff可能なテキストを出力する方法が下記のURLに記載されていたので試してみました。
http://schemacrawler.sourceforge.net/how-to.html

schemacrawler.config.propertiesのいくつかのパラメータを調整してdiff可能なテキストファイルを出力します。

schemacrawler.format.show_standard_column_type_names
項目の型名を出力するか選択できます。
同じデータベースならtrueに設定、異なるデータベースであればtrueかfalseを選択します。

schemacrawler.format.show_ordinal_numbers
trueでテーブル定義の項目に番号を振ります。
見やすいですが項目追加/削除があった場合、変更のない項目もdiffに変更ありと判断されてしまうのでfalseに設定します。

schemacrawler.format.hide_primarykey_names
schemacrawler.format.hide_foreignkey_names
schemacrawler.format.hide_index_names
schemacrawler.format.hide_trigger_names
schemacrawler.format.hide_routine_specific_names
schemacrawler.format.hide_constraint_names
別名が付く可能性のある名前を隠します。
キー、インデックスなどの制約関連で、定義は出力されるのでdiffで判別するときには、すべてtrueに設定します。

schemacrawler.format.sort_alphabetically.table_columns
schemacrawler.format.sort_alphabetically.table_foreignkeys
schemacrawler.format.sort_alphabetically.table_indices
schemacrawler.format.sort_alphabetically.procedure_columns
diffで判別するときには、出力をソートします。

schemacrawler.format.show_unqualified_names
参照キーなどで、スキーマ+名前となるためdiffで判別するときには、falseに設定します。

portablenamesオプション
schemacrowlerの起動オプションに-portablenames=trueを指定するとスキーマ.オブジェクト名からスキーマ名が取り除かれます。

これらをすべて設定したプロパティファイルと同じデータベースでコピーして若干修正したデータベースの比較は次の通りです。
vagrant@trusty64:~/work/sc-diff$ lv schemacrawler.config-update.properties 
vagrant@trusty64:~/work/sc-diff$ diff -u schemacrawler.config.properties schemacrawler.config-update.properties 
--- schemacrawler.config.properties     2015-03-08 14:11:16.076066745 +0900
+++ schemacrawler.config-update.properties      2015-03-08 15:14:51.853603361 +0900
@@ -57,10 +57,10 @@
 # ------------------------------------------------------------------------------
   
 # Sort orders for objects that are not sorted by name by default
-schemacrawler.format.sort_alphabetically.table_columns=false
-schemacrawler.format.sort_alphabetically.table_foreignkeys=false
-schemacrawler.format.sort_alphabetically.table_indices=false
-schemacrawler.format.sort_alphabetically.procedure_columns=false
+schemacrawler.format.sort_alphabetically.table_columns=true
+schemacrawler.format.sort_alphabetically.table_foreignkeys=true
+schemacrawler.format.sort_alphabetically.table_indices=true
+schemacrawler.format.sort_alphabetically.procedure_columns=true
 
 # --=----=----=----=----=----=----=----=----=----=----=----=----=----=----=----=
 # Text Formatting Options
@@ -73,7 +73,7 @@
 
 # Shows standard column names instead of database specific column names
 # Default: false
-schemacrawler.format.show_standard_column_type_names=false
+schemacrawler.format.show_standard_column_type_names=true
 
 # Shows ordinal numbers for columns
 # Default: false
@@ -91,12 +91,12 @@
 # Hides foreign key names, constraint names, trigger names, 
 # specific names for procedures, index and primary key names
 # Default: false
-schemacrawler.format.hide_primarykey_names=false
-schemacrawler.format.hide_foreignkey_names=false
-schemacrawler.format.hide_index_names=false
-schemacrawler.format.hide_trigger_names=false
-schemacrawler.format.hide_routine_specific_names=false
-schemacrawler.format.hide_constraint_names=false
+schemacrawler.format.hide_primarykey_names=true
+schemacrawler.format.hide_foreignkey_names=true
+schemacrawler.format.hide_index_names=true
+schemacrawler.format.hide_trigger_names=true
+schemacrawler.format.hide_routine_specific_names=true
+schemacrawler.format.hide_constraint_names=true
 
 # Encoding of input files, such as Apache Velocity temaplates
 # Default: UTF-8
vagrant@trusty64:~/work/sc-diff$ cat dbdiff-update.sh 
#! /bin/bash

SCHEMA_NAME=$1
shift 1
sc.sh --server=mysql -url=jdbc:mysql://192.168.10.10/$SCHEMA_NAME -u=scott -password=tiger -c=details,dump -infolevel=maximum -schemas=$SCHEMA_NAME -configfile schemacrawler.config-update.properties $*
vagrant@trusty64:~/work/sc-diff$ diff -u <(./dbdiff-update.sh scott -portablenames=true) <(./dbdiff-update.sh sample -portablenames=true)
--- /dev/fd/63  2015-03-08 15:21:13.441602145 +0900
+++ /dev/fd/62  2015-03-08 15:21:13.441602145 +0900
@@ -188,7 +188,7 @@
 driver name                               MySQL Connector Java          
 driver version                            mysql-connector-java-5.1.34 ( Revision: jess.balint@oracle.com-20141014163213-wqbwpf1ok2kvo1om )
 driver class name                         com.mysql.jdbc.Driver         
-url                                       jdbc:mysql://192.168.10.10/scott
+url                                       jdbc:mysql://192.168.10.10/sample
 is JDBC compliant                         false                         
 
 
@@ -383,7 +383,7 @@
 DBNAME                                                 [driver property]
   Database name
   not required
-  value                             scott                       
+  value                             sample                      
 
 defaultAuthenticationPlugin                            [driver property]
   Name of a class implementing com.mysql.jdbc.AuthenticationPlugin which will be used as the default authentication plugin (see below). It is an error to use a class which is not listed in "authenticationPlugins" nor it is one of the built-in plugins. It is an error to set as default a plugin which was disabled with "disabledAuthenticationPlugins" property. It is an error to set this value to null or the empty string (i.e. there must be at least a valid default authentication plugin specified for the connection, meeting all constraints listed above).
@@ -1619,7 +1619,7 @@
 NULL   10      7782    clark   1981-06-09      manager 7839    2450.00
 NULL   10      7839    king    1981-11-17      president       NULL    5000.00
 NULL   10      7934    miller  1982-01-23      clerk   7782    1300.00
-NULL   20      7369    smith   1980-12-17      clerk   7902    800.00
+NULL   20      7369    smith   1980-12-17      clerk   7902    1000.00
 NULL   20      7566    jones   1981-04-02      manager 7839    2975.00
 NULL   20      7788    scott   1987-04-19      analyst 7566    3000.00
 NULL   20      7876    adams   1987-05-23      clerk   7788    1100.00
vagrant@trusty64:~/work/sc-diff$ 

0 件のコメント: