http://try-as400.pocnet.net/index.php?title=Duplicating_your_data,_or_how_to_backup&feed=atom&action=history
Duplicating your data, or how to backup - Revision history
2024-03-29T07:05:36Z
Revision history for this page on the wiki
MediaWiki 1.35.11
http://try-as400.pocnet.net/index.php?title=Duplicating_your_data,_or_how_to_backup&diff=972&oldid=prev
PoC: /* Daily backup to an ISO image */ Less wrapping
2021-08-18T19:53:04Z
<p><span dir="auto"><span class="autocomment">Daily backup to an ISO image: </span> Less wrapping</span></p>
<table class="diff diff-contentalign-left diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 19:53, 18 August 2021</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l31" >Line 31:</td>
<td colspan="2" class="diff-lineno">Line 31:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> </div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> /* Create Image Catalog and Image */</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> /* Create Image Catalog and Image */</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> CRTIMGCLG IMGCLG(BACKUPS) DIR('/backups') CRTDIR(*YES) <del class="diffchange diffchange-inline">+</del></div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> CRTIMGCLG IMGCLG(BACKUPS) DIR('/backups') CRTDIR(*YES) ADDVRTVOL(1) IMGSIZ(10240)</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"> </del>ADDVRTVOL(1) IMGSIZ(10240)</div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> LODIMGCLG IMGCLG(BACKUPS) OPTION(*LOAD) DEV(OPTVRT01) WRTPTC(*NONE)</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> LODIMGCLG IMGCLG(BACKUPS) OPTION(*LOAD) DEV(OPTVRT01) <del class="diffchange diffchange-inline">+</del></div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> LODIMGCLGE IMGCLG(BACKUPS) IMGCLGIDX(*FIRST) OPTION(*MOUNT)</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"> </del>WRTPTC(*NONE)</div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> LODIMGCLGE IMGCLG(BACKUPS) IMGCLGIDX(*FIRST) <del class="diffchange diffchange-inline">+</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"> </del>OPTION(*MOUNT)</div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> </div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> /* Initialize with current date */</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> /* Initialize with current date */</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> RTVSYSVAL SYSVAL(QDATE) RTNVAR(&SYSDAT)</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> RTVSYSVAL SYSVAL(QDATE) RTNVAR(&SYSDAT)</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> CVTDAT DATE(&SYSDAT) TOVAR(&OPTDAT) TOFMT(*YMD) <del class="diffchange diffchange-inline">+</del></div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> CVTDAT DATE(&SYSDAT) TOVAR(&OPTDAT) TOFMT(*YMD) TOSEP(*NONE)</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"> </del>TOSEP(*NONE)</div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> </div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> INZOPT DEV(&OPTDRV) NEWVOL(&OPTDAT) MEDFMT(*UDF)</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> INZOPT DEV(&OPTDRV) NEWVOL(&OPTDAT) MEDFMT(*UDF)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> </div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> /* Actually save */</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> /* Actually save */</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> SAVCHGOBJ OBJ(*ALL) LIB(*ALLUSR) DEV(&OPTDRV) <del class="diffchange diffchange-inline">+</del></div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> SAVCHGOBJ OBJ(*ALL) LIB(*ALLUSR) DEV(&OPTDRV) VOL(&OPTDAT) ENDOPT(*UNLOAD) +</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"> </del>VOL(&OPTDAT) ENDOPT(*UNLOAD) +</div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> SAVACT(*SYSDFN) SAVACTWAIT(10) DTACPR(*LOW) OMITLIB(SAVRST) OUTPUT(*PRINT)</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> SAVACT(*SYSDFN) SAVACTWAIT(10) <del class="diffchange diffchange-inline">+</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"> </del>DTACPR(*LOW) OMITLIB(SAVRST) OUTPUT(*PRINT)</div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> MONMSG MSGID(CPF3778)</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> MONMSG MSGID(CPF3778)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> MONMSG MSGID(CPF9845)</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> MONMSG MSGID(CPF9845)</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l70" >Line 70:</td>
<td colspan="2" class="diff-lineno">Line 64:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> </div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> SENDMSG:</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> SENDMSG:</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> SNDMSG MSG('Error happened. Bailing out.') <del class="diffchange diffchange-inline">+</del></div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> SNDMSG MSG('Error happened. Bailing out.') TOUSR(QSYSOPR)</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"> </del>TOUSR(QSYSOPR)</div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> </div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> END:</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> END:</div></td></tr>
</table>
PoC
http://try-as400.pocnet.net/index.php?title=Duplicating_your_data,_or_how_to_backup&diff=971&oldid=prev
PoC: New
2021-08-18T19:50:24Z
<p>New</p>
<p><b>New page</b></p><div>{{FIXME|Make complete.}}<br />
As with any other computer system, things can go wrong and valuable data might be unrecoverable. So it's proven best practice to '''duplicate your data''' in a way that survives all the wrongness which can happen.<br />
<br />
== Basics ==<br />
No matter which platform, it's important to keep one thing in mind:<br />
:'''You're not doing backups to (only) sleep well. You're doing backups for the sake of a speedy and stressless recovery to the latest point in time, aka the last backup!'''<br />
<br />
The last thing you wanna deal with after something bad happened is to bootstrap yourself out of nothingness into a complicated, error prone, and slow process of copying backups from here to there until you finally can restore the data from there.<br />
<br />
Also, don't forget that installing and patching an OS is also a very time consuming process. Thus, the best backup you can have according to the quote above includes the operating system.<br />
<br />
== How? ==<br />
A proven way to be on the safe side is to do<br />
* periodical full backups, maybe each week, each month or before doing grave changes to the system configuration<br />
* daily backups of data having changed since the last full backup<br />
<br />
Full backups, or a ''Save 21'' requires the system to be in a restricted state. This permits the backup to contain a consistent set of data for a given point in time, because nothing is changed while the backup runs. What's more, restricted state closes (most) files, so the backup program does not fail to access files being ''in use''.<br />
<br />
OS/400 has everything one needs to save, and restore.<br />
<br />
== Scripts ==<br />
Daily backups should be automated and tailored to individual needs. This can be done with CL programs. CL is akin to shell scripts or batch files in other OS's, but they're compiled.<br />
<br />
=== Daily backup to an ISO image ===<br />
This example is in daily use with a machine in a DC. Since there's nobody to change tapes in a daily manner, incremental saves go to ISO images. These are copied to an FTP server (and compressed there by a locally run cronjob).<br />
<br />
PGM<br />
DCL VAR(&OPTDRV) TYPE(*CHAR) LEN(8) VALUE(OPTVRT01)<br />
DCL VAR(&SYSDAT) TYPE(*CHAR) LEN(6)<br />
DCL VAR(&OPTDAT) TYPE(*CHAR) LEN(10)<br />
<br />
/* Create Image Catalog and Image */<br />
CRTIMGCLG IMGCLG(BACKUPS) DIR('/backups') CRTDIR(*YES) +<br />
ADDVRTVOL(1) IMGSIZ(10240)<br />
LODIMGCLG IMGCLG(BACKUPS) OPTION(*LOAD) DEV(OPTVRT01) +<br />
WRTPTC(*NONE)<br />
LODIMGCLGE IMGCLG(BACKUPS) IMGCLGIDX(*FIRST) +<br />
OPTION(*MOUNT)<br />
<br />
/* Initialize with current date */<br />
RTVSYSVAL SYSVAL(QDATE) RTNVAR(&SYSDAT)<br />
CVTDAT DATE(&SYSDAT) TOVAR(&OPTDAT) TOFMT(*YMD) +<br />
TOSEP(*NONE)<br />
<br />
INZOPT DEV(&OPTDRV) NEWVOL(&OPTDAT) MEDFMT(*UDF)<br />
<br />
/* Actually save */<br />
SAVCHGOBJ OBJ(*ALL) LIB(*ALLUSR) DEV(&OPTDRV) +<br />
VOL(&OPTDAT) ENDOPT(*UNLOAD) +<br />
SAVACT(*SYSDFN) SAVACTWAIT(10) +<br />
DTACPR(*LOW) OMITLIB(SAVRST) OUTPUT(*PRINT)<br />
MONMSG MSGID(CPF3778)<br />
MONMSG MSGID(CPF9845)<br />
MONMSG MSGID(CPF3794) EXEC(GOTO CMDLBL(SENDMSG))<br />
<br />
/* Close Image file properly */<br />
LODIMGCLG IMGCLG(BACKUPS) OPTION(*UNLOAD) DEV(OPTVRT01)<br />
<br />
/* Upload to server */<br />
OVRDBF FILE(INPUT) TOFILE(QUSRSYS/FTP$BKUP)<br />
OVRDBF FILE(OUTPUT) TOFILE(QUSRSYS/FTP$LOG)<br />
FTP RMTSYS(SRVBACKUPSTORAGE)<br />
DLTOVR FILE(INPUT)<br />
DLTOVR FILE(OUTPUT)<br />
<br />
/* Cleanup Image catalog */<br />
DLTIMGCLG IMGCLG(BACKUPS) KEEP(*NO)<br />
<br />
GOTO CMDLBL(END)<br />
<br />
SENDMSG:<br />
SNDMSG MSG('Error happened. Bailing out.') +<br />
TOUSR(QSYSOPR)<br />
<br />
END:<br />
<br />
ENDPGM<br />
<br />
/* vim: syntax=clp colorcolumn=81 autoindent */<br />
<br />
The above save mechanism does not care about IFS objects, nor does it save document library objects. These two separate saves are spared, because in this case, the IFS and DLO isn't really used. It's completely sufficient to save them each month with a ''save 21''.<br />
<br />
As you can see, to automate the FTP process, OVERDBF is called for backups and logs. The content of ''QUSRSYS/FTP$BKUP'' is as follows:<br />
''username password''<br />
bin <br />
namefmt 1 <br />
mput /backups/* <br />
quit <br />
;username<br />
:The user for the remote FTP server<br />
;password<br />
:The user for the remote FTP server<br />
<br />
== See also ==<br />
* [[Tape Drives on old AS/400]]<br />
<br />
[[Category: System Administration]]</div>
PoC