2016-06-21 4 views
0

I가 다음과 같은 저장 프로 시저 :SQLCODE : -3015 저장 호출 할 때 절차

public void copyData(String srcTableName, String bakTableName, String dateColName, String sqlDateStr) 
{ 
    String sqlWhereFilter = " date(" + dateColName + ") < date('" + sqlDateStr + "')"; 

    SimpleJdbcCall jdbcCall = new SimpleJdbcCall(this) 
       .withSchemaName("SMEADM") 
       .withProcedureName("COPY_TABLE_WITH_FILTER"); 

    SqlParameterSource in = new MapSqlParameterSource() 
            .addValue("IN_SOURCE_TABLE_NAME", srcTableName) 
            .addValue("IN_DEST_TABLE_NAME", bakTableName) 
            .addValue("IN_WHERE_CONDITION", sqlWhereFilter); 

    jdbcCall.execute(in); 
} 

모두가에서 잘 작동 : 여기

CREATE OR REPLACE PROCEDURE "SMEADM"."COPY_TABLE_WITH_FILTER" 
(IN IN_SOURCE_TABLE_NAME VARCHAR(50), IN IN_DEST_TABLE_NAME VARCHAR(50), IN IN_WHERE_CONDITION VARCHAR(1024)) 
NOT DETERMINISTIC 
LANGUAGE SQL 
SPECIFIC SQL_SME_DATA_RETENTION 
BEGIN 

    CALL SYSPROC.ADMIN_CMD('LOAD FROM (SELECT * FROM ' || IN_SOURCE_TABLE_NAME || ' WHERE ' || IN_WHERE_CONDITION || ') of cursor insert into ' || IN_DEST_TABLE_NAME || ' nonrecoverable'); 

END 
@ 

그리고이 저장 프로 시저를 호출하는 내 자바 코드 내 로컬 환경, SIT 환경 및 UAT 환경.

그러나 프로덕션 환경에서는 SqlException이 발생합니다. 나는이 예외를 의심하고

[16-06-17 00:13:30] com.cv.ibs.batch.dao.impl.DataRetentionDAOImpl DEBUG: | Calling stored procedure [{call SMEADM.COPY_TABLE_WITH_FILTER(?, ?, ?)}] 
[16-06-17 00:13:31] org.springframework.batch.core.step.AbstractStep ERROR: | Encountered an error executing the step 
org.springframework.jdbc.UncategorizedSQLException: CallableStatementCallback; uncategorized SQLException for SQL [{call SMEADM.COPY_TABLE_WITH_FILTER(?, ?, ?)}]; SQL state [  ]; error code [-3015]; DB2 SQL error: SQLCODE: -3015, SQLSTATE:  , SQLERRMC: -551; nested exception is com.ibm.db2.jcc.c.SqlException: DB2 SQL error: SQLCODE: -3015, SQLSTATE:  , SQLERRMC: -551 
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83) 
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80) 
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:969) 
    at org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1003) 
    at org.springframework.jdbc.core.simple.AbstractJdbcCall.executeCallInternal(AbstractJdbcCall.java:391) 
    at org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute(AbstractJdbcCall.java:354) 
    at org.springframework.jdbc.core.simple.SimpleJdbcCall.execute(SimpleJdbcCall.java:181) 
    at com.cv.ibs.batch.dao.impl.DataRetentionDAOImpl.copyData(DataRetentionDAOImpl.java:38) 
    at com.cv.ibs.batch.job.tasklet.DataRetentionCopyOldDataTasklet.execute(DataRetentionCopyOldDataTasklet.java:41) 
    at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:386) 
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) 
    at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:264) 
    at org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:76) 
    at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:367) 
    at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:214) 
    at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:143) 
    at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:250) 
    at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:195) 
    at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:135) 
    at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:61) 
    at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:60) 
    at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:144) 
    at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:124) 
    at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:135) 
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:281) 
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:120) 
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:48) 
    at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:114) 
    at com.cv.ibs.batch.job.DataRetentionJob.execute(DataRetentionJob.java:56) 
    at com.cv.ibs.batch.job.BatchProcess.run(BatchProcess.java:99) 
    at com.cv.ibs.batch.job.launcher.DataRetentionLauncher.main(DataRetentionLauncher.java:36) 
Caused by: 
com.ibm.db2.jcc.c.SqlException: DB2 SQL error: SQLCODE: -3015, SQLSTATE:  , SQLERRMC: -551 
    at com.ibm.db2.jcc.c.fg.d(fg.java:1340) 
    at com.ibm.db2.jcc.b.gb.k(gb.java:351) 
    at com.ibm.db2.jcc.b.gb.e(gb.java:96) 
    at com.ibm.db2.jcc.b.w.e(w.java:83) 
    at com.ibm.db2.jcc.b.vb.i(vb.java:164) 
    at com.ibm.db2.jcc.c.fg.q(fg.java:1311) 
    at com.ibm.db2.jcc.c.gg.d(gg.java:2386) 
    at com.ibm.db2.jcc.c.hg.X(hg.java:115) 
    at com.ibm.db2.jcc.c.hg.execute(hg.java:98) 
    at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:169) 
    at org.springframework.jdbc.core.JdbcTemplate$5.doInCallableStatement(JdbcTemplate.java:1005) 
    at org.springframework.jdbc.core.JdbcTemplate$5.doInCallableStatement(JdbcTemplate.java:1) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:953) 
    ... 28 more 
[main] ERROR c.cv.ibs.batch.job.DataRetentionJob - [BATCH] Error on executing the batch job 
com.cv.ibs.cib.bulkpayment.BatchProcessException: Error in spring batch process, please checklog file and BatchFailedDetails table. 
    at com.cv.ibs.batch.job.DataRetentionJob.execute(DataRetentionJob.java:60) ~[com.cv.ibs.batch.jar:na] 
    at com.cv.ibs.batch.job.BatchProcess.run(BatchProcess.java:99) [com.cv.ibs.batch.jar:na] 
    at com.cv.ibs.batch.job.launcher.DataRetentionLauncher.main(DataRetentionLauncher.java:36) [com.cv.ibs.batch.jar:na] 

내가 DB를 사용자에게 부여하지 않은 일부 액세스에 의해 원인이 : 다음은 내 스택 추적입니다. 따라서 SIT 환경의 db 사용자로부터 일부 예외 (예 : 데이터베이스에 대한로드 등)를 가져 와서 동일한 예외를 두려고합니다. 그러나 SIT에서 다른 오류가 발생하여 오류 원인이 아닌 근본 원인을 알려줍니다. -3015

Google에서 힌트를 얻으 려하지만 실패했습니다. 근본 원인을 찾기 위해 몇 가지 단계/단계를 놓친 것 같습니다. 친절하게 조언하십시오.

+0

프로 시저가 SQL 삽입에 열려 있습니다. 부여 된 경우 이와 같이 동적 SQL이 필요하지만 테이블 이름과 열이 실제 열과 테이블 이름 (대개 저장 프로 시저 내에서)임을 확인해야합니다. date 매개 변수를 실제 날짜 유형 (새로운'java.time' 라이브러리에서 나오는 것이 좋음)으로 전달하는 것이 가장 좋습니다. 아마도 동시성 수준을 명시 적으로 설정하려고 할 것입니다. 또한 가능한 경우 시스템에서 인덱스를 무시할 수 있으므로 SQL에서 비교 열을 날짜로 변환하지 마십시오. –

답변

0

오류에 대한 자세한 정보를 얻으려면 DB2 명령 줄을 사용하고, 예외에서 SQL 코드를 사용하고, 빼기 부호를 제거하고 0으로 채 웁니다 (처음에는 짧을 경우 4) :

db2 ? sql3015 

SQL3015N는 SQL 오류 "<SQLCODE>는"처리 중에 발생.

설명 :

SQL 오류는 유틸리티를 호출하는 동안 오류가 발생했습니다.

유틸리티가 처리를 중지합니다.

사용자 응답 : 더 정보는 메시지의 SQLCODE (메시지 번호)에서

봐. 변경하고 명령을 다시 제출하십시오. 권한 부여 ID가 ​​없기 때문에

db2 ? sql0551 

SQL0551N이 문은 가 필요한 권한 또는 특권이 실패

은 내가 SQLERRMC: -551이 당신의 저장 프로 시저에 무슨 일이 생긴 오류, 가정 작업을 수행하십시오. 승인 ID : "< authorization-ID >". 작동 : "< 작업 >". 개체 : "< 개체 이름 >"

해당 오류에 대한 추가 정보는 here입니다.

슬프게도 초기 메시지는 인증 ID 및 작업 등에 대한 많은 정보를 제공하지 않습니다.

코드에서 SqlException을 직접 확인하고 getNextException() (javadoc)이 자세한 정보를 제공하는지 확인하십시오.