加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

DB2 SQL CODE:-904 的解决方法

(2010-01-26 23:53:03)
标签:

db2

表空间

name

copy

of

it

分类: 数据库-问题解决
SQL:-904是比较常见的一个错误代码。

目前我在处理中总结了3种情况和对应的解决方法,请大家讨论和补充其他的。

SQL CODE:

-904   UNSUCCESSFUL EXECUTION CAUSED BY AN UNAVAILABLE RESOURCE. REASON
       reason-code, TYPE OF RESOURCE resource-type, AND RESOURCE NAME  
       resource-name            

一般来讲是该表的表资源不可用,

1:在处理该表时,作业ABEND:

ABEND情况很多,load的时候PUNCH和DATA不匹配啊,LOAD文件参数错误都会导致904.
如何查找导致该表ABEND的作业名呢,我们可以使用DB2 相关工具提供的DB2 COMMANDS或者直接提交作业去看。
//STEP01 EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*                 
//SYSPRINT DD SYSOUT=*                 
//SYSTSIN  DD *                        
DSN SYSTEM(系统ID)                        
-DIS UTIL(*)                  
//*                                    
结果如下:
DSNU100I  -DB名 DSNUGDIS - USERID = XXXXX            
                MEMBER =                                 
                UTILID = 导致该表ABEND的作业名                        
                PROCESSING UTILITY STATEMENT 1           
                UTILITY = LOAD                           
                PHASE = RELOAD   COUNT = 0               
                NUMBER OF OBJECTS IN LIST = 1            
                LAST OBJECT STARTED = 1                  
                STATUS = STOPPED (状态)                        
我们需要使用TERM UTILITY去结束这个状态。
同样用DB2 COMMANDS:
//FIXUTUT EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*                 
//SYSPRINT DD SYSOUT=*                 
//SYSTSIN  DD *                        
DSN SYSTEM(系统ID)                        
-TERM UTIL(导致该表ABEND的作业名                     

2: TABLE在LOAD后未经CHECK DATA:
判断这种情况可以使用:
-dis db(DB名) limit(300)
以下可见:
NAME        TYPE PART STATUS
-------- ---- ---- ------
表空间名1 TS               RW   
表空间名2 TS               RW   
RW表示可用,如为CHK表示需要CHECK DATA。
使用JOB来提交CHECK DATA功能:
//CHECK   EXEC DSNUPROC,PARM='系统ID,DSNTEX',COND=(4,LT)
//SYSUT1   DD  UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND)
//SORTLIB  DD  DSN=SYS1.SORTLIB,DISP=SHR              
//SORTOUT  DD  UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND)
//SORTWK01 DD  UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND)
//SORTWK02 DD  UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND)
//SORTWK03 DD  UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND)
//SORTWK04 DD  UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND)
//DSNTRACE DD  SYSOUT=*                              
//SYSERR   DD  UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND)
//SYSIN    DD                                       
CHECK DATA TABLESPACE DATABASE名.表空间名              

3. 在LOAD数据后Copy pending
如果在LOAD数据时使用了LOG NO参数会导致TABLE COPY PENDING。
此时将该表数据备份可解除该状态:
//FIXRECP EXEC DSNUPROC,SYSTEM='系统ID',UID='CDFRBFIX',UTPROC=''   
//DSNUPROC.SYSPRINT DD SYSOUT=*                                 
//DSNUPROC.SYSIN  DD *                                          
    COPY TABLESPACE DATABASE名.表空间名 COPYDDN filename      
//DSNUPROC.filename DD DISP=(MOD,CATLG,DELETE),                  
//      DSN=GDG FILE NAME(+1),               
//    UNIT=SYSDA,LABEL=(1,SL,EXPDT=99001)

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有