The Artima Developer Community
Sponsored Link

.NET Buzz Forum
End-to-End Analyze Script for Keeping a VSS Database Healthy

0 replies on 1 page.

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 0 replies on 1 page
Korby Parnell

Posts: 136
Nickname: korbyp
Registered: Aug, 2003

Korby Parnell is Programming Writer for Microsoft Visual SourceSafe and Visual Studio .NET
End-to-End Analyze Script for Keeping a VSS Database Healthy Posted: Aug 1, 2003 7:11 PM
Reply to this message Reply

This post originated from an RSS feed registered with .NET Buzz by Korby Parnell.
Original Post: End-to-End Analyze Script for Keeping a VSS Database Healthy
Feed Title: Korby Parnell
Feed URL: /msdnerror.htm?aspxerrorpath=/korbyp/Rss.aspx
Feed Description: Copyright 2003 Korby Parnell Fri, 01 Aug 2003 10:03:48 GMT ChrisAn's BlogX korbyp@microsoft.com korbyp@microsoft.com Alex Lowe Joins Microsoft http://blogs.gotdotnet.com/korbyp/permalink.aspx/536bb108-6a66-4dc6-8847-69f4d799bb55 http://blogs.gotdotnet.com/korbyp/permalink.aspx/536bb108-6a66-4dc6-8847-69f4d799bb55 Fri, 01 Aug 2003 10:03:48 GMT From ASP.NET MVP to Microsoft .NET Evangelist.  Success is the domain of good guys.  Welcome aboard Alex.  I look forward to meeting you in person.  Thanks to ScottW for posting the big announcement. Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no otorga ningún derecho.
Latest .NET Buzz Posts
Latest .NET Buzz Posts by Korby Parnell
Latest Posts From Korby Parnell

Advertisement

One of the most frequently asked questions about VSS is: 'I can't run Analyze on a weekly basis as recommended because inevitably, there's at least one user who forgets to checkin their files on Friday afternoon. Is there any way to disconnect users from a database?'  The short answer is a qualified 'no'.  VSS provides no way to forcibly disconnect users from a database.  The long answer is YES, but you have to do it in Windows.  My team uses the following PERL script which:

1) Forcibly disconnects all users from a VSS database (net stop server /y);
2) Locks the VSS database (copy \"$db\\data\\loggedin\\locked.lk\" \"$db\\data\\loggedin\\admin.lk\");
3) Runs Analyze.exe (system("\"$db\\win32\\analyze.exe\"","-b\"$db\\backup\"","-i-","-v4","-f","-c","-d","\"$db\\data\"");

As you'll see, our script does much more than that, but those are the basics.  Please feel free to post your own scripts in the comments section of this post. As always, your comments and questions are greatly appreciated.  For an alternative to this script, see http://www3.primushost.com/~ckollars/backup.html#force.

Special thanks to Justin Russell for offering to bare his code to the world.  Justin, you're a scholar and a gentleman.  Thank you.

# MaintainVSS
# Justin Russell
# Microsoft Corporation
# May 2003
# Performs various support services for a VSS database

use Getopt::Long;

# set defaults
my $db = "H:\\DB\\Anacortes";
my $bAnalyze = '';
my $bBackup = '';
my $bShadow = '';
my $logroot = "G:\\MantainVSSLogs";
my $help = '';
my $shadowpath = " \\\\Fidalgo\\shadow\\Anacortes1";
my $backuppath = "D:\\backups\\Anacortes";

GetOptions( "database=s"    => \$db,        # required (=) string path to db
            "analyze"       => \$bAnalyze,  # bool flag: should we analyze the db?
            "backup"        => \$bBackup,   # bool flag: should we backup the db?
            "shadow"        => \$bShadow,   # bool flag: should we recreate the shadow?
            "log=s"         => \$logroot,   # required string path to log
            "shadowpath=s"  => \$shadowpath,# where the database should be shadowed to
            "backuppath=s"  => \$backuppath,# where the database should be backuped to
            "help|?"        => \$help)      # bool flag: should we display help?
            or die "Couldn't get options. $!\n"; 
           
if ($help || !($bAnalyze || $bBackup || $bShadow))
{
    print "\nMaintainVSS.pl \nFor limited support contact Justin Russell \n\nUsage: MaintainVSS.pl [--database=\"path\"] [--log=\"path\"] [--analyze] [--backup[:\"path\"]] [--shadow[:\"path\"] \nAll options are optional (though if you don't provide a command nothing will happen :) ), can be called in the short form (e.g. \"-a\" instead of \"--analyze\"), and equal signs are optional.\n\n";
    exit;
}

my @daynum = localtime;
$logpath = "$logroot\\$daynum[7]\.log";

my $user = getlogin;
$now = scalar localtime;

open LOG, ">$logpath" or die "Couldn't open or create the log at $logpath: $!\n";
print LOG "MaintainVSS started at $now by $user. \n\nToday we'll be running the following commands on $db: \nAnalyze: $bAnalyze \nBackup: $bBackup \nRecreate Shadow: $bShadow \n\n";

if ($bAnalyze)
{
    $now = scalar localtime;
    print LOG "Starting Analyze routine at $now.\n\n";
    analyze();
}

if ($bBackup)
{
    $now = scalar localtime;
    print LOG "Starting Backup routine at $now.\n\n";
    backup();
}

if ($bShadow)
{
    $now = scalar localtime;
    print LOG "Starting Shadow routine at $now.\n\n";
    shadow();
}

$now = scalar localtime;
print LOG "\nScript compete at $now\n";
# PAU

# use this to run the analyze routine
sub analyze
{
 print "Contacting users.\n";
 system("net send /users \\Fidalgo going offline in 0 minutes for routine VSS maintenance \(Analyze.exe\). Back in a few hours."); # inform users of shutdown
 print "Stopping file sharing.\n";
 system("net stop server /y"); # shut down file sharing
 print "Locking database.\n";
 `copy \"$db\\data\\loggedin\\locked.lk\" \"$db\\data\\loggedin\\admin.lk\"`; # lock the db
 print "Deleting temporary files.\n";
 `del \"$db\\temp\\*.*\" /f /q`; # delete old temp files
 print "Saving backup.\n";
 `copy \"$db\\backup\" \"$db\\old\"`; # backup the backup
 print "Setting up new backup.\n";
 `del \"$db\\backup\" /f /q`; # delete the existing backup
 print "Checking for old Analyze log.\n";
 `del \"$db\\backup\\analyze.log\" /f /q`; # delete analyze log, if any
 # run analyze with: -b backup, -i- non-interactive, -v4 verbose, -f fix errors, -c compact db, -d delete unused files
 print "Starting Analyze.\n";
 system("\"$db\\win32\\analyze.exe\"","-b\"$db\\backup\"","-i-","-v4","-f","-c","-d","\"$db\\data\""); # note: no space after b switch
 print "Unlocking database.\n";
 `del \"$db\\data\\loggedin\\admin.lck\"`; # unlock the db
 print "Moving and renaming the Analyze log.\n";
 `move \"$db\\backup\\analyze.log\" \"$logroot\\analyze$daynum[7].log\"`;
 print "Starting file sharing.\n";
 system("net start server"); # restart file sharing
 print "Staring \"Computer Browser\"\n";
 system("net start \"Computer Browser\"\n");
 print "Starting \"Distributed File System\"\n";
 system("net start \"Distributed File System\"\n");
 print "Starting \"Backup Exec Remote Agent for Windows NT\/2000\"\n";
 system("net start \"Backup Exec Remote Agent for Windows NT\/2000\"");
}

# use this to run the backup routine
sub backup
{
    get($backuppath);
}

# use this to run the shadow recreation routine
sub shadow
{
    # Delete and recreate old Get path to avoid keeping old files
    `rd $shadowpath \/s \/q`; `md $shadowpath`;
    get($shadowpath);
}

sub get
{
    # ensure path passed exists
    my $path = $_[0];
   
    # -r- means don't include comments, -r means work recursively
    # -i- disables prompts
    # -gl specifies the destination of the Get, -gtu sets the timestamp to the modified time,
    # -gf- disables force_dir initialization, -gwr replaces read-only files, -y sets the username
   
    system ("$db\\win32\\ss.exe","get","\$\/","-R","-I-","-GL$path","-GTU","-GF-","-GWR","-Y$user") == 0 or die "Couldn't run the VSS Get command: $!\n";
}

This posting is provided "AS IS" with no warranties, and confers no rights. Microsoft kann für die Richtigkeit und Vollständigkeit der Inhalte in dieser Newsgroup keine Haftung übernehmen. Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no otorga ningún derecho.

Read: End-to-End Analyze Script for Keeping a VSS Database Healthy

Topic: New Category of Spam Previous Topic   Next Topic Topic: Movie Weekend

Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use