I do an FTP get against a production server. When I do it on our test box it creates a file of fixed block format with an LRECL of 128 bytes. When I run the exact same FTP against the same server on our production mainframe it creates a variable blocked file of 256 bytes. Very odd. Different data pools? Different defaults? What do I do to make the file produced in production be FB/128?
It sounds like the defaults are different on the "test box" (is this a different LPAR than the production mainframe you mention?) and the production mainframe. There are defaults that come with the system and they are customizable by the system programmer. There is a somewhat complicated search order for where these defaults can be specified or overridden by the user (see the manuals I quote below for details), but they are in a file called FTP.DATA or FTPSDATA. The default LRECL is 128 and the default RECFM is VB if the system programmer does not change any of the defaults. The file also controls things like the default space allocation size and type (trk vs.cyl) and whether the default FTP environment is z/OS MVS or z/OS Unix.
The best way to ensure you always get the file format you want is to use the SITE or LOCSITE commands prior to issuing a GET or PUT in your FTP process. If you are doing a GET from the mainframe you would use LOCSITE prior to the GET. If you were doing a PUT from another platform to the mainframe, you would use the SITE command - which you need to send via "QUOTE SITE".
Here is an example of doing a GET from an FTP batch job on the mainframe (assume the server is at 172.19.158.100):
//FTP JOB (ACCT),CLASS=A,...
//STEP1 EXEC PGM=FTP,REGION=4M,PARM='(EXIT'
//SYSPRINT DD SYSOUT=*
//OUTPUT DD SYSOUT=*
//INPUT DD *
locsite LRECL=80 BLKSIZE=27920 RECFM=FB
locsite CYL PRIMARY=100 SECONDARY=20
get /dir1/dir2/mydata.bin 'USERID.MY.DATA'
This was first published in March 2006