我需要将Sonarqube 5.6安装从一台服务器移动到另一台服务器。 新服务器也将运行一个新的数据库,所以我的计划是复制 旧数据到新数据库,然后启动新的Sonarqube实例 针对包含复制数据的新数据库。
新旧都是Sonarqube 5.6和Oracle。旧数据库是 Oracle 11g和新的将是Oracle 12c,但我使用的是Oracle Express 11g和另一个本地Sonarqube 5.6安装,以测试程序。
我按照以下步骤进行:
(1)使用SQL Developer将旧数据库导出为DDL(插入格式)
(2)对结果sql进行一些小改动:
表空间名称是硬编码的,在目标数据库中有所不同,因此适应
条款" SEGMENT CREATION DEFERRED"目标数据库不支持,所以我只是将其删除
(3)将sql导入新目标数据库
(4)启动连接到新数据库的新Sonarqube实例
在此之后不幸的是Sonarqube服务器结束并且在日志中我看到错误/异常:
异常将上下文初始化事件发送到类org.sonar.server.platform.PlatformServletContextListener的侦听器实例
(下面的全文)。
进一步测试: 如果我针对没有导入数据的新数据库启动新的Sonarqube实例 创建了新表,一切都很好。这样做之后我也可以导出新数据库, 删除并重新创建新的sonarqube数据库用户,并从新环境重新导入数据, 也行得很好。 也就是说,在独立模式下的新安装工作正常,导出/导入也可以 很好(至少使用最少的数据并从同一环境/数据库导出)。 因此,问题似乎是由我从旧数据导入的数据中的某些内容引起的 Sonarqube安装。 我还尝试导入重建所有索引(无更改),并删除所有行 从所有表中(sonarqube然后尝试创建新表并遇到错误,因为 表项目已存在)。
我发生的一件事是旧安装有很多插件。我试过了 要使新安装处于相同的状态,但它不完全相同,有一些 版本差异和旧安装有一些许可的插件(Swift和Objective C) 我没有本地测试安装。日志中还有一些错误消息 为此,但这些似乎并不是关键问题。
** 2017.01.21 00:07:53错误网页[cpp]没有cpp许可证
2017.01.21 00:07:53错误网页[objc]没有objc的许可证**
我还尝试在启动之前删除Sonarqube中的日志,数据和临时目录 针对新数据库的新服务器。 我当然搜索了这个错误消息,但似乎主要发生在迁移时 从一个声纳版本到另一个版本,这不是这里的情况。
有没有人有任何想法? 理论上这个程序应该有效还是我错过了什么?
非常感谢任何想法!
2017.01.21 00:08:29 INFO web[o.s.s.n.NotificationService] Notification service stopped
2017.01.21 00:08:29 ERROR web[o.a.c.c.C.[.[.[/]] Exception sending context initialized event to listener instance of class org.sonar.server.platform.PlatformServletContextListener
java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.NullPointerException
at com.google.common.base.Throwables.propagate(Throwables.java:160) ~[guava-17.0.jar:na]
at org.sonar.server.es.BaseIndexer.index(BaseIndexer.java:82) ~[sonar-server-5.6.jar:na]
at org.sonar.server.es.BaseIndexer.index(BaseIndexer.java:88) ~[sonar-server-5.6.jar:na]
at org.sonar.server.es.IndexerStartupTask.execute(IndexerStartupTask.java:71) ~[sonar-server-5.6.jar:na]
at org.sonar.server.platform.platformlevel.PlatformLevelStartup$1.doPrivileged(PlatformLevelStartup.java:81) ~[sonar-server-5.6.jar:na]
at org.sonar.server.user.DoPrivileged.execute(DoPrivileged.java:44) ~[sonar-server-5.6.jar:na]
at org.sonar.server.platform.platformlevel.PlatformLevelStartup.start(PlatformLevelStartup.java:77) ~[sonar-server-5.6.jar:na]
at org.sonar.server.platform.Platform.executeStartupTasks(Platform.java:201) ~[sonar-server-5.6.jar:na]
at org.sonar.server.platform.Platform.doStart(Platform.java:114) ~[sonar-server-5.6.jar:na]
at org.sonar.server.platform.Platform.doStart(Platform.java:99) ~[sonar-server-5.6.jar:na]
at org.sonar.server.platform.PlatformServletContextListener.contextInitialized(PlatformServletContextListener.java:44) ~[sonar-server-5.6.jar:na]
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4812) [tomcat-embed-core-8.0.30.jar:8.0.30]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5255) [tomcat-embed-core-8.0.30.jar:8.0.30]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.0.30.jar:8.0.30]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) [tomcat-embed-core-8.0.30.jar:8.0.30]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) [tomcat-embed-core-8.0.30.jar:8.0.30]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_65]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_65]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_65]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_65]
Caused by: java.util.concurrent.ExecutionException: java.lang.NullPointerException
at java.util.concurrent.FutureTask.report(FutureTask.java:122) [na:1.8.0_65]
at java.util.concurrent.FutureTask.get(FutureTask.java:192) [na:1.8.0_65]
at com.google.common.util.concurrent.Uninterruptibles.getUninterruptibly(Uninterruptibles.java:135) ~[guava-17.0.jar:na]
at org.sonar.server.es.BaseIndexer.index(BaseIndexer.java:80) ~[sonar-server-5.6.jar:na]
... 18 common frames omitted
Caused by: java.lang.NullPointerException: null
at java.io.FilterInputStream.close(FilterInputStream.java:181) ~[na:1.8.0_65]
at org.apache.commons.io.IOUtils.closeQuietly(IOUtils.java:303) ~[commons-io-2.4.jar:2.4]
at org.apache.commons.io.IOUtils.closeQuietly(IOUtils.java:246) ~[commons-io-2.4.jar:2.4]
at org.sonar.db.source.FileSourceDto.decodeTestData(FileSourceDto.java:169) ~[sonar-db-5.6.jar:na]
at org.sonar.server.test.index.TestResultSetIterator.read(TestResultSetIterator.java:79) ~[sonar-server-5.6.jar:na]
at org.sonar.server.test.index.TestResultSetIterator.read(TestResultSetIterator.java:60) ~[sonar-server-5.6.jar:na]
at org.sonar.db.ResultSetIterator.next(ResultSetIterator.java:82) ~[sonar-db-5.6.jar:na]
at org.sonar.server.test.index.TestIndexer.doIndex(TestIndexer.java:93) ~[sonar-server-5.6.jar:na]
at org.sonar.server.test.index.TestIndexer.doIndex(TestIndexer.java:80) ~[sonar-server-5.6.jar:na]
at org.sonar.server.test.index.TestIndexer.doIndex(TestIndexer.java:70) ~[sonar-server-5.6.jar:na]
at org.sonar.server.es.BaseIndexer$2.index(BaseIndexer.java:91) ~[sonar-server-5.6.jar:na]
at org.sonar.server.es.BaseIndexer$1.run(BaseIndexer.java:73) ~[sonar-server-5.6.jar:na]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_65]
... 4 common frames omitted
2017.01.21 00:08:29 ERROR web[o.a.c.c.StandardContext] One or more listeners failed to start. Full details will be found in the appropriate container log file
2017.01.21 00:08:29 ERROR web[o.a.c.c.StandardContext] Context [] startup failed due to previous errors
2017.01.21 00:08:29 WARN web[o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [Thread-4] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
java.net.SocketInputStream.read(SocketInputStream.java:170)
java.net.SocketInputStream.read(SocketInputStream.java:141)
java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
java.io.BufferedInputStream.read(BufferedInputStream.java:345)
com.sun.jndi.ldap.Connection.run(Connection.java:860)
java.lang.Thread.run(Thread.java:745)
2017.01.21 00:08:29 WARN web[o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [Progress[BulkIndexer[tests]]] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
java.lang.Object.wait(Native Method)
java.util.TimerThread.mainLoop(Timer.java:552)
java.util.TimerThread.run(Timer.java:505)
2017.01.21 00:08:29 INFO web[o.a.c.h.Http11NioProtocol] Starting ProtocolHandler ["http-nio-0.0.0.0-9000"]
2017.01.21 00:08:29 INFO web[o.s.s.a.TomcatAccessLog] Web server is started
2017.01.21 00:08:29 INFO web[o.s.s.a.EmbeddedTomcat] HTTP connector enabled on port 9000
2017.01.21 00:08:29 WARN web[o.s.p.ProcessEntryPoint] Fail to start web
java.lang.IllegalStateException: Webapp did not start
at org.sonar.server.app.EmbeddedTomcat.isUp(EmbeddedTomcat.java:84) ~[sonar-server-5.6.jar:na]
at org.sonar.server.app.WebServer.isUp(WebServer.java:47) [sonar-server-5.6.jar:na]
at org.sonar.process.ProcessEntryPoint.launch(ProcessEntryPoint.java:105) ~[sonar-process-5.6.jar:na]
at org.sonar.server.app.WebServer.main(WebServer.java:68) [sonar-server-5.6.jar:na]
2017.01.21 00:08:29 INFO web[o.a.c.h.Http11NioProtocol] Pausing ProtocolHandler ["http-nio-0.0.0.0-9000"]
2017.01.21 00:08:30 INFO web[o.a.c.h.Http11NioProtocol] Stopping ProtocolHandler ["http-nio-0.0.0.0-9000"]
2017.01.21 00:08:30 INFO web[o.a.c.h.Http11NioProtocol] Destroying ProtocolHandler ["http-nio-0.0.0.0-9000"]
2017.01.21 00:08:30 INFO web[o.s.s.a.TomcatAccessLog] Web server is stopped
2017.01.21 00:08:30 INFO app[o.s.p.m.Monitor] Process[es] is stopping
2017.01.21 00:08:31 INFO es[o.s.p.StopWatcher] Stopping process
2017.01.21 00:08:31 INFO es[o.elasticsearch.node] [sonar-1484953654097] stopping ...
答案 0 :(得分:0)
服务器无法启动。您应该仔细检查所有表和序列是否具有完全相同的内容,包括主键的值。策略是在目标数据库上启动全新安装,以便SonarQube创建模式。然后可以恢复数据备份。
答案 1 :(得分:0)
现在可以正常工作所以只需快速更新也许它会帮助其他人......似乎有必要让新的声纳实例初始化新数据库,然后做一个"硬"复制我在SQl Developer中的意思是复制对象,替换现有的目标对象,在复制之前截断目标数据。
我无法理解这一点,因为初始启动时必须做一些导致错误消失的事情,所以即使在硬拷贝之后也必须留在数据库中。软拷贝不替换对象允许Sonar启动但有问题 - 例如创建用户或组时的密钥违规。后者可以通过重建索引和/或删除和重新激活约束来修复,前者是用于设置用户ID的序列的初始值不同的结果。但是硬拷贝避开了所有这些问题,所以这就是我推荐的路线。我还从SONAR_HOME中删除了目录数据,temp,日志,如果有必要,我不能100%确定。