Know what you can tell from the given r_object_id in Documentum

Have you wondered how r_object_id is derived, or whether there is any real meaning behind r_object_id. It is kind of documented in Content Server Fundamentals Document if you ever get to read it word to word.

This information always helps me when I am looking through the debug logs or when customer sends me screenshot of their error screen that has object ID.

Here is how it goes The first two digits is a tag which indicates what type of document it is (object type).

for example, if your r_object_id starts with ‘0b’ it means it is an object of dm_folder.

do you want to get the list of all the tags?, sure you can by running the following query?

DQL> list tags;

Tag types

     0 dec 0 Unused Tag ID

     1 dec 1 DMI_SESSION

     2 dec 2 DM_OBJECT

     3 dec 3 DM_TYPE

     4 dec 4 DM_COLLECTION

     5 dec 5 DMR_CONTAINMENT

     6 dec 6 DMR_CONTENT

     7 dec 7 Unused Tag ID

     8 dec 8 DM_SYSOBJECT

     9 dec 9 DM_DOCUMENT

     10 dec a DM_QUERY

     11 dec b DM_FOLDER

     12 dec c DM_CABINET

     13 dec d DM_ASSEMBLY

     14 dec e DM_STORE

     15 dec f DM_FULLTEXT

     16 dec 10 DM_METHOD

     17 dec 11 DM_USER

     18 dec 12 DM_GROUP

     19 dec 13 Unused Tag ID

     20 dec 14 DM_API

     21 dec 15 DM_TYPE_MANAGER

     22 dec 16 Unused Tag ID

     23 dec 17 DM_OUTPUTDEVICE

     24 dec 18 DM_ROUTER

     25 dec 19 DM_REGISTERED

     26 dec 1a Unused Tag ID

     27 dec 1b DMI_QUEUE_ITEM

     28 dec 1c Unused Tag ID

     29 dec 1d DM_EVENT

     30 dec 1e DMI_VSTAMP

     31 dec 1f DMI_INDEX

     32 dec 20 DMI_SEQUENCE

     33 dec 21 DM_TRANSACTION_LOG

     34 dec 22 DM_FILE

     35 dec 23 DMI_OTHERFILE

     36 dec 24 Unused Tag ID

     37 dec 25 DM_INBOX

     38 dec 26 DMI_REGISTRY

     39 dec 27 DM_FORMAT

     40 dec 28 DM_FILESTORE

     41 dec 29 DM_OPTICALSTORE

     42 dec 2a DM_LINKEDSTORE

     43 dec 2b DM_LINKRECORD

     44 dec 2c DM_DISTRIBUTEDSTORE

     45 dec 2d DMI_REPLICA_RECORD

     46 dec 2e DM_TYPE_INFO

     47 dec 2f DM_DUMP_RECORD

     48 dec 30 DMI_DUMP_OBJECT_RECORD

     49 dec 31 DM_LOAD_RECORD

     50 dec 32 DMI_LOAD_OBJECT_RECORD

     51 dec 33 DMI_CHANGE_RECORD

     52 dec 34 DM_BLOB_TICKET

     53 dec 35 DM_STAGED_DOCUMENT

     54 dec 36 DM_DIST_COMP_RECORD

     55 dec 37 DM_RELATION

     56 dec 38 DM_RELATION_TYPE

     57 dec 39 Unused Tag ID

     58 dec 3a DM_LOCATION

     59 dec 3b DM_FULLTEXT_INDEX

     60 dec 3c DM_DOCBASE_CONFIG

     61 dec 3d DM_SERVER_CONFIG

     62 dec 3e DM_MOUNT_POINT

     63 dec 3f DM_DOCBROKER

     64 dec 40 DM_BLOB_STORE

     65 dec 41 DM_NOTE

     66 dec 42 DM_REMOTESTORE

     67 dec 43 DM_REMOTETICKET

     68 dec 44 DM_DOCBASEID_MAP

     69 dec 45 DM_ACL

     70 dec 46 DM_POLICY

     71 dec 47 DM_REFERENCE

     72 dec 48 DM_RECOVERY

     73 dec 49 DM_IPKG

     74 dec 4a DM_WITEM

     75 dec 4b DM_BPROCESS

     76 dec 4c DM_ACTIVITY

     77 dec 4d DM_WORKFLOW

     78 dec 4e DM_DD_INFO

     79 dec 4f DM_NLS_DD_INFO

     80 dec 50 DM_DOMAIN

     81 dec 51 DM_AGGR_DOMAIN

     82 dec 52 DM_EXPRESSION

     83 dec 53 DM_LITERAL_EXPR

     84 dec 54 DM_BUILTIN_EXPR

     85 dec 55 DM_FUNC_EXPR

     86 dec 56 DM_COND_EXPR

     87 dec 57 DM_COND_ID_EXPR

     88 dec 58 DM_EXPR_CODE

     89 dec 59 DM_KEY

     90 dec 5a DM_VALUE_ASSIST

     91 dec 5b DM_VALUE_LIST

     92 dec 5c DM_VALUE_QUERY

     93 dec 5d DM_VALUE_FUNC

     94 dec 5e DM_FEDERATION

     95 dec 5f DM_AUDIT_TRAIL

     96 dec 60 DM_EXTERNALSTORE_TAG

     97 dec 61 DM_EXTERNALSTORE_FILE_TAG

     98 dec 62 DM_EXTERNALSTORE_URL_TAG

     99 dec 63 DM_EXTERNALSTORE_FREE_TAG

   100 dec 64 DM_SUBCONTENT

   101 dec 65 DM_FOREIGN_KEY

   102 dec 66 DM_ALIAS_SET

You may  wonder what tag does my custom object type gets, it gets the same tag as its super type it is derived from.

The next 6 digits is your docbase ID (the unique id you pick while creating your repository)

object_id

In the above example 004962 represents Hex decimal representation of my docbase ID (18786). The last 8 digits is the actual unique number that gets generated by the system.

r_object_id_gilbert

How about finding physical path of the document in the repository from the unique ID?. Let me save it for next post.

 

Change Documentum content server installation owner account in Windows.

When you install Documentum Content Server the OS user account that you used to login to the OS becomes your installation owner. You usually never run in to situations to change the installation owner account, but we had to update when we clone docbase for building other environments. It was fairly easier when I changed in Linux in the past but I found it little bit painstaking when it comes to Windows.

To change the installation owner on Windows OS:

  1. Log in as the Windows OS as administrator.
  2. Stop services for all repositories and connection brokers.
  3. Stop all Content Servers on the host.
  4. Stop all connection brokers on the host.
  5. Set the value for the new installation owner in the install_owner parameter in the server.ini file located at %DOCUMENTUM%\dba\config\repository_name\server.ini.
  6. Change the permissions in the data, dba, product, and share subdirectories of the DOCUMENTUM installation root directory:
  7. In Windows Explorer, select the directory.
  8. Right‑click the directory to display a menu and select Properties from the menu.
  9. Select the Security tab on the Properties dialog box.
  10. Click Add to add the new installation owner to the list of those with permissions on the directory. You are prompted for the new owner’s domain.
  11. Give the new owner Full Control permission.
  12. Check Replace Permissions on Subdirectories and Replace Permissions on Existing Files.
  13. Delete the old installation owner from the list of those with access permission on the directory.
  14. Click OK.
  15. Edit the Registry to reflect the change in ownership:
  16. In the following key: HKEY_LOCAL_MACHINE\SOFTWARE\Documentum\Server\version_No  Change the value of DM_OLDADMIN_USER to the new owner.
  • If the new owner is in a different domain, change the value ofDM_DMADMIN_DOMAIN to the domain of the new owner.
  •  In the following key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DmServerdocbasename, change the   install_owner parameter in the value for Imagepath to the new owner.

17. For each repository in the installation, use regedt32 to change the security permission on the following Registry keys:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Doumentum\Server\version_No.
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\Documentum
  • HKEY_LOCAL_MACHINE\SOFTWARE\Doumentum\Docbases\docbase_name
  1. Select the key and right‑click it to display a menu.
  2. Select Security > Permissions.
  3. Add the new installation owner with Full Control.
  4. Delete the old installation owner.
  5. For each Content Server, set the appropriate startup information:
  6. Select Control Panel > Services.
  7. Select the Service: Documentum Docbase docbase_name.
  8. In the Startup dialog box, type the new owner and owner’s password under — Log On as: this account.
  9. Move the Documentum and Documentum docbase docbase_name in the Start menu from Windows\Profiles\old_owner\Start Menu\Programs\ –>>to->> Windows\profiles\new_owner\Start Menu\Programs
  10. Update the r_install_owner and r_install_domain parameters in the server_config object to reflect the new installation owner.

We can verify/update by running following SQL statement(s).

SELECT * FROM dm_server_config_s ;

UPDATE dm_server_config_s SET r_install_owner = ‘………’;

11. Restart Windows Server.

In addition to the above steps – you will have to execute following queries to update the installation owner name with new installation owner.

1) Just to be safer, get the counts of objects that uses our  old user account
===============================================================
select count(*) from dm_sysobject_s where acl_domain = ‘oldAdmin’;

select count(*) from dm_sysobject_s where r_lock_owner = ‘oldAdmin’;

select count(*) from dm_sysobject_s where owner_name = ‘oldAdmin’;

select count(*) from dm_sysobject_s where r_creator_name = ‘oldAdmin’;

select count(*) from dm_sysobject_s where r_modifier = ‘oldAdmin’;

select count(*) from dmi_queue_item_s where sent_by = ‘oldAdmin’;

select count(*) from dmi_queue_item_s  where name = ‘oldAdmin’;

select count(*) from dmi_queue_item_s  where supervisor_name = ‘oldAdmin’;

select count(*) from dmi_queue_item_s where sign_off_user= ‘oldAdmin’;

select count(*) from dmi_queue_item_s  where dequeued_by= ‘oldAdmin’;

select count(*) from dm_router_s  where supervisor_name= ‘oldAdmin’;

select count(*) from dm_router_r  where task_owner = ‘oldAdmin’;

select count(*) from dm_router_r where r_sign_off_user= ‘oldAdmin’;

select count(*) from dm_acl_s where owner_name= ‘oldAdmin’;

select count(*) from dm_acl_r  where r_accessor_name = ‘oldAdmin’;

select count(*) from dm_group_r  where users_names = ‘oldAdmin’;

select count(*) from dm_group_r  where i_all_users_names = ‘oldAdmin’;

select count(*) from dm_group_s  where owner_name = ‘oldAdmin’;

select count(*) from dmi_registry_s  where user_name = ‘oldAdmin’;

select count(*) from dm_registered_s where table_owner = ‘oldAdmin’;

select count(*) from dmi_type_info_s  where acl_domain = ‘oldAdmin’;

select count(*) from dm_activity_r  where performer_name = ‘oldAdmin’;

select count(*) from dm_workflow_s  where r_creator_name = ‘oldAdmin’;

select count(*) from  dm_workflow_s  where supervisor_name = ‘oldAdmin’;

select count(*) from  dm_workflow_r  where r_last_performer = ‘oldAdmin’;

select count(*) from  dmi_workitem_s  where r_performer_name = ‘oldAdmin’;

select count(*) from dmi_workitem_r  where r_ext_performer = ‘oldAdmin’;

select count(*) from dm_type_s  where owner = ‘oldAdmin’;

select count(*) from dm_alias_set_s where owner_name = ‘oldAdmin’;
2)execute the following statements update user from old user to new user
update dm_sysobject_s set acl_domain = ‘newAdmin’ where acl_domain = ‘oldAdmin’;

update dm_sysobject_s set r_lock_owner = ‘newAdmin’ where r_lock_owner = ‘oldAdmin’;

update dm_sysobject_s set owner_name = ‘newAdmin’ where owner_name = ‘oldAdmin’;

update dm_sysobject_s set r_creator_name = ‘newAdmin’ where r_creator_name = ‘oldAdmin’;

update dm_sysobject_s set r_modifier = ‘newAdmin’ where r_modifier = ‘oldAdmin’;

update dmi_queue_item_s set sent_by = ‘newAdmin’ where sent_by = ‘oldAdmin’;

update dmi_queue_item_s set name = ‘newAdmin’ where name = ‘oldAdmin’;

update dmi_queue_item_s set supervisor_name = ‘newAdmin’ where supervisor_name = ‘oldAdmin’;

update dmi_queue_item_s set dequeued_by = ‘newAdmin’ where dequeued_by= ‘oldAdmin’;

update dm_router_s set supervisor_name = ‘newAdmin’ where supervisor_name= ‘oldAdmin’;

update dm_router_r set task_owner= ‘newAdmin’ where task_owner = ‘oldAdmin’;

update dm_router_r set r_sign_off_user = ‘newAdmin’ where r_sign_off_user= ‘oldAdmin’;

update dm_acl_s set owner_name = ‘newAdmin’ where owner_name= ‘oldAdmin’;

update dm_group_r set users_names = ‘newAdmin’ where users_names = ‘oldAdmin’;

update dm_group_s set owner_name = ‘newAdmin’ where owner_name = ‘oldAdmin’;

update dmi_registry_s set user_name = ‘newAdmin’ where user_name = ‘oldAdmin’;

update dm_activity_r set performer_name = ‘oldAdmintage’ where performer_name = ‘oldAdmin’;

update dm_workflow_s set r_creator_name = ‘newAdmin’ where r_creator_name = ‘oldAdmin’;

update dm_workflow_s set supervisor_name = ‘newAdmin’ where supervisor_name = ‘oldAdmin’;

update dm_workflow_r set r_last_performer = ‘newAdmin’ where r_last_performer = ‘oldAdmin’;

update dmi_workitem_s set r_performer_name = ‘newAdmin’ where r_performer_name = ‘oldAdmin’;

Update dm_type_s set owner = ‘newAdmin’ where owner = ‘oldAdmin’;

update dm_alias_set_s set owner_name = ‘newAdmin’ where owner_name = ‘oldAdmin’;

===============================================================
select count(*) from dm_sysobject_s where acl_domain = ‘oldAdmin’;

select count(*) from dm_sysobject_s where r_lock_owner = ‘oldAdmin’;

select count(*) from dm_sysobject_s where owner_name = ‘oldAdmin’;

select count(*) from dm_sysobject_s where r_creator_name = ‘oldAdmin’;

select count(*) from dm_sysobject_s where r_modifier = ‘oldAdmin’;

select count(*) from dmi_queue_item_s where sent_by = ‘oldAdmin’;

select count(*) from dmi_queue_item_s  where name = ‘oldAdmin’;

select count(*) from dmi_queue_item_s  where supervisor_name = ‘oldAdmin’;

select count(*) from dmi_queue_item_s where sign_off_user= ‘oldAdmin’;

select count(*) from dmi_queue_item_s  where dequeued_by= ‘oldAdmin’;

select count(*) from dm_router_s  where supervisor_name= ‘oldAdmin’;

select count(*) from dm_router_r  where task_owner = ‘oldAdmin’;

select count(*) from dm_router_r where r_sign_off_user= ‘oldAdmin’;

select count(*) from dm_acl_s where owner_name= ‘oldAdmin’;

select count(*) from dm_acl_r  where r_accessor_name = ‘oldAdmin’;

select count(*) from dm_group_r  where users_names = ‘oldAdmin’;

select count(*) from dm_group_r  where i_all_users_names = ‘oldAdmin’;

select count(*) from dm_group_s  where owner_name = ‘oldAdmin’;

select count(*) from dmi_registry_s  where user_name = ‘oldAdmin’;

select count(*) from dm_registered_s where table_owner = ‘oldAdmin’;

select count(*) from dmi_type_info_s  where acl_domain = ‘oldAdmin’;

select count(*) from dm_activity_r  where performer_name = ‘oldAdmin’;

select count(*) from dm_workflow_s  where r_creator_name = ‘oldAdmin’;

select count(*) from  dm_workflow_s  where supervisor_name = ‘oldAdmin’;

select count(*) from  dm_workflow_r  where r_last_performer = ‘oldAdmin’;

select count(*) from  dmi_workitem_s  where r_performer_name = ‘oldAdmin’;

select count(*) from dmi_workitem_r  where r_ext_performer = ‘oldAdmin’;

select count(*) from dm_type_s  where owner = ‘oldAdmin’;

select count(*) from dm_alias_set_s where owner_name = ‘oldAdmin’;
3) reset view
sqlplus>update dm_type_s set views_valid=0;
SQLPLUS>commit;

=========================================================================

I will try to add steps specific to Linux OS.