If you want to access different databases from different threads simultaneously, you should create a TOracleSession instance within the thread, and free the session when the thread is finished. The same goes for any TOraclyQuery and other instances you want to use.
If each thread has its own session, you don't have to worry that threads block eachother at the session level.
If you need many queries, you can create a data module at design-time, and create a data module instance at the thread level instead. It is of course much easier to setup your components at design-time than at run-time.