{"id":42306,"date":"2026-01-01T15:41:00","date_gmt":"2026-01-01T14:41:00","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=42306"},"modified":"2026-01-01T10:41:51","modified_gmt":"2026-01-01T09:41:51","slug":"dctm-incorrect-r_object_id-reference-in-otds","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/","title":{"rendered":"Dctm &#8211; Incorrect r_object_id reference in OTDS"},"content":{"rendered":"\n<p>I recently faced another pretty interesting case with an incorrect <strong><em>r_object_id<\/em><\/strong> reference in OTDS. In a non-production (dev) Active Directory (Azure EntraID) that is used as source of truth for the users\/groups, it looked like there was an account which was a bit messed-up. By that, I mean that the mail address, user name and other fields from that account were actually using the values from another account, which was completely separate. That resulted in a bit of mess inside OTDS and inside the Documentum Resource used behind it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-dctm-user-not-synchronized\">Dctm user not synchronized<\/h2>\n\n\n\n<p>The main problem was that at that customer, the Documentum &#8220;<strong><em>dm_user.user_name<\/em><\/strong>&#8221; is set to a custom &#8220;<strong><em>Display Name<\/em><\/strong>&#8221; value, which isn&#8217;t the default Display Name of the AD but a custom attribute generated\/filled with some logic behind. With OTDS, you can add some logic into the Resource through JavaScript, but you often still rely on the background AD to get correct details. For that specific account (<strong><em>USERID01<\/em><\/strong> below), that custom Display Name was set to the value from another account (<strong><em>USERID02<\/em><\/strong>). Because of that, OTDS mapped the user to a certain Documentum account. Later, the messed-up account was corrected but OTDS wasn&#8217;t able to recognize that the Dctm reference that it had stored was, then, incorrect and therefore it couldn&#8217;t update the account anymore.<\/p>\n\n\n\n<p>Initially, the Application Team reached out to me because they weren&#8217;t able to see a value for the &#8220;<strong><em>dm_user.user_global_unique_id<\/em><\/strong>&#8221; field (of <strong><em>USERID01<\/em><\/strong>). That parameter, when using OTDS, is supposed to contain the &#8220;<strong><em>oTObjectGUID<\/em><\/strong>&#8221; (by default mapped to AD <strong><em>objectGUID<\/em><\/strong>). So, I quickly checked inside the Documentum Repository to see if this account was synched or not, if there were duplicate accounts or some other evident issues:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [16,20,24,25,26,32,45,46,50,51]; title: ; notranslate\" title=\"\">\n&#x5B;dmadmin@cs-0 mop]$ iapi $DOCBASE_NAME -Udmadmin -Pxxx\n\n        OpenText Documentum iapi - Interactive API interface\n        Copyright (c) 2023. OpenText Corporation\n        All rights reserved.\n        Client Library Release 23.4.0000.0180\n\nConnecting to Server using docbase REPO01\n&#x5B;DM_SESSION_I_SESSION_START]info:  &quot;Session 010f123480c63b32 started for user dmadmin.&quot;\n\nConnected to OpenText Documentum Server running Release 23.4.0000.0143  Linux64.Oracle\nSession id is s0\nAPI&gt; ?,c,select r_object_id, user_login_name, user_name from dm_user where upper(user_login_name) like &#039;%USERID01%&#039;;\nr_object_id       user_login_name        user_name\n----------------  ---------------------  -----------------------------\n110f12348000c96b  USERID01               User Display Name 01\n\n(1 row affected)\n\nAPI&gt; dump,c,110f12348000c96b\n...\nUSER ATTRIBUTES\n\n  user_name                       : User Display Name 01\n  user_os_name                    : USERID01\n  user_address                    : user01@domain.com\n  user_group_name                 :\n  user_privileges                 : 0\n  owner_def_permit                : 7\n  world_def_permit                : 3\n  group_def_permit                : 5\n  default_folder                  : \/Home\/User Display Name 01\n  user_db_name                    :\n  description                     :\n  acl_domain                      : User Display Name 01\n  acl_name                        : dm_450f12348000f652\n  user_os_domain                  :\n  home_docbase                    :\n  user_state                      : 0\n  client_capability               : 2\n  globally_managed                : F\n  user_delegation                 :\n  workflow_disabled               : F\n  alias_set_id                    : 0000000000000000\n  user_source                     : OTDS\n  user_ldap_dn                    :\n  user_xprivileges                : 32\n  failed_auth_attempt             : 0\n  user_admin                      :\n  user_global_unique_id           :\n  user_login_name                 : USERID01\n  user_login_domain               :\n  user_initials                   :\n  user_password                   : ****************\n  user_web_page                   :\n  first_failed_auth_utc_time      : nulldate\n  last_login_utc_time             : 1\/3\/2022 13:39:00\n  deactivated_utc_time            : nulldate\n  deactivated_ip_addr             :\n  restricted_folder_ids         &#x5B;]: &lt;none&gt;\n  root_log_dir                    :\n\nSYSTEM ATTRIBUTES\n\n  r_is_group                      : F\n  r_modify_date                   : 11\/6\/2025 07:12:07\n  r_has_events                    : F\n  r_object_id                     : 110f12348000c96b\n\nAPPLICATION ATTRIBUTES\n\n\nINTERNAL ATTRIBUTES\n\n  i_is_replica                    : F\n  i_vstamp                        : 13\n\nAPI&gt; exit\nBye\n&#x5B;dmadmin@cs-0 mop]$\n<\/pre><\/div>\n\n\n<p>As you can see above, the &#8220;<strong><em>user_global_unique_id<\/em><\/strong>&#8221; is empty and some other fields also confirmed that the OTDS synchronization wasn&#8217;t done \/ working. Based on the OTDS Resource configuration, there should have been a lot of changes to that account, which wasn&#8217;t the case here.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-otds-user-consolidation\">OTDS user consolidation<\/h2>\n\n\n\n<p>Therefore, I tried to trigger a consolidation on the user itself from the OTDS UI, to see what the logs were saying:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\nThread Id: 654,623      Time: 11\/18\/25, 8:53 AM Class: org.identityconnectors.framework.api.operations.UpdateApiOp      Method: update  Level: OK       Message: Enter: update(ObjectClass: __ACCOUNT__, Attribute: {Name=__UID__, Value=&#x5B;110f12348004510b]}, &#x5B;Attribute: {Name=__TENANT__, Value=&#x5B;]}, Attribute: {Name=user_os_name, Value=&#x5B;]}, Attribute: {Name=AccountDisabled, Value=&#x5B;false]}, Attribute: {Name=user_global_unique_id, Value=&#x5B;9ibc9uqrfKafp\/K1LRb0og==]}, Attribute: {Name=user_rename_unlock_locked_obj, Value=&#x5B;T]}, Attribute: {Name=client_capability, Value=&#x5B;2]}, Attribute: {Name=user_login_domain, Value=&#x5B;]}, Attribute: {Name=user_name, Value=&#x5B;User Display Name 01]}, Attribute: {Name=user_ldap_dn, Value=&#x5B;CN=USERID01,OU=Users,DC=domain,DC=com]}, Attribute: {Name=user_address, Value=&#x5B;user01@domain.com]}, Attribute: {Name=user_login_name, Value=&#x5B;USERID01]}, Attribute: {Name=user_xprivileges, Value=&#x5B;32]}, Attribute: {Name=create_default_cabinet, Value=&#x5B;F]}, Attribute: {Name=user_privileges, Value=&#x5B;0]}, Attribute: {Name=__PARTITION__, Value=&#x5B;PARTITION01]}, Attribute: {Name=__OTDS_UUID__, Value=&#x5B;7748abe9-7a51-9d43-b6c4-13ba639481b5]}, Attribute: {Name=user_type, Value=&#x5B;dm_user]}, Attribute: {Name=user_rename_enabled, Value=&#x5B;T]}, Attribute: {Name=default_folder, Value=&#x5B;\/Home\/User Display Name 01]}, Attribute: {Name=__NAME__, Value=&#x5B;User Display Name 01]}], null)\nThread Id: 654,631      Time: 11\/18\/25, 8:53 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Enter: create(ObjectClass: DIRECTIONAL_ASSOCIATION, &#x5B;Attribute: {Name=ToObjClassName, Value=&#x5B;__GROUP__]}, Attribute: {Name=FromObjClassName, Value=&#x5B;__MEMBER__]}, Attribute: {Name=From, Value=&#x5B;&#x5B;Multiple Members]]}, Attribute: {Name=To, Value=&#x5B;120f12348000051b]}, Attribute: {Name=Type, Value=&#x5B;MemberOfGroup]}], OperationOptions: {Members=&#x5B;Ljava.lang.String;@68f2554c})\nThread Id: 654,634      Time: 11\/18\/25, 8:53 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Enter: create(ObjectClass: DIRECTIONAL_ASSOCIATION, &#x5B;Attribute: {Name=ToObjClassName, Value=&#x5B;__GROUP__]}, Attribute: {Name=FromObjClassName, Value=&#x5B;__MEMBER__]}, Attribute: {Name=From, Value=&#x5B;&#x5B;Multiple Members]]}, Attribute: {Name=To, Value=&#x5B;120f12348000051e]}, Attribute: {Name=Type, Value=&#x5B;MemberOfGroup]}], OperationOptions: {Members=&#x5B;Ljava.lang.String;@6fa3934d})\nThread Id: 654,635      Time: 11\/18\/25, 8:53 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Enter: create(ObjectClass: DIRECTIONAL_ASSOCIATION, &#x5B;Attribute: {Name=ToObjClassName, Value=&#x5B;__GROUP__]}, Attribute: {Name=FromObjClassName, Value=&#x5B;__MEMBER__]}, Attribute: {Name=From, Value=&#x5B;&#x5B;Multiple Members]]}, Attribute: {Name=To, Value=&#x5B;120f123480007dd8]}, Attribute: {Name=Type, Value=&#x5B;MemberOfGroup]}], OperationOptions: {Members=&#x5B;Ljava.lang.String;@41d7fb29})\nThread Id: 654,637      Time: 11\/18\/25, 8:53 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Enter: create(ObjectClass: DIRECTIONAL_ASSOCIATION, &#x5B;Attribute: {Name=ToObjClassName, Value=&#x5B;__GROUP__]}, Attribute: {Name=FromObjClassName, Value=&#x5B;__MEMBER__]}, Attribute: {Name=From, Value=&#x5B;&#x5B;Multiple Members]]}, Attribute: {Name=To, Value=&#x5B;120f12348000451d]}, Attribute: {Name=Type, Value=&#x5B;MemberOfGroup]}], OperationOptions: {Members=&#x5B;Ljava.lang.String;@7a229867})\nThread Id: 654,638      Time: 11\/18\/25, 8:53 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Enter: create(ObjectClass: DIRECTIONAL_ASSOCIATION, &#x5B;Attribute: {Name=ToObjClassName, Value=&#x5B;__GROUP__]}, Attribute: {Name=FromObjClassName, Value=&#x5B;__MEMBER__]}, Attribute: {Name=From, Value=&#x5B;&#x5B;Multiple Members]]}, Attribute: {Name=To, Value=&#x5B;120f12348000451e]}, Attribute: {Name=Type, Value=&#x5B;MemberOfGroup]}], OperationOptions: {Members=&#x5B;Ljava.lang.String;@4e95620c})\nThread Id: 654,665      Time: 11\/18\/25, 8:53 AM Class: org.identityconnectors.framework.api.operations.UpdateApiOp      Method: update  Level: OK       Message: Enter: update(ObjectClass: __ACCOUNT__, Attribute: {Name=__UID__, Value=&#x5B;110f12348004510b]}, &#x5B;Attribute: {Name=__TENANT__, Value=&#x5B;]}, Attribute: {Name=user_os_name, Value=&#x5B;]}, Attribute: {Name=AccountDisabled, Value=&#x5B;false]}, Attribute: {Name=user_global_unique_id, Value=&#x5B;9ibc9uqrfKafp\/K1LRb0og==]}, Attribute: {Name=user_rename_unlock_locked_obj, Value=&#x5B;T]}, Attribute: {Name=client_capability, Value=&#x5B;2]}, Attribute: {Name=user_login_domain, Value=&#x5B;]}, Attribute: {Name=user_name, Value=&#x5B;User Display Name 01]}, Attribute: {Name=user_ldap_dn, Value=&#x5B;cn=USERID01,ou=users,dc=domain,dc=com]}, Attribute: {Name=user_address, Value=&#x5B;user01@domain.com]}, Attribute: {Name=user_login_name, Value=&#x5B;USERID01]}, Attribute: {Name=user_xprivileges, Value=&#x5B;32]}, Attribute: {Name=create_default_cabinet, Value=&#x5B;F]}, Attribute: {Name=user_privileges, Value=&#x5B;0]}, Attribute: {Name=__PARTITION__, Value=&#x5B;PARTITION01]}, Attribute: {Name=__OTDS_UUID__, Value=&#x5B;7748abe9-7a51-9d43-b6c4-13ba639481b5]}, Attribute: {Name=user_type, Value=&#x5B;dm_user]}, Attribute: {Name=user_rename_enabled, Value=&#x5B;T]}, Attribute: {Name=default_folder, Value=&#x5B;\/Home\/User Display Name 01]}, Attribute: {Name=__NAME__, Value=&#x5B;User Display Name 01]}], null)\nThread Id: 654,623      Time: 11\/18\/25, 8:53 AM Class: org.identityconnectors.framework.api.operations.UpdateApiOp      Method: update  Level: OK       Message: Exception:\ncom.opentext.otds.connectors.rest.HttpException: Error updating member: 400 Bad Request &lt;!doctype html&gt;&lt;html lang=&quot;en&quot;&gt;&lt;head&gt;&lt;title&gt;HTTP Status 400 \u2013 Bad Request&lt;\/title&gt;&lt;style type=&quot;text\/css&quot;&gt;body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}&lt;\/style&gt;&lt;\/head&gt;&lt;body&gt;&lt;h1&gt;HTTP Status 400 \u2013 Bad Request&lt;\/h1&gt;&lt;\/body&gt;&lt;\/html&gt;\n        at com.opentext.otds.connectors.rest.RestSession.updateMember(RestSession.java:314)\n        at com.opentext.otds.connectors.rest.RestConnector$9.endOfAttributes(RestConnector.java:557)\n        at com.opentext.otds.connectors.rest.RestConnector$9.endOfAttributes(RestConnector.java:526)\n        at com.opentext.otds.connectors.rest.RestAttributeParser.parse(RestAttributeParser.java:29)\n        at com.opentext.otds.connectors.rest.RestConnector.updateMember(RestConnector.java:564)\n        ...\nThread Id: 654,635      Time: 11\/18\/25, 8:53 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Exception:\ncom.opentext.otds.connectors.rest.HttpException: Error adding group members: 404 Not Found &lt;!doctype html&gt;&lt;html lang=&quot;en&quot;&gt;&lt;head&gt;&lt;title&gt;HTTP Status 404 \u2013 Not Found&lt;\/title&gt;&lt;style type=&quot;text\/css&quot;&gt;body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}&lt;\/style&gt;&lt;\/head&gt;&lt;body&gt;&lt;h1&gt;HTTP Status 404 \u2013 Not Found&lt;\/h1&gt;&lt;\/body&gt;&lt;\/html&gt;\n        at com.opentext.otds.connectors.rest.RestSession.addMembersToGroup(RestSession.java:387)\n        at com.opentext.otds.connectors.rest.RestConnector$3.endOfAttributes(RestConnector.java:222)\n        at com.opentext.otds.connectors.rest.RestConnector$3.endOfAttributes(RestConnector.java:172)\n        at com.opentext.otds.connectors.rest.RestAttributeParser.parse(RestAttributeParser.java:29)\n        ...\n<\/pre><\/div>\n\n\n<p>So OTDS Consolidation ends-up with &#8220;<strong><em>400 Bad Request<\/em><\/strong>&#8221; and &#8220;<strong><em>404 Not Found<\/em><\/strong>&#8221; errors. While looking into the message in more details, you can see that it has a &#8220;<strong><em>__UID__<\/em><\/strong>&#8221; attribute (&#8220;<strong><em>Attribute: {Name=__UID__, Value=[110f12348004510b]}<\/em><\/strong>&#8220;) which represents the <strong><em>r_object_id<\/em><\/strong> of the <strong><em>dm_user<\/em><\/strong>, normally\u2026 But in this case, it&#8217;s different from the one in the dump above. And that <strong><em>r_object_id<\/em><\/strong> doesn&#8217;t exist in the Repository anymore:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [2,17,19]; title: ; notranslate\" title=\"\">\n&#x5B;dmadmin@cs-0 ~]$ iapi $DOCBASE_NAME -Udmadmin -Pxxx &lt;&lt; EOC\n&gt; dump,c,110f12348004510b\n&gt; exit\n&gt; EOC\n\n        OpenText Documentum iapi - Interactive API interface\n        Copyright (c) 2023. OpenText Corporation\n        All rights reserved.\n        Client Library Release 23.4.0000.0180\n\nConnecting to Server using docbase REPO01\n&#x5B;DM_SESSION_I_SESSION_START]info:  &quot;Session 010f123480c63b54 started for user dmadmin.&quot;\n\nConnected to OpenText Documentum Server running Release 23.4.0000.0143  Linux64.Oracle\nSession id is s0\nAPI&gt; ...\n&#x5B;DM_API_E_EXIST]error:  &quot;Document\/object specified by 110f12348004510b does not exist.&quot;\n\n&#x5B;DM_SESSION_W_FETCH_FAILED]warning:  &quot;Fetch of object with handle 110f12348004510b and type NULL failed.&quot;\n\nAPI&gt; Bye\n&#x5B;dmadmin@cs-0 ~]$\n<\/pre><\/div>\n\n\n<p>What happened exactly? I&#8217;m not sure, I tried to ask the people that were looking at that case \/ trying to fix the AD account, but nobody could tell me if there was another account that was removed \/ re-assigned. I can only assume OTDS initially created a duplicate account (<strong><em>USERID02<\/em><\/strong>) because it couldn&#8217;t map the existing account in the Repository since the user_name was messed-up in the AD. And that someone either deleted or re-assigned the OTDS account to the other account (which was initially created by the LDAP Sync years ago, before the migration to OTDS in the past few days\/weeks).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-reflection-on-the-way-to-fix-it\">Reflection on the way to fix it<\/h2>\n\n\n\n<p>In any cases, what can be done to fix the situation\u2026? The problem is that now OTDS references a <strong><em>r_object_id<\/em><\/strong> that doesn&#8217;t exist in Documentum and that prevent the synchronization to happen properly. Even if an account exists in the Repository with the expected <strong><em>user_login_name<\/em><\/strong> \/ <strong><em>user_name<\/em><\/strong>, since it&#8217;s not the one OTDS has internally, it&#8217;s not doing anything.<\/p>\n\n\n\n<p>I could see 2 options to solve the case:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Since it&#8217;s part of a Synchronized Partition, you cannot delete the OTDS account. Therefore, a first solution could be to exclude this specific account from the Partition (by updating the user filter to specifically exclude that one), execute a consolidation to make sure all references of it disappears before re-adding the account again.<\/li>\n\n\n\n<li>Find and update the wrong reference in the OTDS DB<\/li>\n<\/ol>\n\n\n\n<p>The safest approach is probably the #1, but since I was in the middle of debugging the issue, I wanted to try the second one instead. This is to confirm how OTDS behaves and maybe to get more insights on how the DB is organized\u2026 Who knows, it might be helpful at some point in the future ;).<\/p>\n\n\n\n<p>From what I already knew, the users are put inside the &#8220;<strong><em>MEMBERS<\/em><\/strong>&#8221; table but that would only contain things from the Source system (AD here). The possible external details like the &#8220;<strong><em>r_object_id<\/em><\/strong>&#8221; I&#8217;m looking for here would usually be in the &#8220;<strong><em>RESOURCEACCESS<\/em><\/strong>&#8221; table instead. Therefore, I found my user through its user id, fetched the <strong><em>UUID<\/em><\/strong> that is the cross-reference used by OTDS and was indeed able to find the wrong reference there:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [4,5,6,7,8,10,11,12,13,14]; title: ; notranslate\" title=\"\">\nSQL&gt; SET PAGES 999;\nSQL&gt; SET WRAP OFF;\nSQL&gt; SET LINESIZE 50;\nSQL&gt; SELECT UUID, NAME FROM MEMBERS WHERE NAME=&#039;USERID01&#039;;\n\nUUID                             NAME\n-------------------------------- -----------------\n7BE9748AA57149D3BC641A948363B1B5 USERID01\n\nSQL&gt; SELECT MEMBERID, IDINRESOURCE FROM RESOURCEACCESS WHERE MEMBERID=&#039;7BE9748AA57149D3BC641A948363B1B5&#039;;\n\nMEMBERID                         IDINRESOURCE\n-------------------------------- -----------------\n7BE9748AA57149D3BC641A948363B1B5 110f12348004510b\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-db-crawler-preparation\">DB Crawler &#8211; Preparation<\/h2>\n\n\n\n<p>But what if you aren&#8217;t certain if this is the only reference in the whole DB\u2026? I was in this position too. I knew I could find what I was looking for in these 2 tables, but I wasn&#8217;t 100% certain if it was the only place. Well, I sure hoped so, as having duplicates \/ multiple references for the same thing in the DB could be pretty bad.<\/p>\n\n\n\n<p>Let&#8217;s crawl the DB to see if there are any other references then! First of all, I created a small SQL file which contains the connection to the DB, the generation of all needed SELECT statements for each column of each table which have a <span style=\"text-decoration: underline\">string data_type<\/span> and finally the execution of the generated selects:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]; title: ; notranslate\" title=\"\">\n&#x5B;dmadmin@cs-0 mop]$ ls -l\ntotal 4\n-rw-r----- 1 dmadmin dmadmin 536 Nov 18 09:03 generate_and_execute_selects.sql\n&#x5B;dmadmin@cs-0 mop]$\n&#x5B;dmadmin@cs-0 mop]$ cat generate_and_execute_selects.sql\nCONNECT otds-user\/otds-password@otds-tns\nspool selects.sql\nset pagesize 0\nset linesize 10000\nset trims on\nSELECT\n    &#039;SELECT &#039;&#039;&#039; || table_name || &#039;&#039;&#039; AS table_name, &#039;&#039;&#039; ||\n    column_name || &#039;&#039;&#039; AS column_name, &quot;&#039; ||\n    column_name || &#039;&quot; AS value_found &#039; ||\n    &#039;FROM &#039; || owner || &#039;.&#039; || table_name ||\n    &#039; WHERE &quot;&#039; || column_name || &#039;&quot; LIKE &#039;&#039;%110f12348004510b%&#039;&#039;;&#039;\n  FROM\n    all_tab_columns\n  WHERE\n    data_type IN (&#039;VARCHAR2&#039;,&#039;NVARCHAR2&#039;,&#039;CHAR&#039;,&#039;NCHAR&#039;,&#039;CLOB&#039;,&#039;RAW&#039;)\n    AND owner = &#039;OTDS&#039;;\nspool off\nset echo on\n@selects.sql\nquit\n&#x5B;dmadmin@cs-0 mop]$\n<\/pre><\/div>\n\n\n<p><strong><em>Note 1:<\/em><\/strong> I put the <strong><em>CONNECT<\/em><\/strong> inside the SQL file, but you can obviously set it at command line or through variables, so it doesn&#8217;t show in the bash history. It&#8217;s just an example.<\/p>\n\n\n\n<p><strong><em>Note 2:<\/em><\/strong> You can change the string that you are looking for, it&#8217;s in between the &#8216;<strong><em>%string%<\/em><\/strong>&#8216; (line 11 of the SQL file). You can also change the data_type as required (line 15 of the SQL file). For OTDS on Oracle, only <strong><em>VARCHAR2<\/em><\/strong>, <strong><em>CLOB<\/em><\/strong> and <strong><em>RAW<\/em><\/strong> are used.<\/p>\n\n\n\n<p><strong><em>Note 3:<\/em><\/strong> I&#8217;m using double quotes (&#8220;) around the <strong><em>column_name<\/em><\/strong>. This is because, unfortunately, some columns for OTDS appears to be created by the product with case sensitivity\u2026 Therefore, without these double quotes, you wouldn&#8217;t be able to query for the 2 tables: &#8220;<strong><em>SCHEMA_HISTORY<\/em><\/strong>&#8221; and &#8220;<strong><em>BOOTSTRAP_HISTORY<\/em><\/strong>&#8220;. Without it, the DB Crawling would succeed for all tables except these 2 where you would get an &#8220;invalid identifier&#8221; on the column name\u2026 As an example, you can try to execute these two queries:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [2]; title: ; notranslate\" title=\"\">\nselect * from SCHEMA_HISTORY WHERE description like &#039;%setup%&#039;; -- this might not work\nselect * from SCHEMA_HISTORY WHERE &quot;description&quot; like &#039;%setup%&#039;; -- this works\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-db-crawler-execution\">DB Crawler &#8211; Execution<\/h2>\n\n\n\n<p>Once you have the above SQL file, you can execute it. As mentioned, it will start with the generation of another SQL file, containing all needed <strong><em>SELECT<\/em><\/strong> statements for all columns of all tables. And it will then execute all these <em><strong>SELECT<\/strong><\/em> statements one by one. All the logs will be inside the &#8220;<strong><em>selects.log<\/em><\/strong>&#8221; file in this case:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;dmadmin@cs-0 mop]$ sqlplus \/nolog @generate_and_execute_selects.sql &gt; selects.log\n&#x5B;dmadmin@cs-0 mop]$\n&#x5B;dmadmin@cs-0 mop]$ echo $?\n0\n&#x5B;dmadmin@cs-0 mop]$\n&#x5B;dmadmin@cs-0 mop]$ ls -l\ntotal 96\n-rw-r----- 1 dmadmin dmadmin   536 Nov 18 09:03 generate_and_execute_selects.sql\n-rw-r----- 1 dmadmin dmadmin 54518 Nov 18 09:03 selects.log\n-rw-r----- 1 dmadmin dmadmin 25122 Nov 18 09:03 selects.sql\n&#x5B;dmadmin@cs-0 mop]$\n<\/pre><\/div>\n\n\n<p>I usually start a first execution with &#8220;<strong><em>@selects.sql<\/em><\/strong>&#8221; being commented in the &#8220;<strong><em>generate_and_execute_selects.sql<\/em><\/strong>&#8221; file. This is to generate the <strong><em>SELECT<\/em><\/strong> statements without executing them. I can first verify if everything looks good before cleaning and re-executing without the line commented out.<\/p>\n\n\n\n<p>For OTDS, there are 164 <strong><em>SELECT<\/em><\/strong> statements being generated. For this environment, there are 252 columns owned by &#8220;OTDS&#8221; in total, but 49+39 of these that have a <strong><em>TIMESTAMP<\/em><\/strong>+<strong><em>NUMBER<\/em><\/strong> <strong><em>data_type<\/em><\/strong>, respectively, which gives us the 164 results, as expected:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\n&#x5B;dmadmin@cs-0 mop]$ cat selects.sql\nSELECT &#039;ACCESSROLEMEMBERS&#039; AS table_name, &#039;TENANTID&#039; AS column_name, &quot;TENANTID&quot; AS value_found FROM OTDS.ACCESSROLEMEMBERS WHERE &quot;TENANTID&quot; LIKE &#039;%110f12348004510b%&#039;;\nSELECT &#039;ACCESSROLEMEMBERS&#039; AS table_name, &#039;ACCESSROLEID&#039; AS column_name, &quot;ACCESSROLEID&quot; AS value_found FROM OTDS.ACCESSROLEMEMBERS WHERE &quot;ACCESSROLEID&quot; LIKE &#039;%110f12348004510b%&#039;;\nSELECT &#039;ACCESSROLEMEMBERS&#039; AS table_name, &#039;MEMBERID&#039; AS column_name, &quot;MEMBERID&quot; AS value_found FROM OTDS.ACCESSROLEMEMBERS WHERE &quot;MEMBERID&quot; LIKE &#039;%110f12348004510b%&#039;;\nSELECT &#039;SCHEMA_HISTORY&#039; AS table_name, &#039;version&#039; AS column_name, &quot;version&quot; AS value_found FROM OTDS.SCHEMA_HISTORY WHERE &quot;version&quot; LIKE &#039;%110f12348004510b%&#039;;\nSELECT &#039;SCHEMA_HISTORY&#039; AS table_name, &#039;description&#039; AS column_name, &quot;description&quot; AS value_found FROM OTDS.SCHEMA_HISTORY WHERE &quot;description&quot; LIKE &#039;%110f12348004510b%&#039;;\n...\n...\nSELECT &#039;JOBS&#039; AS table_name, &#039;NAME&#039; AS column_name, &quot;NAME&quot; AS value_found FROM OTDS.JOBS WHERE &quot;NAME&quot; LIKE &#039;%110f12348004510b%&#039;;\nSELECT &#039;JOBS&#039; AS table_name, &#039;TARGET&#039; AS column_name, &quot;TARGET&quot; AS value_found FROM OTDS.JOBS WHERE &quot;TARGET&quot; LIKE &#039;%110f12348004510b%&#039;;\nSELECT &#039;BOOTSTRAP_HISTORY&#039; AS table_name, &#039;version&#039; AS column_name, &quot;version&quot; AS value_found FROM OTDS.BOOTSTRAP_HISTORY WHERE &quot;version&quot; LIKE &#039;%110f12348004510b%&#039;;\nSELECT &#039;BOOTSTRAP_HISTORY&#039; AS table_name, &#039;description&#039; AS column_name, &quot;description&quot; AS value_found FROM OTDS.BOOTSTRAP_HISTORY WHERE &quot;description&quot; LIKE &#039;%110f12348004510b%&#039;;\nSELECT &#039;BOOTSTRAP_HISTORY&#039; AS table_name, &#039;type&#039; AS column_name, &quot;type&quot; AS value_found FROM OTDS.BOOTSTRAP_HISTORY WHERE &quot;type&quot; LIKE &#039;%110f12348004510b%&#039;;\nSELECT &#039;BOOTSTRAP_HISTORY&#039; AS table_name, &#039;script&#039; AS column_name, &quot;script&quot; AS value_found FROM OTDS.BOOTSTRAP_HISTORY WHERE &quot;script&quot; LIKE &#039;%110f12348004510b%&#039;;\nSELECT &#039;BOOTSTRAP_HISTORY&#039; AS table_name, &#039;installed_by&#039; AS column_name, &quot;installed_by&quot; AS value_found FROM OTDS.BOOTSTRAP_HISTORY WHERE &quot;installed_by&quot; LIKE &#039;%110f12348004510b%&#039;;\n\n164 rows selected.\n\n&#x5B;dmadmin@cs-0 mop]$\n<\/pre><\/div>\n\n\n<p>To verify if all <strong><em>SELECT<\/em><\/strong> statements were executed successfully and to check the list of occurrences of the specific string, you can use such commands:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [11,12]; title: ; notranslate\" title=\"\">\n&#x5B;dmadmin@cs-0 mop]$ grep &#039;^SQL&gt; SELECT&#039; selects.log | wc -l\n164\n&#x5B;dmadmin@cs-0 mop]$\n&#x5B;dmadmin@cs-0 mop]$ grep -i &#039;ERROR&#039; selects.log | wc -l\n0\n&#x5B;dmadmin@cs-0 mop]$\n&#x5B;dmadmin@cs-0 mop]$ grep &#039;no rows selected&#039; selects.log | wc -l\n163\n&#x5B;dmadmin@cs-0 mop]$\n&#x5B;dmadmin@cs-0 mop]$ grep -B1 &#039;&#x5B;^%]110f12348004510b&#039; selects.log\nSQL&gt; SELECT &#039;RESOURCEACCESS&#039; AS table_name, &#039;IDINRESOURCE&#039; AS column_name, &quot;IDINRESOURCE&quot; AS value_found FROM OTDS.RESOURCEACCESS WHERE &quot;IDINRESOURCE&quot; LIKE &#039;%110f12348004510b%&#039;;\nRESOURCEACCESS IDINRESOURCE 110f12348004510b\n&#x5B;dmadmin@cs-0 mop]$\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-fixing-the-wrong-r-object-id-reference-in-otds\">Fixing the wrong r_object_id reference in OTDS<\/h2>\n\n\n\n<p>Therefore, that confirms that all 164 <strong><em>SELECT<\/em><\/strong> statements were executed, there was 0 errors, 163 empty results (no match in the full column) and only a single query that matched. This means that the only reference present for the Documentum <strong><em>r_object_id<\/em><\/strong> in the OTDS DB is indeed stored inside the &#8220;<strong><em>RESOURCEACCESS.IDINRESOURCE<\/em><\/strong>&#8221; column. So let&#8217;s update \/ correct that value:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [5,15]; title: ; notranslate\" title=\"\">\nSQL&gt; SELECT MEMBERID, IDINRESOURCE FROM RESOURCEACCESS WHERE MEMBERID=&#039;7BE9748AA57149D3BC641A948363B1B5&#039;;\n\nMEMBERID                         IDINRESOURCE\n-------------------------------- -----------------\n7BE9748AA57149D3BC641A948363B1B5 110f12348004510b\n\nSQL&gt; UPDATE RESOURCEACCESS SET IDINRESOURCE=&#039;110f12348000c96b&#039; WHERE MEMBERID=&#039;7BE9748AA57149D3BC641A948363B1B5&#039;;\n\n1 row updated.\n\nSQL&gt; SELECT MEMBERID, IDINRESOURCE FROM RESOURCEACCESS WHERE MEMBERID=&#039;7BE9748AA57149D3BC641A948363B1B5&#039;;\n\nMEMBERID                         IDINRESOURCE\n-------------------------------- -----------------\n7BE9748AA57149D3BC641A948363B1B5 110f12348000c96b\n<\/pre><\/div>\n\n\n<p>Now that it&#8217;s corrected, the final step is to trigger a new consolidation for that specific account, to see if OTDS is now able to update the account in Documentum:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\nThread Id: 655,026      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.UpdateApiOp      Method: update  Level: OK       Message: Enter: update(ObjectClass: __ACCOUNT__, Attribute: {Name=__UID__, Value=&#x5B;110f12348000c96b]}, &#x5B;Attribute: {Name=__TENANT__, Value=&#x5B;]}, Attribute: {Name=user_os_name, Value=&#x5B;]}, Attribute: {Name=AccountDisabled, Value=&#x5B;false]}, Attribute: {Name=user_global_unique_id, Value=&#x5B;9ibc9uqrfKafp\/K1LRb0og==]}, Attribute: {Name=user_rename_unlock_locked_obj, Value=&#x5B;T]}, Attribute: {Name=client_capability, Value=&#x5B;2]}, Attribute: {Name=user_login_domain, Value=&#x5B;]}, Attribute: {Name=user_name, Value=&#x5B;User Display Name 01]}, Attribute: {Name=user_ldap_dn, Value=&#x5B;CN=USERID01,OU=Users,DC=domain,DC=com]}, Attribute: {Name=user_address, Value=&#x5B;user01@domain.com]}, Attribute: {Name=user_login_name, Value=&#x5B;USERID01]}, Attribute: {Name=user_xprivileges, Value=&#x5B;32]}, Attribute: {Name=create_default_cabinet, Value=&#x5B;F]}, Attribute: {Name=user_privileges, Value=&#x5B;0]}, Attribute: {Name=__PARTITION__, Value=&#x5B;PARTITION01]}, Attribute: {Name=__OTDS_UUID__, Value=&#x5B;7748abe9-7a51-9d43-b6c4-13ba639481b5]}, Attribute: {Name=user_type, Value=&#x5B;dm_user]}, Attribute: {Name=user_rename_enabled, Value=&#x5B;T]}, Attribute: {Name=default_folder, Value=&#x5B;\/Home\/User Display Name 01]}, Attribute: {Name=__NAME__, Value=&#x5B;User Display Name 01]}], null)\nThread Id: 655,032      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Enter: create(ObjectClass: DIRECTIONAL_ASSOCIATION, &#x5B;Attribute: {Name=ToObjClassName, Value=&#x5B;__GROUP__]}, Attribute: {Name=FromObjClassName, Value=&#x5B;__MEMBER__]}, Attribute: {Name=From, Value=&#x5B;&#x5B;Multiple Members]]}, Attribute: {Name=To, Value=&#x5B;120f123480007dd8]}, Attribute: {Name=Type, Value=&#x5B;MemberOfGroup]}], OperationOptions: {Members=&#x5B;Ljava.lang.String;@289175b7})\nThread Id: 655,033      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Enter: create(ObjectClass: DIRECTIONAL_ASSOCIATION, &#x5B;Attribute: {Name=ToObjClassName, Value=&#x5B;__GROUP__]}, Attribute: {Name=FromObjClassName, Value=&#x5B;__MEMBER__]}, Attribute: {Name=From, Value=&#x5B;&#x5B;Multiple Members]]}, Attribute: {Name=To, Value=&#x5B;120f12348000051b]}, Attribute: {Name=Type, Value=&#x5B;MemberOfGroup]}], OperationOptions: {Members=&#x5B;Ljava.lang.String;@2551d69b})\nThread Id: 655,036      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Enter: create(ObjectClass: DIRECTIONAL_ASSOCIATION, &#x5B;Attribute: {Name=ToObjClassName, Value=&#x5B;__GROUP__]}, Attribute: {Name=FromObjClassName, Value=&#x5B;__MEMBER__]}, Attribute: {Name=From, Value=&#x5B;&#x5B;Multiple Members]]}, Attribute: {Name=To, Value=&#x5B;120f12348000051e]}, Attribute: {Name=Type, Value=&#x5B;MemberOfGroup]}], OperationOptions: {Members=&#x5B;Ljava.lang.String;@3f885a33})\nThread Id: 655,038      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Enter: create(ObjectClass: DIRECTIONAL_ASSOCIATION, &#x5B;Attribute: {Name=ToObjClassName, Value=&#x5B;__GROUP__]}, Attribute: {Name=FromObjClassName, Value=&#x5B;__MEMBER__]}, Attribute: {Name=From, Value=&#x5B;&#x5B;Multiple Members]]}, Attribute: {Name=To, Value=&#x5B;120f12348000451d]}, Attribute: {Name=Type, Value=&#x5B;MemberOfGroup]}], OperationOptions: {Members=&#x5B;Ljava.lang.String;@39b49b96})\nThread Id: 655,040      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Enter: create(ObjectClass: DIRECTIONAL_ASSOCIATION, &#x5B;Attribute: {Name=ToObjClassName, Value=&#x5B;__GROUP__]}, Attribute: {Name=FromObjClassName, Value=&#x5B;__MEMBER__]}, Attribute: {Name=From, Value=&#x5B;&#x5B;Multiple Members]]}, Attribute: {Name=To, Value=&#x5B;120f12348000451e]}, Attribute: {Name=Type, Value=&#x5B;MemberOfGroup]}], OperationOptions: {Members=&#x5B;Ljava.lang.String;@4504edb8})\nThread Id: 655,066      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.UpdateApiOp      Method: update  Level: OK       Message: Enter: update(ObjectClass: __ACCOUNT__, Attribute: {Name=__UID__, Value=&#x5B;110f12348000c96b]}, &#x5B;Attribute: {Name=__TENANT__, Value=&#x5B;]}, Attribute: {Name=user_os_name, Value=&#x5B;]}, Attribute: {Name=AccountDisabled, Value=&#x5B;false]}, Attribute: {Name=user_global_unique_id, Value=&#x5B;9ibc9uqrfKafp\/K1LRb0og==]}, Attribute: {Name=user_rename_unlock_locked_obj, Value=&#x5B;T]}, Attribute: {Name=client_capability, Value=&#x5B;2]}, Attribute: {Name=user_login_domain, Value=&#x5B;]}, Attribute: {Name=user_name, Value=&#x5B;User Display Name 01]}, Attribute: {Name=user_ldap_dn, Value=&#x5B;cn=USERID01,ou=users,dc=domain,dc=com]}, Attribute: {Name=user_address, Value=&#x5B;user01@domain.com]}, Attribute: {Name=user_login_name, Value=&#x5B;USERID01]}, Attribute: {Name=user_xprivileges, Value=&#x5B;32]}, Attribute: {Name=create_default_cabinet, Value=&#x5B;F]}, Attribute: {Name=user_privileges, Value=&#x5B;0]}, Attribute: {Name=__PARTITION__, Value=&#x5B;PARTITION01]}, Attribute: {Name=__OTDS_UUID__, Value=&#x5B;7748abe9-7a51-9d43-b6c4-13ba639481b5]}, Attribute: {Name=user_type, Value=&#x5B;dm_user]}, Attribute: {Name=user_rename_enabled, Value=&#x5B;T]}, Attribute: {Name=default_folder, Value=&#x5B;\/Home\/User Display Name 01]}, Attribute: {Name=__NAME__, Value=&#x5B;User Display Name 01]}], null)\nThread Id: 655,026      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.UpdateApiOp      Method: update  Level: OK       Message: Return: Attribute: {Name=__UID__, Value=&#x5B;110f12348000c96b]}\nThread Id: 655,033      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Return: Attribute: {Name=__UID__, Value=&#x5B;&#x5B;Multiple Members]__com.opentext.otds.connectors.reserved.string____MEMBER__%%%__GROUP__%%%MemberOfGroup__com.opentext.otds.connectors.reserved.string__120f12348000051b]}\nThread Id: 655,032      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Return: Attribute: {Name=__UID__, Value=&#x5B;&#x5B;Multiple Members]__com.opentext.otds.connectors.reserved.string____MEMBER__%%%__GROUP__%%%MemberOfGroup__com.opentext.otds.connectors.reserved.string__120f123480007dd8]}\nThread Id: 655,066      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.UpdateApiOp      Method: update  Level: OK       Message: Return: Attribute: {Name=__UID__, Value=&#x5B;110f12348000c96b]}\nThread Id: 655,038      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Return: Attribute: {Name=__UID__, Value=&#x5B;&#x5B;Multiple Members]__com.opentext.otds.connectors.reserved.string____MEMBER__%%%__GROUP__%%%MemberOfGroup__com.opentext.otds.connectors.reserved.string__120f12348000451d]}\nThread Id: 655,040      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Return: Attribute: {Name=__UID__, Value=&#x5B;&#x5B;Multiple Members]__com.opentext.otds.connectors.reserved.string____MEMBER__%%%__GROUP__%%%MemberOfGroup__com.opentext.otds.connectors.reserved.string__120f12348000451e]}\nThread Id: 655,036      Time: 11\/18\/25, 9:11 AM Class: org.identityconnectors.framework.api.operations.CreateApiOp      Method: create  Level: OK       Message: Return: Attribute: {Name=__UID__, Value=&#x5B;&#x5B;Multiple Members]__com.opentext.otds.connectors.reserved.string____MEMBER__%%%__GROUP__%%%MemberOfGroup__com.opentext.otds.connectors.reserved.string__120f12348000051e]}\n<\/pre><\/div>\n\n\n<p>The logs look clean and the same is shown on Documentum:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [20,41,45,61]; title: ; notranslate\" title=\"\">\n&#x5B;dmadmin@cs-0 ~]$ iapi $DOCBASE_NAME -Udmadmin -Pxxx &lt;&lt; EOC\n&gt; dump,c,110f12348000c96b\n&gt; exit\n&gt; EOC\n\n        OpenText Documentum iapi - Interactive API interface\n        Copyright (c) 2023. OpenText Corporation\n        All rights reserved.\n        Client Library Release 23.4.0000.0180\n\nConnecting to Server using docbase REPO01\n&#x5B;DM_SESSION_I_SESSION_START]info:  &quot;Session 010f123480c63b66 started for user dmadmin.&quot;\n\nConnected to OpenText Documentum Server running Release 23.4.0000.0143  Linux64.Oracle\nSession id is s0\nAPI&gt; ...\nUSER ATTRIBUTES\n\n  user_name                       : User Display Name 01\n  user_os_name                    :\n  user_address                    : user01@domain.com\n  user_group_name                 :\n  user_privileges                 : 0\n  owner_def_permit                : 7\n  world_def_permit                : 3\n  group_def_permit                : 5\n  default_folder                  : \/Home\/User Display Name 01\n  user_db_name                    :\n  description                     :\n  acl_domain                      : User Display Name 01\n  acl_name                        : dm_450f12348000f652\n  user_os_domain                  :\n  home_docbase                    :\n  user_state                      : 0\n  client_capability               : 2\n  globally_managed                : F\n  user_delegation                 :\n  workflow_disabled               : F\n  alias_set_id                    : 0000000000000000\n  user_source                     : OTDS\n  user_ldap_dn                    : cn=USERID01,ou=users,dc=domain,dc=com\n  user_xprivileges                : 32\n  failed_auth_attempt             : 0\n  user_admin                      :\n  user_global_unique_id           : 9ibc9uqrfKafp\/K1LRb0og==\n  user_login_name                 : USERID01\n  user_login_domain               :\n  user_initials                   :\n  user_password                   : ****************\n  user_web_page                   :\n  first_failed_auth_utc_time      : nulldate\n  last_login_utc_time             : 1\/3\/2022 13:39:00\n  deactivated_utc_time            : nulldate\n  deactivated_ip_addr             :\n  restricted_folder_ids         &#x5B;]: &lt;none&gt;\n  root_log_dir                    :\n\nSYSTEM ATTRIBUTES\n\n  r_is_group                      : F\n  r_modify_date                   : 11\/18\/2025 09:11:38\n  r_has_events                    : F\n  r_object_id                     : 110f12348000c96b\n\nAPPLICATION ATTRIBUTES\n\n\nINTERNAL ATTRIBUTES\n\n  i_is_replica                    : F\n  i_vstamp                        : 15\n\nAPI&gt; Bye\n&#x5B;dmadmin@cs-0 ~]$\n<\/pre><\/div>\n\n\n<p>The account was just updated, the &#8220;<strong><em>user_global_unique_id<\/em><\/strong>&#8221; has been populated with some others as well. Therefore, the OTDS synchronization is now correct for that account. In summary, this case was pretty specific, with issues inside the AD directly, which created a bit of a mess in OTDS and Documentum with a mapping to a wrong user which is apparently not present anymore, etc\u2026 But once the AD was fixed, I was able to reset the <strong><em>r_object_id<\/em><\/strong> reference in OTDS, so that it could restore itself to a correct behavior.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I recently faced another pretty interesting case with an incorrect r_object_id reference in OTDS. In a non-production (dev) Active Directory (Azure EntraID) that is used as source of truth for the users\/groups, it looked like there was an account which was a bit messed-up. By that, I mean that the mail address, user name and [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[525],"tags":[3798,2609,3500,1909,3797,2039,3799,1997],"type_dbi":[],"class_list":["post-42306","post","type-post","status-publish","format-standard","hentry","category-enterprise-content-management","tag-db-crawler","tag-documentum-2","tag-otds","tag-partition","tag-r_object_id","tag-resource","tag-synchronization","tag-user_global_unique_id"],"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>Dctm - Incorrect r_object_id reference in OTDS - dbi Blog<\/title>\n<meta name=\"description\" content=\"It might happen to have an incorrect r_object_id reference in OTDS for some objects. Let&#039;s go through the way to find and correct such items.\" \/>\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\/dctm-incorrect-r_object_id-reference-in-otds\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dctm - Incorrect r_object_id reference in OTDS\" \/>\n<meta property=\"og:description\" content=\"It might happen to have an incorrect r_object_id reference in OTDS for some objects. Let&#039;s go through the way to find and correct such items.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-01T14:41:00+00:00\" \/>\n<meta name=\"author\" content=\"Morgan Patou\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@MorganPatou\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Morgan Patou\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 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\/dctm-incorrect-r_object_id-reference-in-otds\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/\"},\"author\":{\"name\":\"Morgan Patou\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c4d05b25843a9bc2ab20415dae6bd2d8\"},\"headline\":\"Dctm &#8211; Incorrect r_object_id reference in OTDS\",\"datePublished\":\"2026-01-01T14:41:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/\"},\"wordCount\":1503,\"commentCount\":0,\"keywords\":[\"DB Crawler\",\"Documentum\",\"OTDS\",\"Partition\",\"r_object_id\",\"resource\",\"Synchronization\",\"user_global_unique_id\"],\"articleSection\":[\"Enterprise content management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/\",\"name\":\"Dctm - Incorrect r_object_id reference in OTDS - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2026-01-01T14:41:00+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c4d05b25843a9bc2ab20415dae6bd2d8\"},\"description\":\"It might happen to have an incorrect r_object_id reference in OTDS for some objects. Let's go through the way to find and correct such items.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dctm &#8211; Incorrect r_object_id reference in OTDS\"}]},{\"@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\/c4d05b25843a9bc2ab20415dae6bd2d8\",\"name\":\"Morgan Patou\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g\",\"caption\":\"Morgan Patou\"},\"description\":\"Morgan Patou has over 12 years of experience in Enterprise Content Management (ECM) systems, with a strong focus in recent years on platforms such as Alfresco, Documentum, and M-Files. He specializes in the architecture, setup, customization, and maintenance of ECM infrastructures in complex &amp; critical environments. Morgan is well-versed in both engineering and operations aspects, including high availability design, system integration, and lifecycle management. He also has a solid foundation in open-source and proprietary technologies - ranging from Apache, OpenLDAP or Kerberos to enterprise-grade systems like WebLogic. Morgan Patou holds an Engineering Degree in Computer Science from ENSISA (\u00c9cole Nationale Sup\u00e9rieure d'Ing\u00e9nieurs Sud Alsace) in Mulhouse, France. He is Alfresco Content Services Certified Administrator (ACSCA), Alfresco Content Services Certified Engineer (ACSCE) as well as OpenText Documentum Certified Administrator. His industry experience spans the Public Sector, IT Services, Financial Services\/Banking, and the Pharmaceutical industry.\",\"sameAs\":[\"https:\/\/blog.dbi-services.com\/author\/morgan-patou\/\",\"https:\/\/x.com\/MorganPatou\"],\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/morgan-patou\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Dctm - Incorrect r_object_id reference in OTDS - dbi Blog","description":"It might happen to have an incorrect r_object_id reference in OTDS for some objects. Let's go through the way to find and correct such items.","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\/dctm-incorrect-r_object_id-reference-in-otds\/","og_locale":"en_US","og_type":"article","og_title":"Dctm - Incorrect r_object_id reference in OTDS","og_description":"It might happen to have an incorrect r_object_id reference in OTDS for some objects. Let's go through the way to find and correct such items.","og_url":"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/","og_site_name":"dbi Blog","article_published_time":"2026-01-01T14:41:00+00:00","author":"Morgan Patou","twitter_card":"summary_large_image","twitter_creator":"@MorganPatou","twitter_misc":{"Written by":"Morgan Patou","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/"},"author":{"name":"Morgan Patou","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c4d05b25843a9bc2ab20415dae6bd2d8"},"headline":"Dctm &#8211; Incorrect r_object_id reference in OTDS","datePublished":"2026-01-01T14:41:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/"},"wordCount":1503,"commentCount":0,"keywords":["DB Crawler","Documentum","OTDS","Partition","r_object_id","resource","Synchronization","user_global_unique_id"],"articleSection":["Enterprise content management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/","url":"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/","name":"Dctm - Incorrect r_object_id reference in OTDS - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2026-01-01T14:41:00+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c4d05b25843a9bc2ab20415dae6bd2d8"},"description":"It might happen to have an incorrect r_object_id reference in OTDS for some objects. Let's go through the way to find and correct such items.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/dctm-incorrect-r_object_id-reference-in-otds\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Dctm &#8211; Incorrect r_object_id reference in OTDS"}]},{"@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\/c4d05b25843a9bc2ab20415dae6bd2d8","name":"Morgan Patou","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g","caption":"Morgan Patou"},"description":"Morgan Patou has over 12 years of experience in Enterprise Content Management (ECM) systems, with a strong focus in recent years on platforms such as Alfresco, Documentum, and M-Files. He specializes in the architecture, setup, customization, and maintenance of ECM infrastructures in complex &amp; critical environments. Morgan is well-versed in both engineering and operations aspects, including high availability design, system integration, and lifecycle management. He also has a solid foundation in open-source and proprietary technologies - ranging from Apache, OpenLDAP or Kerberos to enterprise-grade systems like WebLogic. Morgan Patou holds an Engineering Degree in Computer Science from ENSISA (\u00c9cole Nationale Sup\u00e9rieure d'Ing\u00e9nieurs Sud Alsace) in Mulhouse, France. He is Alfresco Content Services Certified Administrator (ACSCA), Alfresco Content Services Certified Engineer (ACSCE) as well as OpenText Documentum Certified Administrator. His industry experience spans the Public Sector, IT Services, Financial Services\/Banking, and the Pharmaceutical industry.","sameAs":["https:\/\/blog.dbi-services.com\/author\/morgan-patou\/","https:\/\/x.com\/MorganPatou"],"url":"https:\/\/www.dbi-services.com\/blog\/author\/morgan-patou\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/42306","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\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=42306"}],"version-history":[{"count":2,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/42306\/revisions"}],"predecessor-version":[{"id":42308,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/42306\/revisions\/42308"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=42306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=42306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=42306"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=42306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}