页面树结构
转至元数据结尾
转至元数据起始

(本文档仅供参考)

问题

跨库联合数据源移除数据源后再重新添加失败,系统检查修复过后仍提示:未指定错误,请查看详细信息。

查看详细日志中记录如下:

08-07 12:21:08 ERROR logExceptions(org.hibernate.util.JDBCExceptionReporter:78) - Duplicate entry 'TAB.SmartbiUnionDB.xxxxx' for key 'PRIMARY'
08-07 12:21:08 ERROR performExecutions(org.hibernate.event.def.AbstractFlushingEventListener:301) - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:92) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:87) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:218) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2174) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2610) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:52) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) ~[hibernate-6.1.3.Final.jar:6.1.3.Final]
	at smartbi.repository.DAOModule.flush(DAOModule.java:827) ~[Smartbi-DAO.Implement.jar:?]
	at smartbi.repository.AbstractDAO.flush(AbstractDAO.java:630) ~[Smartbi-DAO.Interface.jar:?]
	at smartbi.freequery.basicdata.DataSourceHandleHelper.syncTablesPrestoToDatasource(DataSourceHandleHelper.java:1642) ~[Smartbi-FreeQuery.Implement.jar:?]
	at smartbi.freequery.basicdata.MetaDataServiceImpl.syncTablesPrestoToDatasource(MetaDataServiceImpl.java:3966) ~[Smartbi-FreeQuery.Implement.jar:?]
	at smartbi.freequery.client.datasource.DataSourceService.createDataSourceTableAndField(DataSourceService.java:800) ~[Smartbi-FreeQuery.Implement.jar:?]
	at smartbi.freequery.client.datasource.DataSourceService.createPrestoDatasourceTableAndFiled(DataSourceService.java:840) ~[Smartbi-FreeQuery.Implement.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_202]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_202]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_202]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_202]
	at smartbi.framework.rmi.ClientService.executeInternal(ClientService.java:179) ~[Smartbi-Framework.Interface.jar:?]
	at smartbi.framework.rmi.ClientService.execute(ClientService.java:158) ~[Smartbi-Framework.Interface.jar:?]
	at smartbi.framework.rmi.RMIServlet.processExecute(RMIServlet.java:235) ~[Smartbi-Framework.Implement.jar:?]
	at smartbi.framework.rmi.RMIServlet.doPost(RMIServlet.java:146) ~[Smartbi-Framework.Implement.jar:?]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[servlet-api.jar:?]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.81]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-websocket.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.81]
	at smartbi.extension.ExtensionFilter$1.doFilter(ExtensionFilter.java:249) ~[Smartbi-ExtensionManager.jar:?]
	at smartbi.extension.ExtensionFilter$2.doFilter(ExtensionFilter.java:273) ~[Smartbi-ExtensionManager.jar:?]
	at smartbi.security.patch.PatchFilter.doFilter(PatchFilter.java:77) ~[?:?]
	at smartbi.extension.ExtensionFilter$2.doFilter(ExtensionFilter.java:273) ~[Smartbi-ExtensionManager.jar:?]
	at smartbi.weixin.filter.WxLoginFilter.doFilter(WxLoginFilter.java:246) ~[?:?]
	at smartbi.extension.ExtensionFilter$2.doFilter(ExtensionFilter.java:273) ~[Smartbi-ExtensionManager.jar:?]
	at smartbi.extension.ExtensionFilter.doFilterInternal(ExtensionFilter.java:276) ~[Smartbi-ExtensionManager.jar:?]
	at smartbi.extension.ExtensionFilter.doFilter(ExtensionFilter.java:127) ~[Smartbi-ExtensionManager.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.81]
	at smartbi.freequery.filter.GZIPFilter.doFilter(GZIPFilter.java:316) ~[Smartbi-FreeQuery.Implement.jar:?]
	at smartbi.freequery.filter.Filter.doFilter(Filter.java:33) ~[Smartbi-FreeQuery.Implement.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.81]
	at smartbi.framework.rmi.TransactionFilter.doFilter(TransactionFilter.java:87) ~[Smartbi-Framework.Implement.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.81]
	at smartbi.freequery.filter.ExceptionResponseFilter.doFilter(ExceptionResponseFilter.java:93) ~[Smartbi-FreeQuery.Implement.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.81]
	at smartbi.freequery.filter.CheckIsLoggedFilter.doFilter(CheckIsLoggedFilter.java:178) ~[Smartbi-FreeQuery.Implement.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.81]
	at smartbi.freequery.filter.CheckRefererFilter.doFilter(CheckRefererFilter.java:45) ~[Smartbi-FreeQuery.Implement.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.81]
	at smartbi.freequery.filter.CheckHttpMethodFilter.doFilter(CheckHttpMethodFilter.java:62) ~[Smartbi-FreeQuery.Implement.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.81]
	at smartbi.freequery.filter.TraceFilter.doFilter(TraceFilter.java:67) ~[Smartbi-FreeQuery.Implement.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.81]
	at smartbi.framework.RedisSessionFilter.doFilter(RedisSessionFilter.java:130) ~[Smartbi-Framework.Interface.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.81]
	at smartbi.freequery.filter.LogFilter.doFilter(LogFilter.java:63) ~[Smartbi-FreeQuery.Implement.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.81]
	at smartbi.framework.SmartbiApplicationFilter.doFilter(SmartbiApplicationFilter.java:52) ~[Smartbi-Framework.Interface.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[catalina.jar:8.5.81]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[catalina.jar:8.5.81]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:8.5.81]
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698) ~[catalina.jar:8.5.81]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[catalina.jar:8.5.81]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:367) ~[catalina.jar:8.5.81]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:639) ~[tomcat-coyote.jar:8.5.81]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-coyote.jar:8.5.81]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:882) ~[tomcat-coyote.jar:8.5.81]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1691) ~[tomcat-coyote.jar:8.5.81]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:8.5.81]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-util.jar:8.5.81]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-util.jar:8.5.81]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:8.5.81]
	at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_202]
Caused by: java.sql.BatchUpdateException: Duplicate entry 'TAB.SmartbiUnionDB.xxxxx' for key 'PRIMARY'
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_202]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_202]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_202]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_202]

问题原理

此问题是由于跨库数据源移除数据源时,会调用资源树接口删除数据源及下面的表和字段节点,但是由于未知原因数据源删除成功了,但是下面的表和字段没有删除,此时去系统检查中进行修复时,可以检测出未删除成功的表和字段这些垃圾数据,但是修复之后,由于无法确定项目实际是否需要保留这些数据,系统只是把表和字段节点放到FOUND目录下,没有真正删除,依然存在t_restree表中。所以在跨库数据源中重新添加数据源的时候,会再次将已经存在的表节点插入t_restree表中,就会到出现表节点主键重复的问题。

解决方案

在系统检查修复资源后,需要手动删除FOUND目录下的垃圾数据。

  • 无标签