0

Windows Server 2008 R2 Enterprise x64 マシンに Sonar 3.6.2 をインストールし、組み込みの H2 データベースを使用して Windows サービスとして正常に開始しました。データベースを Microsoft SQL Server 2008 インスタンスに切り替えようとしたときに問題が発生しました。

提供されている jtds データベース ドライバー (v1.2.7) を使用しており、次の設定は sonar.properties ファイルでコメント解除されています。

#----- Microsoft SQLServer 
sonar.jdbc.username:         <user>
sonar.jdbc.password:         *********** 
sonar.jdbc.url:              jdbc:jtds:sqlserver://<host>:<port>/sonar;domain=<domain>;useNTLMv2=true 
sonar.jdbc.driverClassName:  net.sourceforge.jtds.jdbc.Driver 

#----- Connection pool settings 
sonar.jdbc.maxActive:                      20 
sonar.jdbc.maxIdle:                        5 
sonar.jdbc.minIdle:                        2 
sonar.jdbc.maxWait:                        5000 
sonar.jdbc.minEvictableIdleTimeMillis:     600000 
sonar.jdbc.timeBetweenEvictionRunsMillis:  30000 

# Delay (in seconds) between processing of notification queue 
sonar.notifications.delay=60 

最初にソナーを開始すると、必要なすべてのテーブルが作成されていることがわかります。ただし、Hibernate を初期化する段階になると、次のエラーが表示されます。

2013.09.03 14:24:58 INFO  o.s.j.s.AbstractDatabaseConnector  Initializing Hibernate 
2013.09.03 14:25:00 ERROR o.s.s.p.Platform  Missing column: id in sonar.GLOBALTEST\AUSonardsa.active_rule_changes 
org.hibernate.HibernateException: Missing column: id in sonar.GLOBALTEST\AUSonardsa.active_rule_changes 

同じ AUSonardsa ユーザーで DBVisualizer を介して同じデータベースに接続すると、テーブル 'active_rule_changes' がそこにあることがわかり、単純な SQL ステートメント 'select id from active_rule_changes' を実行して、単一の id 列を持つ空のテーブルを返すことができます。

同様の問題 (つまり、Hibernate の初期化中にテーブル内の列が欠落している) に対する Google 検索はすべて、「sonar.jdbc.schema」値を設定する必要があることを示しています。ただし、この値を (たとえば「dbo」に) 設定すると、エラーがわずかに変化します。

2013-09-03 16:14:33.436:WARN:oejw.WebAppContext:Failed startup of context o.e.j.w.WebAppContext{/,file:/D:/devtools/Sonar/install/sonar-3.6.2/war/sonar-server/},file:/D:/devtools/Sonar/install/sonar-3.6.2/war/sonar-server 
org.hibernate.HibernateException: Missing table: active_rule_changes 

dba に手動でテーブルを dbo スキーマに移動させても、sonar.jdbc.schema プロパティが設定されているかどうかに関係なく、sonar はまだ active_rule_changes テーブルを認識できません。

ソナー データベース全体を削除して、新しいデータベースを再作成し、スキーマ プロパティを「dbo」に設定して、ソナーを再度起動することさえ試みました。この場合、先に進み、すべてのテーブルを再作成し、Hibernate の初期化に進み、active_rule_changes テーブルが見つからないことについて再び文句を言います。この場合、スキーマ プロパティが「dbo」に設定されていても、テーブルは依然として AUSonardsa ユーザーのスキーマで作成されているように見えます。

誰かがこれらの問題の原因を突き止めるのを手伝ってくれませんか?

4

2 に答える 2

0

データベースで sonar ユーザーのデフォルト スキーマを dbo に設定する必要があります。

データベースで次のようなクエリを実行します。

USE yourDatabase;
ALTER USER yourUser WITH DEFAULT_SCHEMA = dbo;

次に、データベース内のすべてのテーブルを削除し、サーバーで Sonar サービスを再起動します。これにより、すべてのテーブルが再作成されますdbo.<table name>

あなたの問題はかなり前に発生したことに気付きました。最近、同じ問題に遭遇し、この方法で解決しました。うまくいけば、これは他の人々が将来この問題を解決するのに役立ちます.

于 2014-06-05T08:13:33.017 に答える
0

このプロパティをコメントアウトすると、機能するはずです

#sonar.jdbc.schema:                         sonar
于 2014-02-16T12:12:43.397 に答える