ODI 12c works in a different way compared to ODI 11g in terms of naming convention for temporary tables (C$_, I$_, etc). We need to take extra care when running processes in parallel, mainly in Load Plan parallel steps and even with ODI projects running in parallel.
The generated name of the C$ temporary table is usually based on the alias of the object directly connected to the target table.
For instance, if we have a filter before the target table, ODI will run the following statement:
“create table ODI_TEMP.C$_0FILTER …”
This will create a non-unique table name and it can be easily messed up by any other ODI process running in parallel.
There are different approaches to work around the issue, I suggest one of these two:
- To rename the aliases of the objects directly connected to the target tables to a unique and meaningful name.
- To use the “Use Unique Temporary Object Names” and “Remove Temporary Objects on Error” properties of the “Physical” tab from mappings:
The name of the temporary table won’t be meaningful (alphanumeric string randomly generated) but it will be 100% unique.
For more information on this topic, please refer to: