It is not always CPU bottleneck or CPU issue in oracle server if DB CPU is high in AWR Report. Do your math before jump into conclusions. Through sqlplus or OEM you can generate AWR report as snapshot. In Top 5 Timed Forground events, you will see
Time(s) in second.
In our case DB CPU got 3150.
Now go to Operating System Statistics, and you will see BUSY_TIME, IDLE_TIME, NUM_CPUS.

DB CPU=3150
Snapshot time= 1 hrs= 60 mins

Total CPU: NUM_CPUs * snapshot_time * 60(secs)
= 4 X 60 X 60 secs
=14,400 secs

Out of 14400 secs cpu time, only 3150 sec cpu time has been used.
% used= (3150/14400)x100
= 21 % busy.

In this case CPU is not busy at all. But in case CPU is busy say above 80% , you can go “SQL ordered by CPU Time” reports and
find the sql ID that makes CPU DB busy. When you find sql ID that is taking high cpu resources, you can tune the sql query performance.

Happy Perforance Tuning guys!!!!