dbflute / dbflute-core

DBFlute core libraries for Java8
http://dbflute.seasar.org/
24 stars 18 forks source link

DBFlute Engine: SchemaSyncCheck on SQLServer, wrong differences #197

Open jflute opened 8 months ago

jflute commented 8 months ago

User feedback: The result always has the following differences:

master.dbo.spt_fallback_db(TABLE)
master.dbo.spt_fallback_dev(TABLE)
master.dbo.spt_fallback_usg(TABLE)
master.dbo.spt_monitor(TABLE)
master.dbo.spt_value(VIEW)

For example, t works well on Oracle.

jflute commented 8 months ago

DBFluteクライアントのschemaディレクトリ配下の  o project-sync-check.diffmap  o project-sync-schema.xml は、どうなってるだろうか?

spt_fallback_db たちが存在しているのだろうか? システム的なテーブルっぽいので、そもそもメタデータに載ってほしくないものだが、 載ったとしたもどっちも同じなのであれば差分が出ないはずだし...

(業務情報伏せた状態で) 一部分を見てみたい。

あと、具体的にどんな差分で出ていたのだろうか? ADDなのでCHANGEなのかDELETEなのか?

maroJP commented 8 months ago

DBFluteクライアントのschemaディレクトリ配下の  o project-sync-check.diffmap  o project-sync-schema.xml は、どうなってるだろうか?

「project-sync-check.diffmap」は最終的にoutputに出力されるsync-check-result.htmlの中身の差分に関する内容が出力されていました。「project-sync-schema.xml」はtarget側の情報が出力されている様に見えます。

下記がpreviousでTable Listに想定外のデータがでている部分のログとなります。

  [df-doc] 2024-01-15 21:02:20,612 INFO  - +------------------------------------------+
   [df-doc] 2024-01-15 21:02:20,615 INFO  - |                                          |
   [df-doc] 2024-01-15 21:02:20,615 INFO  - |                   Doc                    |
   [df-doc] 2024-01-15 21:02:20,616 INFO  - |            (SchemaSyncCheck)             |
   [df-doc] 2024-01-15 21:02:20,616 INFO  - |                                          |
   [df-doc] 2024-01-15 21:02:20,617 INFO  - +------------------------------------------+
   [df-doc] 2024-01-15 21:02:20,700 INFO  - ...Preparing data source:
   [df-doc] 2024-01-15 21:02:20,700 INFO  -   driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
   [df-doc] 2024-01-15 21:02:20,701 INFO  -   url    = jdbc:sqlserver://XX.XX.XX.XX:1433;DatabaseName=XXX
   [df-doc] 2024-01-15 21:02:20,701 INFO  -   user   = XXX
   [df-doc] 2024-01-15 21:02:20,716 INFO  -
   [df-doc] 2024-01-15 21:02:20,717 INFO  - * * * * * * * * * * * * * * * * *
   [df-doc] 2024-01-15 21:02:20,717 INFO  - *                               *
   [df-doc] 2024-01-15 21:02:20,718 INFO  - *    Target Schema (previous)   *
   [df-doc] 2024-01-15 21:02:20,718 INFO  - *                               *
   [df-doc] 2024-01-15 21:02:20,718 INFO  - * * * * * * * * * * * * * * * * *
   [df-doc] 2024-01-15 21:02:20,719 INFO  - ...Preparing data source for SchemaSyncCheck target:
   [df-doc] 2024-01-15 21:02:20,719 INFO  -   url  = jdbc:sqlserver://XX.XX.XX.XX:1433
   [df-doc] 2024-01-15 21:02:20,720 INFO  -   user = XXX
   [df-doc] 2024-01-15 21:02:20,720 INFO  - schema: {dbo as main}
   [df-doc] 2024-01-15 21:02:20,760 INFO  -
   [df-doc] 2024-01-15 21:02:20,762 INFO  - ...Starting to process JDBC to SchemaXML
   [df-doc] 2024-01-15 21:02:20,779 INFO  - ...Getting DB connection
   [df-doc] 2024-01-15 21:02:20,811 INFO  - ...Connecting to database by data source:
   [df-doc] 2024-01-15 21:02:22,227 INFO  -   product = Microsoft SQL Server 13.00.6404
   [df-doc] 2024-01-15 21:02:22,228 INFO  -   driver  = Microsoft JDBC Driver 7.4 for SQL Server 7.4.1.0 for JDBC 4.2
   [df-doc] 2024-01-15 21:02:22,228 INFO  - ...Getting DB meta data
   [df-doc] 2024-01-15 21:02:22,235 INFO  - ...Getting tables:
   [df-doc] 2024-01-15 21:02:22,236 INFO  -   schema = {dbo as main}
   [df-doc] 2024-01-15 21:02:22,237 INFO  -   types  = [TABLE]
   [df-doc] 2024-01-15 21:02:22,434 INFO  - select cast(objtype as nvarchar(500)) as OBJECT_TYPE, cast(objname as nvarchar(500)) as TABLE_NAME, cast(value as nvarchar(4000)) as COMMENTS from fn_listextendedproperty('MS_Description', 'schema', 'dbo', 'table', default, default, default) order by TABLE_NAME asc
   [df-doc] 2024-01-15 21:02:22,451 INFO  - select 'spt_fallback_db' as TABLE_NAME, cast(objname as nvarchar(500)) as COLUMN_NAME, cast(value as nvarchar(4000)) as COMMENTS from fn_listextendedproperty('MS_Description', 'schema', 'dbo', 'table', 'spt_fallback_db', 'column', default) order by TABLE_NAME asc, COLUMN_NAME asc
   [df-doc] 2024-01-15 21:02:22,463 INFO  - select 'spt_monitor' as TABLE_NAME, cast(objname as nvarchar(500)) as COLUMN_NAME, cast(value as nvarchar(4000)) as COMMENTS from fn_listextendedproperty('MS_Description', 'schema', 'dbo', 'table', 'spt_monitor', 'column', default) order by TABLE_NAME asc, COLUMN_NAME asc
   [df-doc] 2024-01-15 21:02:22,475 INFO  - select 'spt_fallback_usg' as TABLE_NAME, cast(objname as nvarchar(500)) as COLUMN_NAME, cast(value as nvarchar(4000)) as COMMENTS from fn_listextendedproperty('MS_Description', 'schema', 'dbo', 'table', 'spt_fallback_usg', 'column', default) order by TABLE_NAME asc, COLUMN_NAME asc
   [df-doc] 2024-01-15 21:02:22,488 INFO  - select 'MSreplication_options' as TABLE_NAME, cast(objname as nvarchar(500)) as COLUMN_NAME, cast(value as nvarchar(4000)) as COMMENTS from fn_listextendedproperty('MS_Description', 'schema', 'dbo', 'table', 'MSreplication_options', 'column', default) order by TABLE_NAME asc, COLUMN_NAME asc
   [df-doc] 2024-01-15 21:02:22,501 INFO  - select 'spt_fallback_dev' as TABLE_NAME, cast(objname as nvarchar(500)) as COLUMN_NAME, cast(value as nvarchar(4000)) as COMMENTS from fn_listextendedproperty('MS_Description', 'schema', 'dbo', 'table', 'spt_fallback_dev', 'column', default) order by TABLE_NAME asc, COLUMN_NAME asc
   [df-doc] 2024-01-15 21:02:22,531 INFO  -
   [df-doc] 2024-01-15 21:02:22,531 INFO  - $ /= = = = = = = = = = = = = = = = = = = = = = = = = =
   [df-doc] 2024-01-15 21:02:22,534 INFO  - $ [Table List]
   [df-doc] 2024-01-15 21:02:22,535 INFO  - $ master.dbo.MSreplication_options(TABLE)
   [df-doc] 2024-01-15 21:02:22,671 INFO  - $ master.dbo.spt_fallback_db(TABLE)
   [df-doc] 2024-01-15 21:02:22,742 INFO  - $ master.dbo.spt_fallback_dev(TABLE)
   [df-doc] 2024-01-15 21:02:22,811 INFO  - $ master.dbo.spt_fallback_usg(TABLE)
   [df-doc] 2024-01-15 21:02:22,881 INFO  - $ master.dbo.spt_monitor(TABLE)
   [df-doc] 2024-01-15 21:02:22,947 INFO  - $
   [df-doc] 2024-01-15 21:02:22,948 INFO  - $ [Table Count]
   [df-doc] 2024-01-15 21:02:22,950 INFO  - $ 5
   [df-doc] 2024-01-15 21:02:22,950 INFO  - $ = = = = = = = = = =/
   [df-doc] 2024-01-15 21:02:22,951 INFO  -
   [df-doc] 2024-01-15 21:02:22,953 INFO  - ...Getting sequences
   [df-doc] 2024-01-15 21:02:22,960 INFO  - ...Serializing XML:
   [df-doc] 2024-01-15 21:02:22,961 INFO  -   filePath = ./schema/project-sync-schema.xml
   [df-doc] 2024-01-15 21:02:22,961 INFO  -   encoding = UTF-8

5件のテーブルがどこにあるかわからなかったですが、設定した接続ユーザーで「master.dbo.MSreplication_options」等にSELECTを書けるとデータが返ってくるので参照は出来る様です。previousとnext両方で該当テーブルを検索出来ていますが、結果には差異として出力されています。

下記が出力した差分となります。

table count: 5 -> 85
Add Table
  xxx
  xxx
  ...
Delete Table
  MSreplication_options
  spt_fallback_db
  spt_fallback_dev
  spt_fallback_usg
  spt_monitor
zoosm3 commented 8 months ago

困りましたね。 まずは簡単なサンプルコードを作成して再現確認されてみてはいかがでしょうか。現象はなんとなく把握できましたが、スニペットだけだと切り分けが難しいと思います。

jflute commented 8 months ago

@maroJP 情報ありがとうございます。

fn_listextendedpropertyテーブルからコメント取得のためにselectをしている箇所が怪しいので、 まずはちょっとそのへんから探ってみます。

後は、spt_fallback_dbってなんだ?ってのも調べてみたいなと。 例えば、一時テーブル的なものとかでなにかの節に消えるとかで片方だけ無くなるとか。

またつど「このdfpropはどんな設定になってる?」とか「これを設定してみたらどうなる?」 ってのお願いするかもなので、Issueのウォッチをよろしくお願いします。

jflute commented 8 months ago

@zoosm3 フォロー、ありがとうございます。 以前使っていたDockerのSQLServerが無くなってしまったのですが、 新しいのがあるかもなので探して環境作ってみたいと思います。

jflute commented 8 months ago

SQLServerのDocker:

このページのものを使っていた。 https://learn.microsoft.com/ja-jp/sql/linux/quickstart-install-connect-docker?view=sql-server-ver16&pivots=cs1-bash

昔はこれだったが、

docker pull microsoft/mssql-server-linux:2017-latest

もう無くなってしまったみたい?

pull access denied for microsoft/mssql-server-linux, repository does not exist

ページも更新されていて新しいバージョンになっていたっぽい

docker pull mcr.microsoft.com/mssql/server:2022-latest

pullはできたが、起動でWARNINGが...platformを指定しないとダメ?

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=MSSQL@ps' \
>    -p 1433:1433 --name mssqlflute \
>    -d mcr.microsoft.com/mssql/server:2022-latest
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
02c844e60c783fad3e47f7a042873065c878d7fc626f92155fb40a1ae2367f3d

WARNINGだから起動はしてるのかな?と思ったけど起動してないっぽい、ぐぬぬぬ

docker exec -it mssqlflute "bash"
Error response from daemon: Container 02c844e60c783fad3e47f7a042873065c878d7fc626f92155fb40a1ae2367f3d is not running