使用MSSQL启动声纳服务时出现问题

时间:2013-09-04 05:39:45

标签: sonarqube

我们在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列。

谷歌搜索类似的问题(即在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模式,声纳仍然无法看到active_rule_changes表,无论我们是否设置了sonar.jdbc.schema属性。

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

有人可以帮我们解决导致这些问题的原因吗?

2 个答案:

答案 0 :(得分:0)

注释掉这个属性,它应该可以工作

#sonar.jdbc.schema:                         sonar

答案 1 :(得分:0)

您需要在数据库中将声纳用户的默认架构设置为dbo。

在数据库中运行如下所示的查询:

USE yourDatabase;
ALTER USER yourUser WITH DEFAULT_SCHEMA = dbo;

然后删除数据库中的所有表并重新启动服务器上的Sonar服务。这应该重新创建所有表dbo.<table name>

我意识到你的问题已经发生很久了。我们最近遇到了同样的问题并以这种方式解决了问题。希望这将有助于其他人在将来解决这个问题。