I was going to suggest something similar to what gman said, but then I thought if you were having database issues, one of those issues might be that the DB is down, so recording errors in the DB might not work out so well.
in reply to avoiding a race
I came up with two ideas: 1) Have all processes write their errors to log files named by process ID; then have a separate process create a report from those logs and email the admin. 2) Have a daemon listening on a socket (maybe a unix socket for simplicity) and have all processes write their errors to that socket. This process will make the decisions about which errors to report.
Both options have the advantage of the reporting logic being in one place, and there shouldn't be any race conditions.