{"id":150,"date":"2026-10-12T14:02:28","date_gmt":"2026-10-12T14:02:28","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2009\/10\/06\/ssarc-utility-ssrestor-utility\/"},"modified":"2026-10-12T14:02:28","modified_gmt":"2026-10-12T14:02:28","slug":"ssarc-utility-ssrestor-utility","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/ssarc-utility-ssrestor-utility\/","title":{"rendered":"SSARC and SSRESTOR in Visual SourceSafe: Safe Archive and Restore Guide"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Originally published on 2009-10-06; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide explains how to use Microsoft Visual SourceSafe command-line utilities <strong>SSARC<\/strong> (archive) and <strong>SSRESTOR<\/strong> (restore). It is aimed at teams maintaining legacy VSS databases and shows safer backup-first workflows, option behavior, and practical commands. For historical context, see the <a href=\"https:\/\/www.devopsschool.com\/blog\/ssarc-utility-ssrestor-utility\/\">original post<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2009\/10\/ssarc-utility-ssrestor-util.png\" alt=\"SSARC Utility and SSRESTOR Utility\" \/><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What SSARC and SSRESTOR are for<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In Visual SourceSafe, these utilities support command-line archive and recovery operations outside the GUI wizards in VSS Administrator.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>SSARC<\/strong>: Archives files\/projects (or selected historical versions). It can optionally delete archived items from the database.<\/li><li><strong>SSRESTOR<\/strong>: Restores items from an archive file back into a VSS database.<\/li><li><strong>Both utilities<\/strong>: Support standard VSS options like credentials, non-interactive mode, and output redirection.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Recommended archive and restore workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For operational safety, run archive jobs in non-destructive mode first, validate the archive, and only then consider deletion-oriented runs.<\/p>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Choose project scope] --> B[Run SSARC with no delete]\n    B --> C[Validate archive with list or test]\n    C --> D{Need to remove items from VSS}\n    D -- No --> E[Keep archive as backup]\n    D -- Yes --> F[Run SSARC with delete mode]\n    E --> G[Store archive securely]\n    F --> G\n    G --> H[Use SSRESTOR for recovery]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">SSARC vs SSRESTOR at a glance<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Utility<\/th><th>Primary purpose<\/th><th>Input<\/th><th>Can change VSS contents<\/th><th>Notable behavior from source<\/th><\/tr><\/thead><tbody><tr><td>SSARC<\/td><td>Create archive files from VSS files\/projects or version ranges<\/td><td>VSS path(s) such as $\/Project<\/td><td>Yes, if <code>-D<\/code> is used<\/td><td>Archive file size over 2 GB is described as unsupported in the source<\/td><\/tr><tr><td>SSRESTOR<\/td><td>Restore from existing archive files<\/td><td>.ssa archive + optional target items\/project<\/td><td>Yes, writes restored items into the destination database<\/td><td>Restore fails on duplicate project\/file names; includes list and test modes<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Syntax reference<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">SSARC syntax<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-bash\">ssarc &#91;-C]&#91;-D]&#91;-I-]&#91;-O]&#91;-S]&#91;-V]&#91;-X]&#91;-Y] <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">archive<\/span> <span class=\"hljs-attr\">file<\/span> <span class=\"hljs-attr\">to<\/span> <span class=\"hljs-attr\">create<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">files<\/span>\/<span class=\"hljs-attr\">projects<\/span> <span class=\"hljs-attr\">to<\/span> <span class=\"hljs-attr\">archive<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">SSRESTOR syntax<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-bash\"><span class=\"hljs-selector-tag\">ssrestor<\/span> <span class=\"hljs-selector-attr\">&#91;-C]<\/span><span class=\"hljs-selector-attr\">&#91;-I-]<\/span><span class=\"hljs-selector-attr\">&#91;-L]<\/span><span class=\"hljs-selector-attr\">&#91;-O]<\/span><span class=\"hljs-selector-attr\">&#91;-P&lt;project&gt;]<\/span><span class=\"hljs-selector-attr\">&#91;-S]<\/span><span class=\"hljs-selector-attr\">&#91;-T]<\/span><span class=\"hljs-selector-attr\">&#91;-X]<\/span><span class=\"hljs-selector-attr\">&#91;-Y]<\/span> &lt;<span class=\"hljs-selector-tag\">archive<\/span> <span class=\"hljs-selector-tag\">file<\/span> <span class=\"hljs-selector-tag\">to<\/span> <span class=\"hljs-selector-tag\">restore<\/span>&gt; <span class=\"hljs-selector-attr\">&#91;files\/projects]<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Notation reminder: values in <code>&lt;...&gt;<\/code> are required arguments, <code>[...]<\/code> are optional, and options with spaces in their values should be wrapped in quotes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Important options and operational impact<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Option<\/th><th>Utility<\/th><th>Effect<\/th><th>When to use<\/th><\/tr><\/thead><tbody><tr><td><code>-D<\/code><\/td><td>SSARC<\/td><td>Deletes archived items from the VSS database<\/td><td>Data-pruning jobs only, after validated backups<\/td><\/tr><tr><td><code>-D-<\/code><\/td><td>SSARC<\/td><td>Do not delete archived items (or avoid prompt-driven deletion)<\/td><td>Normal backup runs<\/td><\/tr><tr><td><code>-I-<\/code><\/td><td>Both<\/td><td>No interactive prompting<\/td><td>Scheduled\/automated runs<\/td><\/tr><tr><td><code>-V...<\/code><\/td><td>SSARC<\/td><td>Archive up to a version\/date\/label (inclusive behavior is described in source)<\/td><td>History slicing before cleanup<\/td><\/tr><tr><td><code>-L<\/code> \/ <code>-LA<\/code><\/td><td>SSRESTOR<\/td><td>List archive contents without restoring<\/td><td>Pre-restore verification<\/td><\/tr><tr><td><code>-T<\/code><\/td><td>SSRESTOR<\/td><td>Test archive for corruption without restore<\/td><td>Integrity check before recovery<\/td><\/tr><tr><td><code>-P&lt;project&gt;<\/code><\/td><td>SSRESTOR<\/td><td>Restore under a specified destination project<\/td><td>Relocation or cross-database restore<\/td><\/tr><tr><td><code>-X<\/code> \/ <code>-X-<\/code><\/td><td>Both<\/td><td>Controls deleted-item handling\/selection<\/td><td>When deleted and undeleted items share names<\/td><\/tr><tr><td><code>-Y&lt;user&gt;,&lt;pwd&gt;<\/code><\/td><td>Both<\/td><td>Credentials for command execution<\/td><td>Required for scripted runs<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Practical command examples<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Create a full archive without deleting anything<\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">SSARC -d- -yadmin,password archive.ssa $\/<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Backs up the full default VSS tree into <code>archive.ssa<\/code> and leaves database contents unchanged.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Archive using a label selector and write a log<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\">SSARC -d- <span class=\"hljs-string\">\"-vlProduction Release\"<\/span> -yadmin,password -olog.txt archive.ssa $\/Test<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Archives versions associated with the label expression and writes command output to <code>log.txt<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Archive deleted items and remove them from VSS<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\">SSARC -d -x -yadmin,password archive.ssa <span class=\"hljs-string\">\"$\/Project Global Domination\"<\/span> $\/OtherProject<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This is a destructive operation because <code>-d<\/code> is used. Validate archive recoverability before using this mode.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">List and test an archive before restore<\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">SSRESTOR -la -yadmin,password archive.ssa $\/\nSSRESTOR -t -yadmin,password archive.ssa<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The first command lists archive contents; the second tests the archive file without restoring data.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Restore to another project path or database context<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\">SSRESTOR <span class=\"hljs-string\">\"-p$\/Test 2\"<\/span> -sD:\\newfolder\\ -yadmin,password backup.ssa $\/Test<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Restores <code>$\/Test<\/code> from <code>backup.ssa<\/code> into <code>$\/Test 2<\/code> using an alternate SourceSafe configuration path.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Automation example for scheduled backups<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The following Windows batch example runs SSARC in non-interactive, non-destructive mode and generates a dated archive filename.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-bash\"><span class=\"hljs-keyword\">@echo<\/span> off\nset SSARC_EXE=<span class=\"hljs-attribute\">C:<\/span>\\Program Files\\Microsoft Visual Studio\\Common\\VSS\\win32\\ssarc.exe\nset ARCHIVE_DIR=<span class=\"hljs-attribute\">C:<\/span>\\Backups\nset VSS_USER=admin\nset VSS_PASS=password\n\nfor \/f %%i in (<span class=\"hljs-string\">'powershell -NoProfile -Command \"Get-Date -Format yyyyMMdd\"'<\/span>) do set DATESTAMP=%%i\n\n<span class=\"hljs-string\">\"%SSARC_EXE%\"<\/span> -i- -d- -y%VSS_USER%,%VSS_PASS% <span class=\"hljs-string\">\"%ARCHIVE_DIR%\\ARCHIVE-%DATESTAMP%.ssa\"<\/span> $\/<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Best practices for legacy VSS maintenance<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Default to <code>-D-<\/code> for routine backups; use <code>-D<\/code> only with explicit cleanup intent.<\/li><li>Validate archives before recovery with <code>SSRESTOR -L\/-LA<\/code> and <code>SSRESTOR -T<\/code>.<\/li><li>If you see &quot;Only ADMIN can run this utility,&quot; verify admin credentials and <code>-Y&lt;user&gt;,&lt;pwd&gt;<\/code> formatting.<\/li><li>Quote options that include spaces, for example <code>&quot;-p$\/Project A&quot;<\/code> or <code>&quot;-vlProduction Release&quot;<\/code>.<\/li><li>The source states a 2 GB archive\/restore limit; split very large trees into subprojects if needed.<\/li><li>Keep archive files off-host and retain logs for audit and rollback.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>A practical guide to archiving and restoring Visual SourceSafe projects with SSARC and SSRESTOR. Learn safe workflows, key options, and command examples for legacy VSS maintenance.<\/p>\n","protected":false},"author":1,"featured_media":4067,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[3238,1122,3113,919,593,938,3239,3230,3240,3232,3231,3241,3233,213,1302,3237,368,3236,1452,3234,3235],"class_list":["post-150","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorised","tag-archive-vss-project","tag-guide","tag-how-to","tag-instructions","tag-process","tag-reference","tag-restore-vss-project","tag-ssarc","tag-ssarc-tutorial","tag-ssarc-utility","tag-ssrestor","tag-ssrestor-tutorial","tag-ssrestor-utility","tag-tutorial","tag-utility","tag-visual-source-safe","tag-vss","tag-vss-project","tag-ways","tag-what-is-ssarc-utility","tag-what-is-ssrestor-utility"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/150","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=150"}],"version-history":[{"count":5,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/150\/revisions"}],"predecessor-version":[{"id":78998,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/150\/revisions\/78998"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/4067"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}