This blog is the first one of a series that I will publish in the next few days/weeks regarding how to change a Docbase ID, Docbase name, aso in Documentum CS.
So, let’s dig in with the first one: Docbase ID. I did it on Documentum CS 16.4 with Oracle database on a freshly installed docbase.
We will be interested by the docbase repo1, to change the docbase ID from 101066 (18aca) to 101077 (18ad5).
1. Migration tool overview and preparation
The tool we will use here is MigrationUtil, and the concerned folder is:
[dmadmin@vmtestdctm01 ~]$ ls -rtl $DM_HOME/install/external_apps/MigrationUtil total 108 -rwxr-xr-x 1 dmadmin dmadmin 99513 Oct 28 23:55 MigrationUtil.jar -rwxr-xr-x 1 dmadmin dmadmin 156 Jan 19 11:09 MigrationUtil.sh -rwxr-xr-x 1 dmadmin dmadmin 2033 Jan 19 11:15 config.xml
The default content of MigrationUtil.sh:
[dmadmin@vmtestdctm01 ~]$ cat $DM_HOME/install/external_apps/MigrationUtil/MigrationUtil.sh #!/bin/sh CLASSPATH=${CLASSPATH}:MigrationUtil.jar export CLASSPATH java -cp "${CLASSPATH}" MigrationUtil
Update it if you need to overload the CLASSPATH only during migration. It was my case, I had to add the oracle driver path to the $CLASSPATH, because I received the below error:
... ERROR...oracle.jdbc.driver.OracleDriver ERROR...Database connection failed. Skipping changes for docbase: repo1
To make the blog more readable, I will not show you all the contents of config.xml, below is the updated version to change the Docbase ID:
... <properties> <comment>Database connection details</comment> <entry key="dbms">oracle</entry> <!-- This would be either sqlserver, oracle, db2 or postgres --> <entry key="tgt_database_server">vmtestdctm01</entry> <!-- Database Server host or IP --> <entry key="port_number">1521</entry> <!-- Database port number --> <entry key="InstallOwnerPassword">install164</entry> <entry key="isRCS">no</entry> <!-- set it to yes, when running the utility on secondary CS --> <!-- <comment>List of docbases in the machine</comment> --> <entry key="DocbaseName.1">repo1</entry> <!-- <comment>docbase owner password</comment> --> <entry key="DocbasePassword.1">install164</entry> <entry key="ChangeDocbaseID">yes</entry> <!-- To change docbase ID or not --> <entry key="Docbase_name">repo1</entry> <!-- has to match with DocbaseName.1 --> <entry key="NewDocbaseID">101077</entry> <!-- New docbase ID --> ...
Put all other entry to no.
The tool will use above information, and load more from the server.ini file.
Before you start the migration script, you have to adapt the maximum open cursors in the database. In my case, with a freshly installed docbase, I had to set open_cursors value to 1000 (instead of 300):
alter system set open_cursors = 1000
See with your DB Administrator before any change.
Otherwise, I got below error:
... Changing Docbase ID... Database owner password is read from config.xml java.sql.SQLException: ORA-01000: maximum open cursors exceeded at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399) at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:225) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:53) at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:943) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1150) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4798) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:4875) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1361) at SQLUtilHelper.setSQL(SQLUtilHelper.java:129) at SQLUtilHelper.processColumns(SQLUtilHelper.java:543) at SQLUtilHelper.processTables(SQLUtilHelper.java:478) at SQLUtilHelper.updateDocbaseId(SQLUtilHelper.java:333) at DocbaseIDUtil.(DocbaseIDUtil.java:61) at MigrationUtil.main(MigrationUtil.java:25) ...
2. Before the migration (optional)
Get docbase map from the docbroker:
[dmadmin@vmtestdctm01 ~]$ dmqdocbroker -t vmtestdctm01 -c getdocbasemap dmqdocbroker: A DocBroker Query Tool dmqdocbroker: Documentum Client Library Version: 16.4.0000.0185 Targeting port 1489 ************************************************** ** D O C B R O K E R I N F O ** ************************************************** Docbroker host : vmtestdctm01 Docbroker port : 1490 Docbroker network address : INET_ADDR: 02 5d2 c0a87a01 vmtestdctm01 192.168.122.1 Docbroker version : 16.4.0000.0248 Linux64 ************************************************** ** D O C B A S E I N F O ** ************************************************** -------------------------------------------- Docbase name : repo1 Docbase id : 101066 Docbase description : repo1 repository ...
Create a document in the docbase
Create an empty file
touch /home/dmadmin/DCTMChangeDocbaseExample.docx
Create document in the repository using idql
create dm_document object SET title = 'DCTM Change Docbase Document Example', SET subject = 'DCTM Change Docbase Document Example', set object_name = 'DCTMChangeDocbaseExample.docx', SETFILE '/home/dmadmin/DCTMChangeDocbaseExample.docx' with CONTENT_FORMAT= 'msw12';
Result:
object_created ---------------- 09018aca8000111b (1 row affected)
note the r_object_id
3. Execute the migration
Before you execute the migration you have to stop the docbase and the docbroker.
$DOCUMENTUM/dba/dm_shutdown_repo1 $DOCUMENTUM/dba/dm_stop_DocBroker
Now, you can execute the migration script:
[dmadmin@vmtestdctm01 ~]$ $DM_HOME/install/external_apps/MigrationUtil/MigrationUtil.sh Welcome... Migration Utility invoked. Created log File: /app/dctm/product/16.4/product/16.4/install/external_apps/MigrationUtil/MigrationUtilLogs/DocbaseIdChange.log Changing Docbase ID... Database owner password is read from config.xml Finished changing Docbase ID... Skipping Host Name Change... Skipping Install Owner Change... Skipping Server Name Change... Skipping Docbase Name Change... Skipping Docker Seamless Upgrade scenario... Migration Utility completed.
No Error, sounds good All changes have been recorded in the log file:
[dmadmin@vmtestdctm01 ~]$ cat /app/dctm/product/16.4/product/16.4/install/external_apps/MigrationUtil/MigrationUtilLogs/DocbaseIdChange.log Reading config.xml from path: config.xmlReading server.ini parameters Retrieving server.ini path for docbase: repo1 Found path: /app/dctm/product/16.4/dba/config/repo1/server.ini Set the following properties: Docbase Name:repo1 Docbase ID:101066 New Docbase ID:101077 DBMS: oracle DatabaseName: DCTMDB SchemaOwner: repo1 ServerName: vmtestdctm01 PortNumber: 1521 DatabaseOwner: repo1 -------- Oracle JDBC Connection Testing ------ jdbc:oracle:thin:@vmtestdctm01:1521:DCTMDB Connected to database Utility is going to modify Objects with new docbase ID Sun Jan 27 19:08:58 CET 2019 ----------------------------------------------------------- Processing tables containing r_object_id column ----------------------------------------------------------- -------- Oracle JDBC Connection Testing ------ jdbc:oracle:thin:@vmtestdctm01:1521:DCTMDB Connected to database ... ... ----------------------------------------------------------- Update the object IDs of the Table: DMC_ACT_GROUP_INSTANCE_R with new docbase ID:18ad5 ----------------------------------------------------------- Processing objectID columns ----------------------------------------------------------- Getting all ID columns from database ----------------------------------------------------------- Processing ID columns in each documentum table Column Name: R_OBJECT_ID Update the ObjectId columns of the Table: with new docbase ID Processing ID columns in each documentum table Column Name: R_OBJECT_ID Update the ObjectId columns of the Table: with new docbase ID ... ... ----------------------------------------------------------- Update the object IDs of the Table: DM_XML_ZONE_S with new docbase ID:18ad5 ----------------------------------------------------------- Processing objectID columns ----------------------------------------------------------- Getting all ID columns from database ----------------------------------------------------------- Processing ID columns in each documentum table Column Name: R_OBJECT_ID Update the ObjectId columns of the Table: with new docbase ID ----------------------------------------------------------- Updating r_docbase_id of dm_docbase_config_s and dm_docbaseid_map_s... update dm_docbase_config_s set r_docbase_id = 101077 where r_docbase_id = 101066 update dm_docbaseid_map_s set r_docbase_id = 101077 where r_docbase_id = 101066 Finished updating database values... ----------------------------------------------------------- ----------------------------------------------------------- Updating the new DocbaseID value in dmi_vstamp_s table ... ... Updating Data folder... select file_system_path from dm_location_s where r_object_id in (select r_object_id from dm_sysobject_s where r_object_type = 'dm_location' and object_name in (select root from dm_filestore_s)) Renamed '/app/dctm/product/16.4/data/repo1/replica_content_storage_01/00018aca' to '/app/dctm/product/16.4/data/repo1/replica_content_storage_01/00018ad5 Renamed '/app/dctm/product/16.4/data/repo1/replicate_temp_store/00018aca' to '/app/dctm/product/16.4/data/repo1/replicate_temp_store/00018ad5 Renamed '/app/dctm/product/16.4/data/repo1/streaming_storage_01/00018aca' to '/app/dctm/product/16.4/data/repo1/streaming_storage_01/00018ad5 Renamed '/app/dctm/product/16.4/data/repo1/content_storage_01/00018aca' to '/app/dctm/product/16.4/data/repo1/content_storage_01/00018ad5 Renamed '/app/dctm/product/16.4/data/repo1/thumbnail_storage_01/00018aca' to '/app/dctm/product/16.4/data/repo1/thumbnail_storage_01/00018ad5 select file_system_path from dm_location_s where r_object_id in (select r_object_id from dm_sysobject_s where r_object_type = 'dm_location' and object_name in (select log_location from dm_server_config_s)) Renamed '/app/dctm/product/16.4/dba/log/00018aca' to '/app/dctm/product/16.4/dba/log/00018ad5 select r_object_id from dm_ldap_config_s Finished updating folders... ----------------------------------------------------------- ----------------------------------------------------------- Updating the server.ini with new docbase ID ----------------------------------------------------------- Retrieving server.ini path for docbase: repo1 Found path: /app/dctm/product/16.4/dba/config/repo1/server.ini Backed up '/app/dctm/product/16.4/dba/config/repo1/server.ini' to '/app/dctm/product/16.4/dba/config/repo1/server.ini_docbaseid_backup' Updated server.ini file:/app/dctm/product/16.4/dba/config/repo1/server.ini Docbase ID Migration Utility completed!!! Sun Jan 27 19:09:52 CET 2019
Start the Docbroker and the Docbase:
$DOCUMENTUM/dba/dm_launch_DocBroker $DOCUMENTUM/dba/dm_start_repo1
4. After the migration (optional)
Get docbase map from the docbroker:
[dmadmin@vmtestdctm01 ~]$ dmqdocbroker -t vmtestdctm01 -c getdocbasemap dmqdocbroker: A DocBroker Query Tool dmqdocbroker: Documentum Client Library Version: 16.4.0000.0185 Targeting port 1489 ************************************************** ** D O C B R O K E R I N F O ** ************************************************** Docbroker host : vmtestdctm01 Docbroker port : 1490 Docbroker network address : INET_ADDR: 02 5d2 c0a87a01 vmtestdctm01 192.168.122.1 Docbroker version : 16.4.0000.0248 Linux64 ************************************************** ** D O C B A S E I N F O ** ************************************************** -------------------------------------------- Docbase name : repo1 Docbase id : 101077 Docbase description : repo1 repository ...
Check the document created before the migration:
Adapt the r_object_id with the new docbase id : 09018ad58000111b
API> dump,c,09018ad58000111b ... USER ATTRIBUTES object_name : DCTMChangeDocbaseExample.docx title : DCTM Change Docbase Document Example subject : DCTM Change Docbase Document Example ... r_object_id : 09018ad58000111b ... i_folder_id [0]: 0c018ad580000105 i_contents_id : 06018ad58000050c i_cabinet_id : 0c018ad580000105 i_antecedent_id : 0000000000000000 i_chronicle_id : 09018ad58000111b
5. Conclusion
After a lot of tests on my VMs, I can say that changing docbase id is reliable on a freshly installed docbase. On the other hand, each time I tried it on a “used” Docbase, I got errors like:
Changing Docbase ID... Database owner password is read from config.xml java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (GREPO5.D_1F00272480000139) violated at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399) at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:225) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:53) at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:943) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1150) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4798) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:4875) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1361) at SQLUtilHelper.setSQL(SQLUtilHelper.java:129) at SQLUtilHelper.processColumns(SQLUtilHelper.java:543) at SQLUtilHelper.processTables(SQLUtilHelper.java:478) at SQLUtilHelper.updateDocbaseId(SQLUtilHelper.java:333) at DocbaseIDUtil.(DocbaseIDUtil.java:61) at MigrationUtil.main(MigrationUtil.java:25)
I didn’t investigate enough on above error, it deserves more time but it wasn’t my priority. Anyway, the tool made a correct rollback.
Now, it is your turn to practice, don’t hesitate to comment this blog to share your own experience and opinion
In the next blog, I will try to change the docbase name.
Cet article Documentum – MigrationUtil – 1 – Change Docbase ID est apparu en premier sur Blog dbi services.