Thank you for your post which pointed me correct solution of the problem.
I have query which run is about 1 minute first time and about 2 hours second and next times.
From trace I have found that there is active cursor usage (about 40% of the execution time) for first execution and this cursor is not used for next executions.
The problem was resolved after turning off cardinality feedback ("_optimizer_use_feedback" parameter).
If you do not have privileges to Alter the session, you can test this solution by adding this (commented out) code to your query:
/*+ opt_param('_optimizer_use_feedback' 'false') */
It will not work (but also will not throw an error) if you do not include the + and ensure that your single quotes ' ' have not been replaced by ‘directional quotes’
When used, it should look like this:
SELECT /*+ opt_param('_optimizer_use_feedback' 'false') */