You seem to be presenting conflicting requirements. If you have to use the same program in CICS and in Batch, what do you mean by “called at initialization by the load driver”? Do you mean at IPL time, to be loaded into the MVS CSA? That’s not the usual place for CICS programs.
If you want something to run at CICS initialization time, you can put a program into the PLTPI list. That program will run as a subroutine under the CPLT transaction, and will be running in CICS storage key (if you’re using STGPROT). I would advise doing a GETMAIN SHARED USERDATAKEY to acquire an area of storage, then write out the address of that area into a TSQ MAIN. Have a different subroutine to be called by all your applications, and it will a) read that MAIN TSQ for the address, then b) SET ADDRESS of some Linkage Section entry to that address. The Linkage Section entry has to describe the storage layout of the GETMAINed area. I would use a common copybook for that data-area description.
From batch, each address space is going to have to go out and get the DB2 data itself, unless you intend to load it into the MVS CSA. The only other option I can think of would involve writing a non-reentrant Assembler program, lying to MVS about it, putting it into the LPA, and then going into privileged mode (SPK0) to modify the program’s text itself to store the data. I wouldn’t recommend doing that.