How can I verify that a full database restore reflects the exact source database in SQL Server?
When you take the backup of database, the last LSN on the source will be X. If any activity will occur (including, say, an automated checkpoint), the source LSN will progress forward to X+n. If there is any activity that occurred on the source and was not captured on in the backup it would leave an imprint in the source log, somewhere between LSN X and X+n. Using fn_dblog one can look at the log and see if any such activity occurred.

An easy way to ensure no such activity occurs after backup is to set the database to read_only immediately after taking the backup. To prevent any activity sneaking in between the backup and the change to read_only you can disable connections or set the database in single_user mode, even start the server in single user mode.

So a procedure like following should be pretty much bulletproof:


restart source server in single user mode (-m)
connect and take the backup
change database to read_only
restore the database on the new server
run any tests you have on the new server
connect applications to new server
decommission or restart old server