>4. I then close each table that I want to backup, use the corresponding table in the backup directory, and then append from the original.
>
>So far this seems to work great and I haven't had any problems with it.
>If anyone sees a hole in this method please let me know.
The only conceivable hole is the time it takes to accomplish the (4) above; some tables may have records added or updated before they get appended to the backup, and some others may have related records which get added or changed after the backup. This way the data set in the backup may be slightly inconsistent, i.e. the latest changes to it may be incomplete. I'm not sure if even transactions would save you from this - they would lock the tables involved, but there's still a chance that you may backup one table before a transaction, and another one after it.
Don't ask me for a solution, you asked for the hole only :)
That aside, I don't see any way around this, short of getting everybody out of the app and doing a clean backup - but then you lose the "nobody needs to get out while we do the backup".
The other shortcoming is the increase of the housekeeping you have to do if you change structures - you need to make sure everything will still work if data are restored from the backup with old structures. But then, this is the same with every method of backup.