• I've not hit the magic billion but I have done 100's millions.

    I used to take the production server down for a morning when I did it.

    My approach was as follows

    • Calculate the size of the table to be copied.  See BOL and in the index type "calculating table size" the top three entries are the valid ones.
    • Expand the target database by that size.  You don't want the database autoresizing when this baby runs!
    • If you use trunctate log on checkpoint then switch it off.
    • Expand the transaction log, again you don't want it auto-resizing.
    • Drop all indices/constraints/primary keys/triggers on the target database etc
    • Use DTS Wizard to build and run the insert.
    • Rebuild indices/constraint/primary keys/triggers etc.
    • You may want to truncate the transaction log and DBCC SHRINKFILE it.

    I'm a bit rusty on the process because it is something that I did in my last job, over 4 years ago but I seem to remember I had to expand TEMPDB for the reindexing part of the process.  Again, you don't want autoresizing to take place whilst the job takes place.

    I also had to kick everyone off the database server when I did the process.

    The choice was stay off the server and have everything back by lunchtime, or stay on the server and this urgent data might be ready next week.