When using bind variables the explain can differ from the actual execution plan because there is no bind variable peeking taking place for the explain. So a difference in explain and execution does not necessarily mean statistics are stale. If no stats are gathered and you are using cost based optimization, dynamic sampling should occur for both the explain and execution.
You can use the rule hint to force a query to use RBO or set the optimizer_mode at the session level to RULE.
The rule-based optimizer is not in 10.2 anymore. Plus I don't see the RULE hint anymore in the 10.2 Performance tuning manual. One way to get practically the same behavior (in terms of access paths) would be to make sure you have no histogram. Then the optimizer would probably use any index, no matter how harmful it is, as it was doing with the rule-based optimizer.
Also, if perform 10046 trace on SQL statements that generate recursive SQL you will see Oracle still uses the RULE hint
I did a trace and YES, i noticed that it in fact uses RULE.
Would you know why that is? Since we know that we should be using CBO instead(assuming the underlying data dictionary also follows the same rules). Is this to make Oracle server run faster? Or was it because that those sql's written long ago and they never got to revisit some of the code?