Some of the differences are:
In oracle 9i we can drop column this option is not availbe in 8i
New datatype called timestamp
You can moniter index using alter index <index name> monitering usage
You can check user_objects table from system user
New performance monitering tools called STATPACK
You can dynamically change init ora parameter using alter system <parameter> scope=/path/ of your spfile/pfile
New concept for undo transaction called UNDO tablespace
By default TEMP tablespace is considering while creating new oracle users
New partition called LIST
Tablespace next extent can be managed automatically
In oracle 8i default tablespace is dictonary managed while in 9i it is locally managed
Oracle 9i can support 512 PetaByte of data
Oracle can supprt 10,000 concurrent users.
Oracle 9i provides auto undo segment management.
9i Supports RAC
Simplified scripts for RMAN backup and Recovery
Rollback segments (undo) is managed automatically by Oracle
Multiple block size support.
ANSI Support for join i.e inner-join,outer-join,left-outer join keyword introduced instead of operator(+)
I’m sure that there are other things which other people can add to this list.