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 

通过 DBVisualizer 与同一个 AUsonardsa 用户连接到同一个数据库,我可以看到表 'active_rule_changes' 在那里,我可以执行一个简单的 sql 语句 'select id from active_rule_changes',它返回一个带有单个 id 列的空表。

Google 搜索类似的问题(即,在 Hibernate 初始化期间表中缺少列)都表明需要设置“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 仍然无法看到 active_rule_changes 表,无论我们是否设置了 sonar.jdbc.schema 属性。

我们甚至尝试删除整个声纳数据库,重新创建一个新的,并将架构属性设置为“dbo”并再次启动声纳。在这种情况下,它继续并重新创建所有表,进入休眠初始化并再次抱怨找不到 active_rule_changes 表。在这种情况下,即使架构属性设置为“dbo”,表似乎仍然是在 AUsonardsa 用户的架构下创建的。

有人可以帮助我们找出导致这些问题的原因吗?

4

2 回答 2

0

您需要在数据库中将声纳用户的默认架构设置为 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 回答