Database Sonarqube 5.6数据库复制失败(向侦听器发送上下文初始化事件时出现异常…)

Database Sonarqube 5.6数据库复制失败(向侦听器发送上下文初始化事件时出现异常…),database,oracle,oracle11g,sonarqube,Database,Oracle,Oracle11g,Sonarqube,我需要将Sonarqube 5.6安装从一台服务器移动到另一台服务器。 新服务器也将使用新数据库运行,因此我的计划是复制 将旧数据导入新数据库,然后启动新的Sonarqube实例 针对包含复制数据的新数据库 新的和旧的都是Oracle的5.6版本。旧数据库是 Oracle 11g和新的将是Oracle 12c,但我使用的是Oracle Express 11g和另一个本地Sonarqube 5.6安装,以测试程序 我的发言如下: (1) 使用SQL Developer将旧数据库导出为DDL(插入格

我需要将Sonarqube 5.6安装从一台服务器移动到另一台服务器。 新服务器也将使用新数据库运行,因此我的计划是复制 将旧数据导入新数据库,然后启动新的Sonarqube实例 针对包含复制数据的新数据库

新的和旧的都是Oracle的5.6版本。旧数据库是 Oracle 11g和新的将是Oracle 12c,但我使用的是Oracle Express 11g和另一个本地Sonarqube 5.6安装,以测试程序

我的发言如下:

(1) 使用SQL Developer将旧数据库导出为DDL(插入格式)

(2) 对生成的sql进行一些小更改:

  • 表空间名称是硬编码的,并且在目标数据库中不同,因此

  • “段创建延迟”子句在目标数据库中不受支持,所以我只是将其删除

(3) 将sql导入新的目标数据库

(4) 启动连接到新数据库的新Sonarqube实例

不幸的是,在此之后,Sonarqube服务器结束,在日志中我看到了错误/异常:

将上下文初始化事件发送到类org.sonar.server.platform.PlatformServletContextListener的侦听器实例时发生异常

(全文如下)

进一步测试: 如果我针对没有导入数据的新数据库启动新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 ...

如果目标数据库不是源数据库的精确副本,则服务器无法启动。您应该仔细检查所有表和序列是否具有完全相同的内容,包括主键的值。一种策略是在目标数据库上重新安装,以便SonarQube创建模式。然后可以恢复数据备份。

好的,现在开始工作,所以只需快速更新,可能会帮助其他人。。。似乎有必要让新的sonar实例初始化新数据库,然后进行“硬”复制,我的意思是在SQl开发人员中,复制对象、替换现有目标对象、在复制之前截断目标数据


我不能完全理解这一点,因为初始启动必须做一些事情,导致错误消失,所以即使在硬拷贝之后,也必须在数据库中保留一些内容。软拷贝不替换允许Sonar启动的对象,但存在问题-例如,创建用户或组时违反了密钥。后者可以通过重建索引和/或删除并重新激活约束来修复,前者是用于设置用户id的序列的不同初始值的结果。但硬拷贝避免了所有这些问题,因此我建议采用这种方法。我还删除了SONAR_主页上的目录数据、临时文件和日志,我不能100%确定这是否必要。

另外请注意,DB Copy工具可以帮助您。这是SonarQube企业版的一部分:谢谢,那么您的想法是从一个空数据库开始,让SonarQube最初创建一个新数据库,然后手动将导出的数据导入到现有表中吗?Sonarqube似乎没有自己的数据库备份/恢复功能。不幸的是,Sonar DB Copy工具只附带Sonar Source的企业版,我们没有,成本为50000美元。为什么不使用Oracle文档?感谢Jeroen,是的,公平点-随着产品安装,我将使用11g->12c,这样才有意义,但是,我上面描述的测试是针对我的Express数据库的,它也是11g,因此不需要Oracle升级。