当使用CNVCF_CCE_RFC_READ_TABLE通用函数取SAP表数据的时候,如果JCoFunction function这个里面不对ROWCOUNT限制的话,一旦表数据过大就会造成以下错误:
com.sap.conn.jco.JCoException: (104) JCO_ERROR_SYSTEM_FAILURE: No more storage space available for extending an internal table. (raised by system EP1|ZLSAPNEP02)
at com.sap.conn.jco.rt.MiddlewareJavaRfc.generateJCoException(MiddlewareJavaRfc.java:678)
at com.sap.conn.jco.rt.MiddlewareJavaRfc$JavaRfcClient.execute(MiddlewareJavaRfc.java:2092)
at com.sap.conn.jco.rt.ClientConnection.execute(ClientConnection.java:1185)
at com.sap.conn.jco.rt.ClientConnection.execute(ClientConnection.java:1014)
at com.sap.conn.jco.rt.RfcDestination.execute(RfcDestination.java:1458)
at com.sap.conn.jco.rt.RfcDestination.execute(RfcDestination.java:1428)
at com.sap.conn.jco.rt.AbapFunction.execute(AbapFunction.java:332)
at com.zoomlion.dataCollector.sap.SapManagerImpl.dealFunction_rfcReadTable(SapManagerImpl.java:289)
at com.zoomlion.dataCollector.sap.SapManagerImpl$$FastClassBySpringCGLIB$$4ac78d14.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85)
at com.zoomlion.dataCollector.exception.ExceptionLog.invoke(ExceptionLog.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:68)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
at com.zoomlion.dataCollector.sap.SapManagerImpl$$EnhancerBySpringCGLIB$$1e1e2155.dealFunction_rfcReadTable(<generated>)
at com.zoomlion.dataCollector.jobs.common.CommonProcessCollectionJobImpl.getTableFieldsSapJcoFunction(CommonProcessCollectionJobImpl.java:965)
at com.zoomlion.dataCollector.jobs.common.CommonProcessCollectionJobImpl.doSaveTableFields(CommonProcessCollectionJobImpl.java:1003)
at com.zoomlion.dataCollector.jobs.common.CommonProcessCollectionJobImpl$$FastClassBySpringCGLIB$$3d8bee83.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85)
at com.zoomlion.dataCollector.exception.ExceptionLog.invoke(ExceptionLog.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:68)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
at com.zoomlion.dataCollector.jobs.common.CommonProcessCollectionJobImpl$$EnhancerBySpringCGLIB$$b6945be4.doSaveTableFields(<generated>)
at com.zoomlion.dataCollector.handler.GetSapTableFields.main(GetSapTableFields.java:71)
Caused by: RfcException raised by system [EP1|ZLSAPNEP02]:
message: No more storage space available for extending an internal table.
return code: RFC_SYS_EXCEPTION (3)
error group: 104
key: RFC_ERROR_SYSTEM_FAILURE
at com.sap.conn.rfc.engine.RfcIoOpenCntl.RfcReceive(RfcIoOpenCntl.java:2045)
at com.sap.conn.jco.rt.MiddlewareJavaRfc$JavaRfcClient.execute(MiddlewareJavaRfc.java:2032)
... 45 more
Caused by: com.sap.conn.rfc.exceptions.RfcGetException: No more storage space available for extending an internal table.
at com.sap.conn.rfc.engine.RfcImp.ab_rfcerror(RfcImp.java:1176)
at com.sap.conn.rfc.engine.RfcGet.ab_rfcget(RfcGet.java:120)
at com.sap.conn.rfc.engine.RfcRcv.ab_rfcreceive(RfcRcv.java:36)
at com.sap.conn.rfc.engine.RfcIoOpenCntl.RfcReceive(RfcIoOpenCntl.java:1987)
... 46 more
其实从报错原因说明No more storage space available for extending an internal table.中就可推测出来应该是数据量过大导致传送空间不够。
这时候可对参数ROWCOUNT设置数量,而不是为0(默认取所有),或者尽可能对增加条件限制数据条数,比如:
1)如果可只取增量数据,可在OPTIONS—>TEXT中设置增量数据的条件,比如时间段的,今天抽数只抽今天内的数据;
2)只取需要字段,可在FIELDS—>FIELDNAME中设置字段;
3)如果要取全量数据,可在OPTIONS—>TEXT中设置对表中时间字段进行切分分开抽取,比如每次只抽一年的或者一个季度的或者一个月的或者一天的,这个需要看你切分的时间段内的数据是否能抽取过来了,如果还是超出的话就要继续往小时间段切分。