I was recently doing some consulting on some ODA at one of our customers, and I faced an issue with the DCS Agent and the MySQL Metadata Store. In this blog, I will show you the problem and how I could resolved it.
Problem description
On an Oracle Database Appliance, the DCS agent is the software providing the full automation to manage the appliance. It will have no impact on the well working of the databases but is mandatory to manage the appliance (patching, create dbhome, create database and any appliance resources). The DCS agent will perform various operations on the appliance, such as provisioning, database lifecycle management, backup and recovery, and storage management. The DCS Agent will use a MySQL database to store the metadata. In order for the DCS Agent to work, the MySQL database needs to be up and running.
On the node 0 of an ODA X9-2-HA, where I was preparing the next database patching operation, I wanted to run some cleanup.
[root@ODA-HA_node0 ~]# odacli cleanup-patchrepo -comp DB,GI -v 19.20.0.0.0 DCS-10009:Failed to create new service job report.
For which I could get a DCS failure.
I checked the job and realised that an ODA cleaning job where still in running status for about 3 months…
[root@ODA-HA_node0 ~]# odacli list-jobs ID Description Created Status ---------------------------------------- --------------------------------------------------------------------------- ----------------------------------- ---------------- 80f2bfbc-a02e-47bb-b57c-754d3d6d3d3a Server Patching 2025-11-12 08:00:14 CET Success 2e36d676-f175-402d-a7e4-735b4eb965de Patch pre-checks for [STORAGE] 2025-11-12 08:58:19 CET Success ... c4611880-fdc8-44fd-90a5-c2dd27d12f7c Auto purge job data 2025-12-09 03:59:48 CET Success ed09f270-5eff-4141-9b7b-51a2e5d30e32 Auto purge job data 2025-12-10 03:59:50 CET Success aecd8ca5-44fb-4e2c-af2b-0e42e954381a Auto purge job data 2025-12-11 03:59:52 CET Running [root@ODA-HA_node0 ~]#
Troubleshooting
I restarted the DCS agent.
[root@ODA-HA_node0 ~]# systemctl stop initdcsagent
[root@ODA-HA_node0 ~]# systemctl start initdcsagent
[root@ODA-HA_node0 ~]# systemctl status initdcsagent
● initdcsagent.service - Oracle dcs-agent startup
Loaded: loaded (/etc/systemd/system/initdcsagent.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2026-03-18 14:35:41 CET; 2s ago
Main PID: 92038 (sh)
Tasks: 96 (limit: 79998)
Memory: 331.7M
CGroup: /system.slice/initdcsagent.service
├─92038 /bin/sh -c . /opt/oracle/dcs/bin/setupJreAgent.sh;LD_LIBRARY_PATH=/opt/oracle/rhp/lib:$JRE_HOME/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib $JAVA -Xms128m -Xmx256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:+DisableExplicitGC -XX:ParallelGCThreads=4 -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:/opt/oracle/dcs/log/gc-dcs-agent-%t-%p.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFi>
└─92039 /opt/oracle/dcs/java/1.8.0_441/bin/java -Xms128m -Xmx256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:+DisableExplicitGC -XX:ParallelGCThreads=4 -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:/opt/oracle/dcs/log/gc-dcs-agent-%t-%p.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -Doracle.security.jps.config=/opt/oracle/dcs/agent/jps-config.xml -Dio.nett>
Mar 18 14:35:41 ODA-HA_node0 systemd[1]: Started Oracle dcs-agent startup.
[root@ODA-HA_node0 ~]# odacli list-jobs | tail -n3
Which did not help. In the DCS Agent log I could find some errors with HAMI. Oracle HAMI is the Oracle High Availability Metadata Infrastructure service providing distributed services required by DCS including locking and synchronizing configuration details in the cluster.
[root@ODA-HA_node0 log]# view dcs-agent-infra.log
...
...
...
2026-03-18 14:59:37,776 DEBUG [DcsInfraProvisioningThread] [] c.o.d.i.h.c.CommandExecutor: Going to execute command '/opt/oracle/dcs/hami/bin/hamictl.sh ssh-equiv --ensemble ODA_DCS --hosts ODA-HA_node0-priv,ODA-HA_node1-priv --json'
2026-03-18 14:59:38,014 DEBUG [DcsInfraProvisioningThread] [] c.o.d.i.h.c.CommandExecutor: Got result from execution of '/opt/oracle/dcs/hami/bin/hamictl.sh ssh-equiv --ensemble ODA_DCS --hosts ODA-HA_node0-priv,ODA-HA_node1-priv --json':
- RC: 1
- OUTPUT: /opt/oracle/dcs/oda-python3/lib/python3.12/getpass.py:91: GetPassWarning: Can not control echo on the terminal.
Warning: Password input may be echoed.
hamictl_oda_dcs's password: *********
{"operation": "ssh-equiv", "result": "FAILED", "message": "Invalid password"}
2026-03-18 14:59:38,015 ERROR [DcsInfraProvisioningThread] [] c.o.d.a.i.DcsInfraProvisioningThread: Could not provision DCS infrastructure
com.oracle.dcs.infra.hams.ctl.HamiCtl$HamiCtlException: Invalid password
I decided to restart MySQL service.
[root@ODA-HA_node0 ~]# systemctl stop oda-mysql [root@ODA-HA_node0 ~]# systemctl start oda-mysql Job for oda-mysql.service failed because the control process exited with error code. See "systemctl status oda-mysql.service" and "journalctl -xe" for details.
Which failed…
Checking the logs:
[root@ODA-HA_node0 ~]# journalctl -xe ... -- Unit oda-mysql.service has begun starting up. Mar 31 09:23:10 ODA-HA_node0 systemd[90052]: oda-mysql.service: Failed to execute command: Permission denied Mar 31 09:23:10 ODA-HA_node0 systemd[90052]: oda-mysql.service: Failed at step EXEC spawning /opt/oracle/dcs/mysql/bin/mysqld: Permission denied
I could see that it was complaining about permissions.
I checked the permissions on the MySQL binary:
[root@ODA-HA_node0 ~]# ls -ltrh /opt/oracle/dcs/mysql/bin/mysqld -rwxr-x--- 1 odamysql odamysql 338M Mar 26 16:55 /opt/oracle/dcs/mysql/bin/mysqld [root@ODA-HA_node0 ~]#
And that one was ok. The linux user starting MySQL, odamysql, was having the right permissions.
I then checked all permissions including the directories:
[root@ODA-HA_node0 log]# ls -ld /opt /opt/oracle /opt/oracle/dcs /opt/oracle/dcs/mysql /opt/oracle/dcs/mysql/bin drwxrwx--- 11 root oinstall 4096 Nov 21 13:58 /opt drwxr-xr-x. 9 root root 4096 Nov 14 16:31 /opt/oracle drwxr-xr-x. 30 root root 4096 Nov 14 12:40 /opt/oracle/dcs drwxr-xr-x. 13 root root 4096 Nov 14 09:10 /opt/oracle/dcs/mysql drwxr-x---. 2 odamysql odamysql 4096 Mar 26 16:55 /opt/oracle/dcs/mysql/bin [root@ODA-HA_node0 log]#
And I could see that there were wrong on the /opt directory… The odamysql directory is not able to enter and read in the /opt directory, as it does not belong to the group and there is no permissions on the other users…
I checked on a valid ODA and as expected the permissions should be:
drwxr-xr-x. 11 root root 4096 Mar 18 10:02 /opt
So this is mainly due to an human mistake…
Resolution
I first checked and could confirm the issue only affect the /opt directory itself.
[root@ODA-HA_node0 opt]# pwd /opt [root@ODA-HA_node0 opt]# ls -ltrh total 48K drwxr-xr-x. 3 root root 4.0K Sep 17 2024 lsi drwxr-xr-x 2 root root 4.0K Jan 15 2025 oracle.ahf drwx------. 2 root root 16K Nov 11 15:42 lost+found drwxr-xr-x. 4 root root 4.0K Nov 11 16:32 MegaRAID drwxr-xr-x 3 root root 4.0K Nov 12 10:20 ORCLfmap drwxr-xr-x 5 root root 4.0K Nov 12 13:36 odabr drwxr-xr-x. 9 root root 4.0K Nov 14 16:31 oracle drwxrwx--- 16 root oinstall 4.0K Feb 16 11:19 commvault drwx------ 11 root root 4.0K Mar 30 02:08 splunkforwarder [root@ODA-HA_node0 opt]#
I change the permissions for other users.
[root@ODA-HA_node0 /]# chmod o+rx /opt [root@ODA-HA_node0 /]# ls -ld /opt /opt/oracle /opt/oracle/dcs /opt/oracle/dcs/mysql /opt/oracle/dcs/mysql/bin drwxrwxr-x 11 root oinstall 4096 Nov 21 13:58 /opt drwxr-xr-x. 9 root root 4096 Nov 14 16:31 /opt/oracle drwxr-xr-x. 30 root root 4096 Nov 14 12:40 /opt/oracle/dcs drwxr-xr-x. 13 root root 4096 Nov 14 09:10 /opt/oracle/dcs/mysql drwxr-x---. 2 odamysql odamysql 4096 Mar 26 16:55 /opt/oracle/dcs/mysql/bin [root@ODA-HA_node0 /]#
And I could successfully start the MySQL service.
[root@ODA-HA_node0 /]# systemctl start oda-mysql
[root@ODA-HA_node0 /]# systemctl status oda-mysql
● oda-mysql.service - MySQL Server for ODA
Loaded: loaded (/etc/systemd/system/oda-mysql.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2026-03-31 09:55:48 CEST; 6s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Main PID: 55837 (mysqld)
Status: "Server is operational"
Tasks: 33 (limit: 79998)
Memory: 423.5M
CGroup: /system.slice/oda-mysql.service
└─55837 /opt/oracle/dcs/mysql/bin/mysqld --defaults-file=/opt/oracle/dcs/mysql/etc/mysqldb.cnf --skip-mysqlx
Mar 31 09:55:48 ODA-HA_node0 systemd[1]: Starting MySQL Server for ODA...
Mar 31 09:55:48 ODA-HA_node0 systemd[1]: Started MySQL Server for ODA.
[root@ODA-HA_node0 /]#
And I could successfully start the DCS Agent.
[root@ODA-HA_node0 /]# systemctl status initdcsagent
● initdcsagent.service - Oracle dcs-agent startup
Loaded: loaded (/etc/systemd/system/initdcsagent.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Wed 2026-03-18 15:22:48 CET; 1 weeks 5 days ago
Main PID: 84546 (code=killed, signal=TERM)
Mar 19 16:18:04 ODA-HA_node0 systemd[1]: Dependency failed for Oracle dcs-agent startup.
Mar 19 16:18:04 ODA-HA_node0 systemd[1]: initdcsagent.service: Job initdcsagent.service/start failed with result 'dependency'.
Mar 24 13:38:38 ODA-HA_node0 systemd[1]: Dependency failed for Oracle dcs-agent startup.
Mar 24 13:38:38 ODA-HA_node0 systemd[1]: initdcsagent.service: Job initdcsagent.service/start failed with result 'dependency'.
Mar 25 09:46:35 ODA-HA_node0 systemd[1]: Dependency failed for Oracle dcs-agent startup.
Mar 25 09:46:35 ODA-HA_node0 systemd[1]: initdcsagent.service: Job initdcsagent.service/start failed with result 'dependency'.
Mar 26 11:06:50 ODA-HA_node0 systemd[1]: Dependency failed for Oracle dcs-agent startup.
Mar 26 11:06:50 ODA-HA_node0 systemd[1]: initdcsagent.service: Job initdcsagent.service/start failed with result 'dependency'.
Mar 30 16:07:15 ODA-HA_node0 systemd[1]: Dependency failed for Oracle dcs-agent startup.
Mar 30 16:07:15 ODA-HA_node0 systemd[1]: initdcsagent.service: Job initdcsagent.service/start failed with result 'dependency'.
[root@ODA-HA_node0 /]# systemctl start initdcsagent
[root@ODA-HA_node0 /]# systemctl status initdcsagent
● initdcsagent.service - Oracle dcs-agent startup
Loaded: loaded (/etc/systemd/system/initdcsagent.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2026-03-31 09:57:34 CEST; 1s ago
Main PID: 59253 (sh)
Tasks: 96 (limit: 79998)
Memory: 270.0M
CGroup: /system.slice/initdcsagent.service
├─59253 /bin/sh -c . /opt/oracle/dcs/bin/setupJreAgent.sh;LD_LIBRARY_PATH=/opt/oracle/rhp/lib:$JRE_HOME/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib $JAVA -Xms128m -Xmx256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:+DisableExplicitGC -XX:ParallelGCThreads=4 -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:/opt/oracle/dcs/log/gc-dcs-agent-%t-%p.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFi>
└─59254 /opt/oracle/dcs/java/1.8.0_441/bin/java -Xms128m -Xmx256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:+DisableExplicitGC -XX:ParallelGCThreads=4 -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:/opt/oracle/dcs/log/gc-dcs-agent-%t-%p.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -Doracle.security.jps.config=/opt/oracle/dcs/agent/jps-config.xml -Dio.nett>
Mar 31 09:57:34 ODA-HA_node0 systemd[1]: Started Oracle dcs-agent startup.
[root@ODA-HA_node0 /]#
And I could successfully run the cleanup:
[root@ODA-HA_node0 ~]# odacli cleanup-patchrepo -comp DB,GI -v 19.20.0.0.0
{
"jobId" : "08b395be-ae5a-4d6f-8e5d-1c0fa232f672",
"status" : "Created",
"message" : "",
"reports" : [ ],
"createTimestamp" : "March 31, 2026 11:21:58 CEST",
"resourceList" : [ ],
"description" : "Cleanup patchrepos",
"updatedTime" : "March 31, 2026 11:21:58 CEST",
"jobType" : null,
"cpsMetadata" : null
}
[root@ODA-HA_node0 ~]# odacli describe-job -i 08b395be-ae5a-4d6f-8e5d-1c0fa232f672
Job details
----------------------------------------------------------------
ID: 08b395be-ae5a-4d6f-8e5d-1c0fa232f672
Description: Cleanup patchrepos
Status: Success
Created: March 31, 2026 11:21:58 CEST
Message:
Task Name Node Name Start Time End Time Status
---------------------------------------- ------------------------- ---------------------------------------- ---------------------------------------- ----------------
Cleanup Repository ODA-HA_node1 March 31, 2026 11:21:58 CEST March 31, 2026 11:21:59 CEST Success
Cleanup old ASR rpm ODA-HA_node0 March 31, 2026 11:21:59 CEST March 31, 2026 11:21:59 CEST Success
[root@ODA-HA_node0 ~]#
Finally, I have also changed the group for /opt accordingly to root group.
[root@ODA-HA_node0 /]# chgrp root /opt [root@ODA-HA_node0 /]# ls -ld /opt /opt/oracle /opt/oracle/dcs /opt/oracle/dcs/mysql /opt/oracle/dcs/mysql/bin drwxrwxr-x 11 root root 4096 Nov 21 13:58 /opt drwxr-xr-x. 9 root root 4096 Nov 14 16:31 /opt/oracle drwxr-xr-x. 30 root root 4096 Nov 14 12:40 /opt/oracle/dcs drwxr-xr-x. 13 root root 4096 Nov 14 09:10 /opt/oracle/dcs/mysql drwxr-x---. 2 odamysql odamysql 4096 Mar 26 16:55 /opt/oracle/dcs/mysql/bin [root@ODA-HA_node0 /]#
To wrap up…
DCS Agent and MySQL database will have no effect on the well working of your databases, but if they are not working you are not able to manage your appliance any more. Here, wrong permissions (for sure a human mistake) had sad effects on appliance software. Solving the permissions issue resolved my problem.