If you have off-peak times, you could try using a timestamp column on your production tables to identify new/modified rows, then extract the new rows every night. This should minimise the impact of the process on your production schema and avoid the extra overhead involved in using triggers. You would need a table to store the last extracted timestamp value for each table.
You would also need to check your code for any 'select *'s etc. which might cause problems when the new columns are added...
How best to actually move the data is another question of course.
Tim Wilkinson
"If it doesn't work in practice, you're using the wrong theory"
- Immanuel Kant