The optimizer's main goal is to generate the optimal execution plan for SQL statements.
SQL plan management monitors execution plans over time in order to check if they deteriorate.
Optimizer statistics
When the optimizer formulates a plan, it bases its decision on statistical numbers, commonly referred to as optimizer statistics.
Such statistical numbers include:
Table related statistics such as numbers of rows
Column statistics such as number of nulls
Index related statistics such as B-tree levels
System statistics such as CPU and I/O performance
Hints
Hints allow a developer to override the execution plan that Oracle would have chosen otherwise.
If an SQL statement is not modifiable (for example because it is exectued from a 3rd party application), it is still possible to inject hints into the statement with SQL patches.
With adaptive query optimization, the statement executor can adjust an SQL execution plan (which was created at compile-time) at run-time.
SQL plan directives store statistical information about past executions of an SQL statement. They're used to (hopefully) create a more optimal plan for a future execution of the SQL statement.