I was really impressed with 10g's DML Error logging feature (where one can used bulk loads and have common errors go into an ERR$_ table without raising the error and rolling back the data). But then, when looking to use the feature in a real life situation, we ran into this statement from the Oracle DW Docs:

"The following conditions cause the statement to fail and roll back without invoking the error logging capability: ...
* Any direct-path INSERT operation (INSERT or MERGE) that raises a unique constraint or index violation"

Boy, that stings. When loading millions of rows into a fact table, we NEED to use direct-path inserts and we also need to have local unique indexes and catch duplicates on those columns. So we can't use DML Error Logging in these cases - the statement will just rollback as usual.

I'd like to get some expert thoughts on this - what workarounds are there for us to use this nifty new feature? Or, if we can't use a logging table, what are the best alternatives to handling unique constraints while still doing direct-path loads (insert /*+ append */). It seems PL/SQL doesn't give us a perfect option (even with forall, it's not direct path).

Thanks.