z/OS上Dataset 的移动
最近的一个需求,需要把大批量的Dataset移到新的Storage Class,新的Volume中去,刚开始感觉非常头疼。仔细研究后发现这个事情其实很简单。确实符合别人所说,事情的在你真正开始努力之后就会变简单了。
首先创建你的target Storage class和Storage Group,并把相关的Volume加到对于的SG,这时候不需要担心现有的Vol上已经存在的Dataset,改动Storage Group不会删除DataSet。
然后配置ACS Routines,将HLQ,SC和SG关联起来,Validate并激活你的ACS。 用命令 /SETSMS SCDS(SMS.ACS) 可以避免在Console上再输入一次yes。
最后就可以开始真正Move DataSet了,用ADRDSSU来实现
//IMPRTCON EXEC PGM=ADRDSSU //SYSPRINT DD SYSOUT=* //SYSIN DD * COPY - DATASET(INCLUDE(RBC9CAT.**, - RBC9REG.**, - ) - ) - STORCLAS(TPHCRYSC) - BYPASSACS(**) - DELETE
注意第9行写要把这些DataSet 移动到的目标SC,这时候因为SC和SG已经建立了关联关系,所以会自动把DataSet放到目标Volume上。 其实这时候可以先不用建立HLQ和SC的对应关系,因为有BYPASSACS(**),所以这些新的DataSet可以忽略ACS的规则。
剩下的时间就是等待时间,这些JOB可能会跑很长时间,因为移动大批量的Dataset还是很费时间的的。所以常见的一个错误是
IEW4000I FETCH FOR MODULE ANTCVXPR FROM DDNAME *VLF* FAILED BECAUSE INSUFFICIENT STORAGE WAS AVAILABLE. CSV031I LIBRARY ACCESS FAILED FOR MODULE ANTCVXPR, RETURN CODE 24, REASON CODE 26080021, DDNAME *LNKLST*这个主要问题是REGION的size太小,可以增大REGION或把上面的JCL include的DataSet拆分来让JOB顺利跑完。