Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DBFlute Engine: SchemaSyncCheck on SQLServer, wrong differences #197

Open
jflute opened this issue Jan 15, 2024 · 6 comments
Open

DBFlute Engine: SchemaSyncCheck on SQLServer, wrong differences #197

jflute opened this issue Jan 15, 2024 · 6 comments
Assignees
Labels

Comments

@jflute
Copy link
Collaborator

jflute commented Jan 15, 2024

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 jflute self-assigned this Jan 15, 2024
@jflute
Copy link
Collaborator Author

jflute commented Jan 15, 2024

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

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

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

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

@maroJP
Copy link

maroJP commented Jan 15, 2024

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
Copy link

zoosm3 commented Jan 15, 2024

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

@jflute
Copy link
Collaborator Author

jflute commented Jan 16, 2024

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

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

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

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

@jflute
Copy link
Collaborator Author

jflute commented Jan 16, 2024

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

@jflute
Copy link
Collaborator Author

jflute commented Jan 16, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants