I second Peter Midgley. Everything he said happens in our company too.
We use a trigger based system. We track every time a row is add/deleted/changed by user and time , and we record the old data for "important" fields that get changed. But we don't create an entire duplicate database.
This keeps the space needed for audit logs to a sane level (it's an OLTB system).
I also have to agree that accountability is a WONDERFUL way to keep users careful...