Change Manager
Your change process is probably mature. The gap is not in the process. It is between the output of the process and reality.
A ticket is raised, approval is obtained, an implementation window is agreed, the ticket is closed. The process runs properly.
When the ticket closes, the change is assumed to be applied. That assumption rests on the word of whoever applied it.
Nothing matches what the ticket says against what actually happened in the database. The two live in separate systems and do not know each other.
The ticket number stops being a field on a request and becomes a binding element of the record. If a ticket is required, no request opens without one; if a format is defined, a wrong format is not accepted.
What the change actually did is read from the parsed object list rather than from the script. That is where the ticket and reality are matched.
Open requests touching the same object become comparable. A collision becomes visible before it reaches production.