{"id":21855,"date":"2023-01-28T12:52:40","date_gmt":"2023-01-28T11:52:40","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=21855"},"modified":"2025-10-24T09:38:31","modified_gmt":"2025-10-24T07:38:31","slug":"a-quick-repository-creation-utility-part-v","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/","title":{"rendered":"A quick repository creation utility (part V)"},"content":{"rendered":"\n<p>This is part V of the article, see Part I <a href=\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-i\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>, Part II <a href=\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-ii\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>, Part III <a href=\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-iii\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a> and Part IV <a href=\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-iv\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Timings<\/h3>\n\n\n\n<p>As said before, absolute timings vary a lot because they depends on many factors, starting with the hardware in use. Thus, the given values are just examples of what can be achieved in a simple setup such as a laptop, and they are nonetheless quite impressive. The relevant information here is to compare the creation times with the instantiation times when 1, 2, \u2026 5 and 10 docbases are created at the same time.<\/p>\n\n\n\n<p>It is well understood that Oracle\u2019s slower timings are not caused by Oracle itself but by the more complex procedure to duplicate the docbase\u2019s schema, vs. nothing to duplicate in PostgreSQL since the database gets included with the content server and customized in place. Maybe, similar results as PostgreSQL could be obtained with a local Oracle Express Edition RDBMS, to be tried sometime if the stingy 2 Gb RAM and 12 Gb data limits are acceptable (note that Oracle XE is likely not certified for Documentum, likely because of its limits), although there is no way in Oracle to rename a schema barring exporting\/importing it, which we already do here except mostly remotely.<\/p>\n\n\n\n<p>The fastest test bed we had access to was composed of:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Hardware: DELL XPS15 2019, i9 9980HK 8 cores, 2TB SSD, 64GB RAM<\/li>\n\n\n\n<li>Virtualization: Proxmox Virtual Environment 7.2-3<\/li>\n<\/ul>\n\n\n\n<p>The following 2 linux container hosts were created:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>oracle-8, 4 cores, 10 GiB RAM, Oracle Linux Server 8.6 and Oracle RDBMS v21.3.0.0.0<\/li>\n\n\n\n<li>cs2, 8 cores, 20 GiB RAM, Ubuntu 20.04.5 LTS for the Content Server v22.4<\/li>\n<\/ul>\n\n\n\n<p>In both machines, the amount of memory was large enough to prevent the 1 GiB large swap to be used with the ensuing dramatic slowness.<\/p>\n\n\n\n<p>The table below gives the average and average maximum times to first create a seed repository and then instantiate 1 to 5 + 10 concurrent times per repository. Averages were based on 3 to 5 executions, depending on the variability of the timings (the more variable timings, the more executions were performed).<\/p>\n\n\n\n<p>As an example, the values in bold means we instantiated 10 docbases with Oracle RDBMS as the database and it took on average 14m43s per docbase, whereas the longest time was 15m7s in average. We can therefore tell that in average it took 15m7s to create that set of 10 docbases on the same machine. Had we created them the normal and sequential way, it would have taken on average 10 * 21m20s, i.e. almost 3.5 hours or 14 times more. That\u2019s a lot of long coffee breaks.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-regular\"><table><tbody><tr><td><strong>RDBMS<\/strong><\/td><td><strong>creation<sup>1<\/sup><\/strong><\/td><td><strong>1 concurrent<sup>2 <\/sup>instantiation<\/strong><\/td><td><strong>2 concurrent<sup>2<\/sup> instantiations<\/strong><\/td><td><strong>3 concurrent<sup>2<\/sup> instantiations<\/strong><\/td><td><strong>4 concurrent<sup>2,3<\/sup>  instantiations<\/strong><\/td><td><strong>5 concurrent<sup>2,3<\/sup> instantiations<\/strong><\/td><td><strong>10 concurrent<sup>2,3<\/sup> instantiations<\/strong><\/td><\/tr><tr><td>Oracle<br>max<\/td><td>21m20s 21m56s<\/td><td>3m7s<br>3m17s<\/td><td>4m25s 4m29s<\/td><td>4m38s 4m42s<\/td><td>5m59s<br>6m5s<\/td><td><strong>7m13s <br>7m31s<\/strong><\/td><td><strong>14m43s<\/strong><br><strong>15m7s<\/strong><br><\/td><\/tr><tr><td>PostgreSQL max<\/td><td>18m22s 18m25s<\/td><td>0m57s<br>1m<\/td><td>1m4s<br>1m5s<\/td><td>1m11s<br>1m16s<\/td><td>1m18s<br>1m26s<\/td><td><strong>1m30s<br>1m40s<\/strong><\/td><td><strong>2m49s<\/strong><br><strong>3m11s<\/strong><\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">timings for docbases&#8217; creation and instantiation<\/figcaption><\/figure>\n\n\n\n<p>When creating a single docbase by instantiating it, it took in average 3m7s. The concurrency placed a toll on the performances, but of course this could be alleviated somewhat by adding more resources to the containers.<\/p>\n\n\n\n<p>With PostgreSQL RDBMS as the database, the gain is even better: it took as little as 57s to instantiate one single docbase on average, and 2m49s per docbase to create 10 docbases on the same machine, and overall 3m11s until the last one was ready. Had we created them the normal and sequential way, it would have taken 10 * 18m22s, i.e. almost 3 hours or more than 60 times more ! The instantiation procedure is between 3 and 5 times faster with PostgreSQL than with Oracle but both are so fast that it does not make any practical difference, at least for a few docbases.<\/p>\n\n\n\n<p>As expected, measured times are quite variable so only the ratios between instantiation and creation times are really comparative. Still, at the very least, the absolute timings prove that is is possible to have excellent performance on some out of the box, run-of-the-mill hardware, such as developer\u2019s laptops.<\/p>\n\n\n\n<p><strong>Notes<\/strong><\/p>\n\n\n\n<p><sup>1<\/sup>The command was:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\n$ time .\/create_docbase.sh DCTM0 2&gt;&amp;1 | tee \/tmp\/dctm0.log\n<\/pre><\/div>\n\n\n<p>with the settings for the stem DCTM0 defined in <code>global_properties<\/code>.<\/p>\n\n\n\n<p><sup>2<\/sup>The commands for n concurrent instantiations was for instance:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\n$ for i in {1..n}; do\n   time .\/instantiate_docbase.sh DCTM0 ORA_DCTM${i} 2&gt;&amp;1 | tee \/tmp\/ORA_DCTM${i}.log &amp;\ndone\n<\/pre><\/div>\n\n\n<p>with the settings for the stems *DCTM1 to *DCTM10 defined in <code>global_properties<\/code>.<\/p>\n\n\n\n<p><sup>3<\/sup>After an increase of the number of cores from 4 to 20 and of the memory from 10 GiB to 20 GiB in oracle-8, and of the number of cores from 8 to 20 and of the memory from 20 GiB to 30 GiB in cs2. Also, make sure there is enough disk space in both oracle-8 and cs2, e.g. for 10 repositories, 50 GiB for the Oracle data files and 50 GiB for the documentum files.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Management commands<\/h3>\n\n\n\n<p>Now that creating docbases has become such an expedite and mundane task (docbases are a commodity at this point), chances are that they\u2019ll start piling up in the same machine and therefore we need a way to manage them easily. At the minimum, such functions must be able to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>switch among the installed docbases<\/li>\n\n\n\n<li>show the currently selected docbase and its instantiation parameters<\/li>\n\n\n\n<li>start\/stop\/query the status each of a docbase\u2019s component<\/li>\n\n\n\n<li>restart a docbase, a docbroker or a method server<\/li>\n\n\n\n<li>navigate to folders of interest in a docbase\u2019s directory tree<\/li>\n\n\n\n<li>view\/tail a docbase\u2019s logs if interest<\/li>\n\n\n\n<li>connect to the currently selected docbase and to its underlying database using native tools<\/li>\n\n\n\n<li>cleanly remove an instantiated docbase or all of them at once<\/li>\n<\/ul>\n\n\n\n<p>Like <code>swr()<\/code> glimpsed precedently, several functions and bash aliases have been created to fulfill the above needs.<\/p>\n\n\n\n<p>Here are they are, defined in each created or instantiated repository\u2019s environment file <code>${dctm_root}.${<em>repo<\/em>}\/${<em>repo<\/em>}.env<\/code>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; highlight: [0,1,5,7,8,10,16,18,24,26,32,35,38,41,43,52,55,58,61,65,68,71,73,78,83,85,91]; title: ; notranslate\" title=\"\">\n# function shr, for SHow Repository;\n# displays the currently selected or given repository&#039;s info;\n# Usage:\n# shr&#x5B;repository_name]\nshr()\n\n# alias whr for WHich Repository to show the currently selected repository;\nalias whr=shr\n\n# function sur, for StartUp Repository, to start a repository&#039;s all processes;\n# it depends on function swr above;\n# Usage:\n# sur &#x5B;repository_name]\n# when invoked without parameters, the currently selected repository environment is started up;\n# when invoked with a parameter, it becomes the current selected repository and its environment is started up;\nsur()\n\n# function sdr, for ShutDown Repository, to stop a repository&#039;s all processes;\n# it depends on function swr above;\n# Usage:\n# sdr &#x5B;repository_name]\n# when invoked without parameters, the currently selected repository environment is shut down;\n# when invoked with a parameter, it becomes the current selected repository and its environment is started up;\nsdr()\n\n# function str, for STatus Repository, to show the status of a repository;\n# it depends on functions swr;\n# Usage:\n# rst &#x5B;repository_name]\n# when invoked without parameters, the currently selected repository environment is queried;\n# when invoked with a parameter, it becomes the current selected repository and its environment is started up;\nrst()\n\n# bounced, for bounce Docbase, stop\/start the repository;\nalias bounced\n\n# bounceb, for bounce Broker, stop\/start the docbroker by minimizing the lost connectivity to the repository;\nalias bounceb\n\n# bouncems, for bounce Method Server;\nalias bouncems\n\n# stop &amp; start components;\nalias stopr=dm_shutdown_\\${ACTIVE_DOCBASE}\nalias startr=dm_start_\\${ACTIVE_DOCBASE}\nalias stopb=dm_stop_${ACTIVE_DOCBROKER_NAME}\nalias startb=dm_launch_${ACTIVE_DOCBROKER_NAME}\nalias stopms=\\${DM_JMS_HOME}\/bin\/stopMethodServer.sh\nalias startms=\\${DM_JMS_HOME}\/bin\/startMethodServer.sh\n\n# cd to directories of interest;\nalias croot\nalias cdroot\nalias cdctm\nalias cdba\nalias clog\n\n# view files\/logs of interest;\n# less server.ini\nalias lconf\n\n# less repository\u2019s log;\nalias llog\n\n# less tomcat\u2019s catalina.out;\nalias lcat\n\n# less the method server log;\nalias lms\n\n# tails logs of interest; also doable from within the less utility with the F command;\n# tail the repository\u2019s log;\nalias tlog\n\n# tails tomcat\u2019s catalina.out;\nalias tcat\n\n# tails the method server log;\nalias tms\n\n# interactive utilities;\n# for the repositories;\nalias iapi\nalias idql\nalias iiapi\nalias iidql\n\n# for PostgreSQL\nalias iisql\nalias ipsql\n\n# for Oracle;\nalias sqlplus\nalias isqlp\n\n# function rmr, for Remove Repository, to remove a repository by wiping off its working directory;\n# it depends on functions swr and uses sdr defined above;\n# Usage:\n# rmr &#x5B;repository_name]\n# when invoked without parameters, the currently selected repository environment is removed;\n# when invoked with a parameter, it becomes the current selected repository and is removed;\nrmr()\n<\/pre><\/div>\n\n\n<p>Several global functions are also defined in <code>~\/.profile<\/code>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; first-line: 0; gutter: false; highlight: [0,2,4,11,13,18,20,25,27,32,34,39,41,46]; title: ; notranslate\" title=\"\">\n# alias lsr for LS Repository;\n# list the existing, instanciated repositories;\nalias lsr\n\n# function swr, for SWitch Repository;\n# tool to switch between instanciated repositories on the same machine and ${dctm_root};\n# current working directory is moved to the selected repository&#039;s ${DOCUMENTUM};\n# Usage:\n# swr &#x5B;repository_name]\n# when invoked without parameters, the currently sourced repository&#039;s environment is displayed, without first refreshing it;\n#\nswr()\n\n# function sura, for Start Up Repository All;\n# start all the existing, instantiated repositories;\n# Usage:\n#    sura\n#\nsura()\n\n# function sdra, for Shut Down Repository All;\n# shut down all existing, instantiated repositories;\n# Usage:\n#    sdra\n#\nsdra()\n\n# function shra, for Show Repository All;\n# show all the existing, instantiated repositories;\n# Usage:\n#    shra\n#\nshra()\n\n# function stra, for STatus Repository All;\n# show the status of all existing, instantiated repositories;\n# Usage:\n#    stra\n#\nstra()\n\n# function rmra, for RM Repository All;\n# remove all existing, instantiated repositories;\n# Usage:\n# rmra\n#\nrmra()\n<\/pre><\/div>\n\n\n<p><code>swr() [<em>repo<\/em>]<\/code> is the first function to invoke when starting a new shell and no repository is selected yet. It will switch to the docbase <em><code>repo<\/code><\/em>. If unsure about <em><code>repo<\/code><\/em>, a list of existing instantiated repositories can be obtained through the alias <code>lsr<\/code> which simply list the directories in<code> ${dctm_root}<\/code>, e.g.:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; highlight: [1,13,61]; title: ; notranslate\" title=\"\">\n$ lsr\nrepo02\nrepo03\nrepo04\nrepo05\nrepo06\nrepo07\nrepo08\nrepo09\nrepo10\nrepo12\n\n$ swr repo12\nSwitching to repository repo12 ...\nACTIVE_DOCBASE=repo12\nACTIVE_ROOT=\/u01\/dctm\/repo12\nCLASSPATH=\/u01\/dctm\/repo12\/documentum\/product\/22.4\/dctm-server.jar:\/u01\/dctm\/repo12\/documentum\/dctm.jar:\/u01\/dctm\/repo12\/documentum\/dfc\/bcprov-jdk15on.jar:\/u01\/dctm\/repo12\/documentum\/config:\/u01\/dctm\/repo12\/documentum\/product\/22.4\/bin:\nDM_HOME=\/u01\/dctm\/repo12\/documentum\/product\/22.4\nDM_JMS_HOME=\/u01\/dctm\/repo12\/documentum\/tomcat9.0.65\nDOCUMENTUM=\/u01\/dctm\/repo12\/documentum\nDOCUMENTUM_SHARED=\/u01\/dctm\/repo12\/documentum\nJAVA_HOME=\/u01\/dctm\/repo12\/documentum\/java64\/JAVA_LINK\nLD_LIBRARY_PATH=\/u01\/dctm\/repo12\/documentum\/product\/22.4\/bin:\/u01\/dctm\/repo12\/documentum\/dfc:\/u01\/dctm\/repo12\/documentum\/fulltext\/dsearch:\/u01\/dctm\/repo12\/postgresql\/lib:\nPATH=\/u01\/dctm\/repo12\/documentum\/java64\/JAVA_LINK\/bin:\/u01\/dctm\/repo12\/documentum\/product\/22.4\/bin:\/u01\/dctm\/repo12\/documentum\/dba:\/u01\/dctm\/repo12\/postgresql\/bin:\/u01\/dctm\/repo12\/documentum\/tomcat9.0.65\/bin:\/u01\/dctm\/repo12\/java\/amazon-corretto-11.0.17.8.1-linux-x64\/bin:\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin\nPOSTGRESQL_HOME=\/u01\/dctm\/repo12\/postgresql\nPS1=\\&#x5B;\\033&#x5B;0;32m\\]\\u@\\h:\\&#x5B;\\033&#x5B;36m\\]&#x5B;\\w]&#x5B;repo12]\\&#x5B;\\033&#x5B;0m\\] $ \ndfcpath=\/u01\/dctm\/repo12\/documentum\/dfc\nRepository repo12&#039;s environment is:\nActive docbase name is                  : repo12\nActive docbase id is                    : 100013\nActive docbase service name is          : repo12\nActive docbase service port is          : 50120\nActive docbase host is                  : cs2\nActive docbase version                  : 22.4.0000.0120\nActive docbase root directory is        : \/u01\/dctm\/repo12\nActive installer owner is               : dmadmin\nActive installer password is            : dmadmin\nActive docbase docbroker name           : docbroker010\nActive docbase docbroker port           : 1511\nActive docbase http server base port    : 9800\nActive docbase http server memory       : &quot;-Xms512m -Xmx1024m&quot;\nJAVA_HOME                               : \/u01\/dctm\/repo12\/documentum\/java64\/JAVA_LINK\nJAVA_VERSION                            :\nopenjdk version &quot;11.0.17&quot; 2022-10-18 LTS\nOpenJDK Runtime Environment Corretto-11.0.17.8.1 (build 11.0.17+8-LTS)\nOpenJDK 64-Bit Server VM Corretto-11.0.17.8.1 (build 11.0.17+8-LTS, mixed mode)\ndctm_root                               : \/u01\/dctm\nScripts&#039;dir is                          : \/mnt\/shared\/blog-seed-docbase\nCLASSPATH                               : \/u01\/dctm\/repo12\/documentum\/product\/22.4\/dctm-server.jar:\/u01\/dctm\/repo12\/documentum\/dctm.jar:\/u01\/dctm\/repo12\/documentum\/dfc\/bcprov-jdk15on.jar:\/u01\/dctm\/repo12\/documentum\/config:\/u01\/dctm\/repo12\/documentum\/product\/22.4\/bin:\nDM_HOME                                 : \/u01\/dctm\/repo12\/documentum\/product\/22.4\nDOCUMENTUM                              : \/u01\/dctm\/repo12\/documentum\nDM_JMS_HOME                             : \/u01\/dctm\/repo12\/documentum\/tomcat9.0.65\nPATH                                    : \/u01\/dctm\/repo12\/documentum\/java64\/JAVA_LINK\/bin:\/u01\/dctm\/repo12\/documentum\/product\/22.4\/bin:\/u01\/dctm\/repo12\/documentum\/dba:\/u01\/dctm\/repo12\/postgresql\/bin:\/u01\/dctm\/repo12\/documentum\/tomcat9.0.65\/bin:\/u01\/dctm\/repo12\/java\/amazon-corretto-11.0.17.8.1-linux-x64\/bin:\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin\nLD_LIBRARY_PATH                         : \/u01\/dctm\/repo12\/documentum\/product\/22.4\/bin:\/u01\/dctm\/repo12\/documentum\/dfc:\/u01\/dctm\/repo12\/documentum\/fulltext\/dsearch:\/u01\/dctm\/repo12\/postgresql\/lib:\nActive database owner is                : repo12\nActive database password                : repo12\nActive database connection string       : repo12\nActive database server port             : 5422\nDATABASE_TYPE                           : Postgresql\n\ndmadmin@cs2:&#x5B;\/u01\/dctm\/repo12]&#x5B;repo12] $ \n\n<\/pre><\/div>\n\n\n<p>It may help to compare functions defined in <code>~\/.profile<\/code> with static methods in OO programming, whereas functions and aliases defined in <code>${dctm_root}.${<em>repo<\/em>}\/${<em>repo<\/em>}.env<\/code> are similar to instance methods: the former apply to any repository and the latter to the current one, unless a different one is explictly specified. Note that if one of <code>~\/.bash_profile<\/code> or <code>~\/.bash_login<\/code> is present, <code>~\/.profile<\/code> is ignored; Ubuntu tends to use <code>~\/.profile<\/code> whereas Red Hat derivatives use <code>~\/.bash_profile<\/code>, so adapt this as needed in your linux variant.<\/p>\n\n\n\n<p>The repository-related functions takes optional docbase names, not stems, because the latter don\u2019t apply to existing docbases and are exclusively used in the <code>create_docbase.sh<\/code> and <code>instantiate_docbase.sh<\/code> scripts.<\/p>\n\n\n\n<p>These functions are mostly useful when several repositories have been instantiated on the same machine and one needs to switch quickly among them (see <code>~\/.profile\u2019s<\/code> <code>swr()<\/code> above) to perform certain tasks such as show the current one (<code>shr()<\/code>), start it up (<code>sur()<\/code>), shut it down (<code>sdr()<\/code>), check the status of its services (<code>str()<\/code> with colorization), restart services (<code>bounced()<\/code>, <code>bounceb()<\/code> and <code>bouncems()<\/code>), check the logs and configuration (<code>lconf<\/code>, <code>[lt]log<\/code>, <code>[lt]cat<\/code>, <code>[lt]ms<\/code>), navigate directories of interest (<code>croot<\/code>, <code>cdroot<\/code>, <code>cdctm<\/code>, <code>cdba<\/code>, <code>clog<\/code>), launch utilities (<code>iiapi<\/code>, <code>iidql<\/code>, <code>iisql<\/code>, <code>ipsql<\/code>, <code>isqlp<\/code>), or wipe it off altogether (<code>rmr()<\/code>). In effect, removing an instantiated repository should not be any more complicated than instantiating a new one. <code>rmr()<\/code> also takes care of the Oracle schema if one is used; to do so, it first transfers the script <code>rm_user.sh<\/code> to the Oracle host and then invokes it. This script removes the database user <code>${ACTIVE_DATABASE_OWNER}<\/code>, and drops its tablespaces and datafiles in a safely manner, or so. For PostgreSQL, no such script is needed since the embedded database is removed when the <code>${ACTIVE_ROOT}<\/code> directory tree is deleted. Moreover, the command-line utilities <code>iapi<\/code>, <code>idql<\/code>, <code>sqlplus<\/code>, <code>isql<\/code> and <code>psql<\/code> have been aliased to use the great <code>rlwrap<\/code> tool; refer to the article <a href=\"https:\/\/www.dbi-services.com\/blog\/enhancing-idql-iapi-with-rlwrap-part-i\/\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a> for more details.<\/p>\n\n\n\n<p>The alias <code>bounceb<\/code> that stops\/starts a docbroker is quite clever and deserves some explanation. When a docbroker is stopped, the docbase that targets it becomes unreachable and stays so until its next projection period, even up to several seconds after the docbroker is back on-line. In order to minimize that unavailability delay, an <code>iapi<\/code> session is first started while listening to a temporary named pipe, connects to the docbase and is sent to the background; then, the docbroker is restarted, a <code>reinit<\/code> command is written into the pipe and gets processed by <code>iapi<\/code> so the docbase projects immediately to the freshly started docbroker. Finally, the <code>quit<\/code> command is sent to <code>iapi<\/code> through the named pipe to exit the tool, and the pipe is removed. This works because <code>iapi<\/code> keeps its connection to the docbase even when the docbroker is stopped. In effect, the docbroker is only used to allow clients to establish a session with the docbases that project onto it; once connected, they don\u2019t need it any more. In that respect, the docbroker has a function similar to an Oracle listener.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<p>While the original idea was simply to speed up the creation of docbases, some of its deliverables can be used as stand-alone utilities, e.g. the script <code>create_docbase.sh<\/code>, the management aliases and functions.<\/p>\n\n\n\n<p>Those scripts can be used as the basis or greatest common divisor of a more ambitious tool to streamline the installation and operation of Documentum software, e.g. xPlore, DA, etc., on any environment such as VMs, linux or OCI containers.<\/p>\n\n\n\n<p>However useful, the scripts\u2019 main purpose is only to give a practical example of the approach. They were written with a clear context in mind: an individual with full control of their infrastructure (e.g. a powerful enough laptop with virtualization software such as Proxmox), which is not always the case, especially with commercial software. Thus, be prepared to do some adaptations to suit different, likely more rigid contexts, and fix a few bugs at the same time too.<\/p>\n\n\n\n<p>Many enhancements are possible, e.g. use OCI containers, convert any docbase installation into a seed one, etc.; there is enough work to keep one busy during those long, freezing winter nights. Incidentally, it is not impossible that some of them will be covered in future articles, so watch this space.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to create a documentum repository in under a minute.<br \/>\nTimings, management functions and conclusion<\/p>\n","protected":false},"author":40,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[525],"tags":[129,96,77],"type_dbi":[],"class_list":["post-21855","post","type-post","status-publish","format-standard","hentry","category-enterprise-content-management","tag-documentum","tag-oracle","tag-postgresql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>A quick repository creation utility (part V) - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A quick repository creation utility (part V)\" \/>\n<meta property=\"og:description\" content=\"How to create a documentum repository in under a minute. Timings, management functions and conclusion\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-28T11:52:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-24T07:38:31+00:00\" \/>\n<meta name=\"author\" content=\"Middleware Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Middleware Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/\"},\"author\":{\"name\":\"Middleware Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\"},\"headline\":\"A quick repository creation utility (part V)\",\"datePublished\":\"2023-01-28T11:52:40+00:00\",\"dateModified\":\"2025-10-24T07:38:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/\"},\"wordCount\":1654,\"commentCount\":0,\"keywords\":[\"Documentum\",\"Oracle\",\"PostgreSQL\"],\"articleSection\":[\"Enterprise content management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/\",\"name\":\"A quick repository creation utility (part V) - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2023-01-28T11:52:40+00:00\",\"dateModified\":\"2025-10-24T07:38:31+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A quick repository creation utility (part V)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\",\"name\":\"Middleware Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"caption\":\"Middleware Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/middleware-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"A quick repository creation utility (part V) - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/","og_locale":"en_US","og_type":"article","og_title":"A quick repository creation utility (part V)","og_description":"How to create a documentum repository in under a minute. Timings, management functions and conclusion","og_url":"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/","og_site_name":"dbi Blog","article_published_time":"2023-01-28T11:52:40+00:00","article_modified_time":"2025-10-24T07:38:31+00:00","author":"Middleware Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Middleware Team","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/"},"author":{"name":"Middleware Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"headline":"A quick repository creation utility (part V)","datePublished":"2023-01-28T11:52:40+00:00","dateModified":"2025-10-24T07:38:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/"},"wordCount":1654,"commentCount":0,"keywords":["Documentum","Oracle","PostgreSQL"],"articleSection":["Enterprise content management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/","url":"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/","name":"A quick repository creation utility (part V) - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2023-01-28T11:52:40+00:00","dateModified":"2025-10-24T07:38:31+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/a-quick-repository-creation-utility-part-v\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"A quick repository creation utility (part V)"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1","name":"Middleware Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","caption":"Middleware Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/middleware-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/21855","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=21855"}],"version-history":[{"count":15,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/21855\/revisions"}],"predecessor-version":[{"id":22280,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/21855\/revisions\/22280"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=21855"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=21855"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=21855"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=21855"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}