1. Based on what you've said, partitioning on batch_id is worth looking into.
12.2 adds auto-list partitioning, which would make this easier to manage in your scenario. But as you're on 12.1, I'd start with interval-range partitioning.
2. I don't understand why you want to use a GTT?
As you've mentioned parallel processing, DIY parallelism may help you here:
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4248554900346593542 3. Batch processing is a rather broad term; general advice may not apply (or make things worse!) in your scenario. If you have more specific questions regarding your process just ask.