Wo liegt das Problem denn genau, in der Ermittlung der Unterschiede oder in der Aktualisierung der Datenbankmetadaten? Da sich die Unterschiede ja (wenn man von versehentlichen Änderungen in der Zieldatenbank einmal absieht) aus den Änderungen in der Masterdatenbank ergeben, sollte es möglich sein, auf den Vergleich zu verzichten und "nur" die notwendigen DDL Befehle (alter table ...) in einem Updatetool zu hinterlegen.
In der Praxis wird wahrscheinlich auch eine Datenbankversionsnummer in einer Tabelle abgelegt, die man vor dem Update prüft. Dann "weiss" das Programm, welche Differenzen bestehen und wendet die DDL Befehle an. Falls alles funktioniert hat, wird die Versionsnummer aktualisiert.
Die Herausforderungen stecken aber wie immer im Detail, zum Beispiel kann es sein dass die Änderungen per DDL ein COMMIT (der aktuellen Transaktion) erfordern. Und Fehlerbehandlung ist wie immer spannend, wenn ein DDL Befehl scheitert, hat man einen 'undefinierten' Zustand der Metadaten.
Happy Coding