{"id":377,"date":"2026-10-14T00:50:59","date_gmt":"2026-10-14T00:50:59","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2014\/09\/24\/step-by-step-instruction-to-upgrade-perforce-to-2014\/"},"modified":"2026-10-14T00:50:59","modified_gmt":"2026-10-14T00:50:59","slug":"step-by-step-instruction-to-upgrade-perforce-to-2014","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/step-by-step-instruction-to-upgrade-perforce-to-2014\/","title":{"rendered":"Perforce 2014 Server Upgrade Runbook: Verify, Checkpoint, Restore, and Validate"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This runbook is for administrators upgrading a self-managed Perforce server to the 2014 generation of binaries. It focuses on the exact operational flow from the original guidance: verify first, checkpoint and back up, install the newer binary, replay the checkpoint, then validate again.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Originally published on 2014-09-24; fully revised and updated.<\/em><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2014\/09\/instruction-to-upgrade-perf.png\" alt=\"perforce-2014-upgrade-instructions\"\/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">What this upgrade procedure covers<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The source procedure emphasizes upgrading by taking an existing checkpoint and replaying it with the newer P4 Server binary (notably relevant when database structures changed in the 2013.3+ era). It also includes validation before and after the upgrade and cautions about platform or architecture changes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Upgrade workflow at a glance<\/h2>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Check license and release notes] --> B[Run pre upgrade verify]\n    B --> C{Any BAD or MISSING}\n    C -- yes --> D[Stop and contact support]\n    C -- no --> E[Stop server and take checkpoint]\n    E --> F[Backup db files and archives]\n    F --> G[Install new p4d binary]\n    G --> H[Replay checkpoint with new binary]\n    H --> I[Run schema update command if needed]\n    I --> J[Start server]\n    J --> K[Run post upgrade verify]\n    K --> L[Take fresh checkpoint]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Pre-upgrade validation commands<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run these checks before stopping the server:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\">p4 license -o\np4 verify -q <span class=\"hljs-comment\">\/\/... &gt; verify.txt<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><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\">From the original guidance: if <strong>verify.txt<\/strong> contains <strong>BAD!<\/strong> or <strong>MISSING!<\/strong>, contact Perforce Support before upgrading.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the depot is large and verify fails with a memory-size request error, split verification by depot path:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\">p4 verify -q <span class=\"hljs-comment\">\/\/depot\/project1\/... &gt; prj1-verify.txt<\/span>\np4 verify -q <span class=\"hljs-comment\">\/\/depot\/project2\/... &gt; prj2-verify.txt<\/span>\np4 verify -q <span class=\"hljs-comment\">\/\/depot\/project3\/... &gt; prj3-verify.txt<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><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<h2 class=\"wp-block-heading\">Shutdown, backup, and binary preparation<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Stop the Perforce server.<\/li><li>Create a checkpoint.<\/li><li>Copy <strong>db.*<\/strong> files to a safe location.<\/li><li>Back up archive files.<\/li><li>Read release notes and download the target server binary.<\/li><li>Confirm downloaded binary version.<\/li><\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-bash\"><span class=\"hljs-selector-tag\">p4<\/span> <span class=\"hljs-selector-tag\">admin<\/span> <span class=\"hljs-selector-tag\">stop<\/span>\n<span class=\"hljs-selector-tag\">p4d<\/span> <span class=\"hljs-selector-tag\">-r<\/span> <span class=\"hljs-selector-tag\">P4ROOT<\/span> <span class=\"hljs-selector-tag\">-J<\/span> <span class=\"hljs-selector-tag\">journal<\/span> <span class=\"hljs-selector-tag\">-jc<\/span>\n<span class=\"hljs-selector-tag\">p4d<\/span><span class=\"hljs-selector-class\">.exe<\/span> <span class=\"hljs-selector-tag\">-V<\/span>\n<span class=\"hljs-selector-tag\">p4s<\/span><span class=\"hljs-selector-class\">.exe<\/span> <span class=\"hljs-selector-tag\">-V<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><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\">Original links referenced for this stage: <a href=\"http:\/\/www.perforce.com\/perforce\/doc.current\/user\/relnotes.txt\">release notes<\/a> and <a href=\"ftp:\/\/ftp.perforce.com\/perforce\/\">Perforce FTP download location<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Restore on the new binary and validate post-upgrade<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After installing the upgraded server binary, replay the checkpoint from the old server. If the checkpoint is compressed, include <strong>-z<\/strong>. For larger servers (as noted in the original), run the additional update command when applicable.<\/p>\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\">p4d -r root -jr checkpoint.xxx\np4d -r P4ROOT -jr -z checkpoint.ckp<span class=\"hljs-number\">.104<\/span>.gz\np4d -r root -xu\np4 verify -q <span class=\"hljs-comment\">\/\/... &gt; upgrade-verify.txt<\/span>\np4d -r root -J journal -jc<\/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\">Then start the Perforce service using your normal service-management method for your OS.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Upgrade path comparison<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Scenario<\/th><th>Typical approach<\/th><th>Key caution from original guidance<\/th><\/tr><\/thead><tbody><tr><td>In-place upgrade on same host<\/td><td>Stop server, checkpoint, install new binary, replay checkpoint, verify<\/td><td>Do not skip pre\/post verify steps<\/td><\/tr><tr><td>Move to new 64-bit hardware<\/td><td>Migrate via checkpoint and restore on new host<\/td><td>Do not run 64-bit binary directly against 32-bit db.* files<\/td><\/tr><tr><td>Cross-platform migration (Linux\/Windows)<\/td><td>Treat as a separate migration project, not a simple binary swap<\/td><td>Original note says this is not trivial and may require conflict consolidation tooling<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Reference links from the original guidance<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"http:\/\/answers.perforce.com\/articles\/KB_Article\/Upgrading-to-2013-3-and-beyond\">Upgrading to 2013.3 and beyond<\/a><\/li><li><a href=\"http:\/\/answers.perforce.com\/articles\/KB_Article\/Upgrading-a-Perforce-Server\">Upgrading a Perforce Server<\/a><\/li><li><a href=\"http:\/\/answers.perforce.com\/articles\/KB_Article\/Moving-a-Perforce-Server\">Moving a Perforce Server<\/a><\/li><li><a href=\"http:\/\/answers.perforce.com\/articles\/KB_Article\/Cross-Platform-Perforce-Server-Migration\/?q=linux+to+windows&amp;l=en_US&amp;fs=Search&amp;pn=1\">Cross-Server Platform Migration (search URL)<\/a><\/li><li><a href=\"http:\/\/answers.perforce.com\/articles\/KB_Article\/Cross-Platform-Perforce-Server-Migration\">Cross-Server Platform Migration<\/a><\/li><li><a href=\"http:\/\/answers.perforce.com\/articles\/KB_Article\/Upgrading-the-Perforce-Proxy\">Upgrading the Perforce Proxy<\/a><\/li><li><a href=\"http:\/\/answers.perforce.com\/articles\/KB_Article\/BTree-Format-Changed\">BTree Format Changed for Perforce Server Versions 2013.3 and Later<\/a><\/li><li><a href=\"http:\/\/answers.perforce.com\/articles\/KB_Article\/Lockless-Reads-2013-3-and-Later\">Lockless Reads<\/a><\/li><li><a href=\"http:\/\/www.perforce.com\/support-services\/change-server-request\">Change Server Request<\/a><\/li><li><a href=\"http:\/\/www.perforce.com\/support-services\/request-background-user\">Request Background User<\/a><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Original upgrade notes included support guidance attributed to Chris Lesemann (Perforce Support).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Common pitfalls<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Proceeding when pre-upgrade verify already reports BAD or MISSING revisions.<\/li><li>Skipping offline backups of both metadata (db.*) and archive files.<\/li><li>Replaying a compressed checkpoint without the <strong>-z<\/strong> switch.<\/li><li>Mixing 32-bit and 64-bit database\/binary assumptions during migration.<\/li><li>Forgetting the final post-upgrade checkpoint after successful validation.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This guide converts the original Perforce 2014 upgrade notes into a practical runbook for production admins. It covers pre-checks, checkpoint-based recovery, post-upgrade verification, and migration cautions.<\/p>\n","protected":false},"author":1,"featured_media":3537,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[370],"tags":[1808,1122,545,1806,373,1809,1812,1811,1815,1813,1814,593,732,213,284,1807,1810,1452],"class_list":["post-377","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-perforce","tag-1808","tag-guide","tag-how","tag-instruction","tag-perforce","tag-perforce-2014","tag-perforce-sever","tag-perforce-update","tag-perforce-upgrade-guide","tag-perforce-upgrade-instructions","tag-perforce-upgrade-tutorial","tag-process","tag-steps","tag-tutorial","tag-update","tag-upgrad","tag-upgrade-perforce","tag-ways"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/377","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=377"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/377\/revisions"}],"predecessor-version":[{"id":79257,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/377\/revisions\/79257"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/3537"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=377"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=377"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}