Nightly care and feeding of your Visual SourceSafe database is a must. If you are working with a project or multiple projects of any size, this is an important task. The challenge is that Microsoft makes it a little difficult to find the right tools to help you keep your database tuned.
The process I created and describe below has worked for me for years. It is a bit of overkill, but has produced a stable database night after night, and has continued to work through 3 VSS version updates.
The process is a 3 step batch file:
- Run a base Analyze to identify any bad data, backup
- Rerun using -F switch (fix), backup
- Rerun using -C switch (compress), backup
Steps 2 and 3 are a bit redundant as they both use the fix (-f) switch. You may chose not to use that switch both times.
Batch file code:
1: cd c:\
2: cd program files\microsoft visual sourcesafe
3:
4: REM *** Set the base variables for directory names
5: for /F "tokens=2,3,4 delims=/ " %%i in ('date/t') do set d=%%k%%i%%j
6: for /F "tokens=1,2,3 delims=:. " %%i in ('time/t') do set t=%%i%%j%%k
7: set B=e:\Backups\VSS\Analyze
8: set C=%B%\Current
9: set S=%B%/%d%-%t%
10: set A=C:/public/VSS/data
11:
12: ANALYZE -V4 -I- -B"%C%" "%A%"
13: for /F "tokens=2,3,4 delims=/ " %%i in ('date/t') do set d=%%k%%i%%j
14: for /F "tokens=1,2,3 delims=:. " %%i in ('time/t') do set t=%%i%%j%%k
15: REN %C% %d%-%t%A
16: MKDIR %C%
17: ANALYZE -F -I- -V4 -B"%C%" "%A%"
18: for /F "tokens=2,3,4 delims=/ " %%i in ('date/t') do set d=%%k%%i%%j
19: for /F "tokens=1,2,3 delims=:. " %%i in ('time/t') do set t=%%i%%j%%k
20: REN %C% %d%-%t%B
21: MKDIR %C%
22: ANALYZE -F -I- -C -V4 -B"%C%" "%A%"
23: for /F "tokens=2,3,4 delims=/ " %%i in ('date/t') do set d=%%k%%i%%j
24: for /F "tokens=1,2,3 delims=:. " %%i in ('time/t') do set t=%%i%%j%%k
25: REN %C% %d%-%t%C
26: MKDIR %C%
27:
The batch file has some DOS trickery to tease out the current date and time. This allows me to rename (REN) the "\vss\Analyze\Current" directory to the time the step completed.
The result is a the following file structure in my e:\ drive:
e:\Backups\vss\Analyze\[yyyy][mm][dd]-[hh][mm][am/pm][a/b/c]
e.g.
e:\Backups\vss\Analyze\20080319-0144AMC
This structure allows me to run the backup a weekend evening and if the database goes haywire, I can get any one of the last "good" databases for recovery, even if one of the last good backups was in the middle of this batch script. It also allows me to delete "old" backups as I see fit. Of other note, a log file (analyze.log) is placed in the root of each backup directory, in case you want to see exactly what went down during the process.
For the record, my VSS database contains over 55k files, occupies 1.35GB on the hard drive, and this process takes ~2.5 hours to run. If you run this during the work week (or your dev team has no life), you need to log in to the VSS database and lock it using the Administration tool, then log out. The FIX (-F) switch will not work if any users are actively logged in to the database. Sadly, there is no command line to lock the database.