为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DAMENG V8.1
【操作系统】:麒麟 V10
【CPU】: ARM
【问题描述】*:在应用系统中查询表数据显示正常,然后使用应用系统的数据导出功能,数据导出的过程中提示“无效的页”,数据导出失败。
【其它验证】:在数据库服务器中,使用expdp命令行方式导出时,无报错。在使用达梦图形化管理工具导出数据时,无报错
【日志信息】:
2025-02-17 22:36:40,031 INFO [StateUpdate-pool-1-thread-1] - Update progress {"exportCount":554854,"finishCount":238267,"imageTask":false,"taskId":30423,"taskStateEnum":"RUNNING"} [cn.com.egova.export.service.impl.LocalExportTaskManagerImpl.updateProgress:142]
2025-02-17 22:36:43,034 INFO [StateUpdate-pool-1-thread-1] - Update progress {"exportCount":554854,"finishCount":242135,"imageTask":false,"taskId":30423,"taskStateEnum":"RUNNING"} [cn.com.egova.export.service.impl.LocalExportTaskManagerImpl.updateProgress:142]
2025-02-17 22:36:46,038 INFO [StateUpdate-pool-1-thread-1] - Update progress {"exportCount":554854,"finishCount":247027,"imageTask":false,"taskId":30423,"taskStateEnum":"RUNNING"} [cn.com.egova.export.service.impl.LocalExportTaskManagerImpl.updateProgress:142]
2025-02-17 22:36:49,040 INFO [StateUpdate-pool-1-thread-1] - Update progress {"exportCount":554854,"finishCount":251751,"imageTask":false,"taskId":30423,"taskStateEnum":"RUNNING"} [cn.com.egova.export.service.impl.LocalExportTaskManagerImpl.updateProgress:142]
2025-02-17 22:36:49,726 ERROR [egova-export-common-0] dm.jdbc.driver.DMException: Invalid page
at dm.jdbc.driver.DBError.throwException(SourceFile:738)
at dm.jdbc.a.a.y.r(SourceFile:623)
at dm.jdbc.a.a.y.z(SourceFile:555)
at dm.jdbc.a.a.y.L(SourceFile:536)
at dm.jdbc.a.a.a(SourceFile:269)
at dm.jdbc.a.a.a(SourceFile:1327)
at dm.jdbc.internal.AbstractLob.do_length(SourceFile:211)
at dm.jdbc.driver.DmdbClob.loadAllData(SourceFile:376)
at dm.jdbc.driver.DmdbClob.<init>(SourceFile:58)
at dm.jdbc.driver.DmdbClob.newInstance(SourceFile:82)
at dm.jdbc.internal.convert.DB2J.toString(SourceFile:127)
at dm.jdbc.driver.DmdbResultSet.do_getString(SourceFile:701)
at dm.jdbc.filter.BaseFilter.ResultSet_getString(SourceFile:5571)
at dm.jdbc.filter.reconnect.ReconnectFilter.ResultSet_getString(SourceFile:6933)
at dm.jdbc.driver.DmdbResultSet.getString(SourceFile:2203)
at com.zaxxer.hikari.pool.HikariProxyResultSet.getString(HikariProxyResultSet.java)
at cn.com.egova.export.bean.SQLMetaData.getOneRow(SQLMetaData.java:67)
at cn.com.egova.export.core.generator.CursorSXSSExcelGenerator.cursorExport(CursorSXSSExcelGenerator.java:223)
at cn.com.egova.export.core.generator.CursorSXSSExcelGenerator.generate(CursorSXSSExcelGenerator.java:105)
at cn.com.egova.export.core.Exporter.export(Exporter.java:29)
at cn.com.egova.export.service.impl.ExportCoreManagerImpl.cursorQuery(ExportCoreManagerImpl.java:178)
at cn.com.egova.export.service.impl.ExportCoreManagerImpl.doExport(ExportCoreManagerImpl.java:102)
at cn.com.egova.export.service.impl.ExportCoreManagerImpl$$FastClassBySpringCGLIB$$a9843e79.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)
at cn.com.egova.export.service.impl.ExportCoreManagerImpl$$EnhancerBySpringCGLIB$$d8012c7f.doExport(<generated>)
at cn.com.egova.export.util.ExportTaskExecutor$1.run(ExportTaskExecutor.java:117)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
“无效的页”报错常见于2种场景:
1、数据页损坏,如异常断电等引起的存储写丢失,内存坏点等引起数据损坏;
2、大字段相关访问引起,原因有产品大字段相关缺陷和大字段行外访问异步机制等
据以上提供的场景,对相同的表适用达梦图形化工具导出正常、对相同的表适用export导出正常,说明可以排除页损坏即数据损坏的可能性。因此需要确认大字段相关问题,建议:
1、适用应用系统尝试导出一个没有大字段的表,看导出是否正常,如果正常可以确定为大字段相关问题;
2、在数据库层面打开SQL日志获取框架在数据库实际运行的SQL代码,具体操作请参考:配置SQL日志