Oracle 9.0.2.6

I am trying to populate the Stats on a newly loaded date partition by copying the stats from the previous day. The old method used GET_TABLE/INDEX/COLUMN_STATS and SET_TABLE/INDEX/COLUMN_STATS but that was limited because it didn't copy any of the histogram data. This gives us severe performance problems because the optimizer keeps on choosing to use indexes with very bad cardinality.

Therefore I came up with a new method that involved exporting stats with the cascade option to a STATS table, updating the partition name (column C2) on the STATS table and then importing those stats to the new partition.

I've run this and looked at USER_TAB_PARTITIONS, USER_IND_PARTITIONS, USER_PART_COL_STATISTICS and USER_PART_HISTOGRAMS, and everything is identical between the two partitions. For all intents and purposes, the stats copy appears to have worked perfectly.

And yet...when I do run the same query with each partition, Oracle still chooses a different plan. I set up some skewed data with ID=1 having many values but ID=2 having few values. For the partition where I gathered stats, the optimizer correctly works out that it should use the index for ID=2 but a full table scan for ID=1. But for the other partition, it still wants to use an index scan for both. The data in the two partitions is identical.

Has anybody any suggestions on what could cause this ? If Oracle genuinely is using just the statistics to decide on the query path, why would it be different when the statistics are identical. Is there some hidden flag that is invalidating the statistics ?