Containern und auch Kubernetes sei dank, daß sich Oracle GoldenGate zum Datenaustausch für unterschiedliche Systeme schnell und bequem einrichten läßt. Seit etwa März 2025 gibt es das kostenlose GoldenGate Free auch für non-Oracle Datenbanken wie Postgres, mySQL und den Microsoft SQL Server. Sowohl als vorbereitete, gepatchte Container und als Anschauungsmaterial für eigene Zwecke auch als Kubernetes Installation, d.h. helm chart.

GoldenGate Free darf produktiv genutzt werden aber ist begrenzt auf Datenbank-Größen bis zu 20 GB. Durchaus typische Größen für viele Postgres, mySQL und Oracle 23ai free Umgebungen.
Eine Beschreibung der Free-Lizenz ist Teil der Oracle GoldenGate Dokumentation. Updates sind erhältlich in Form von neuen Containern auf container-registry.oracle.com.

GoldenGate free auf container-registry.oracle.com

Zahlreiche Youtube VideosBlogs und eine eigene Dokumentation bieten freien Support in gutem wenn auch nicht-interaktivem Umfang. Die Dokumentation zum Start und zur Nutzung der jeweiligen Container liegt ebenfalls auf container-registry.oracle.com vor und beschreibt auch weiterführende Themen wie SSL Verschlüsselung und Anbindung eventuell notwendiger Volumes zur Vorhaltung von Logs und den lebenswichtigen Trail-Dateien voller Change Log Informationen der angezapften Datenbanken.

GoldenGate studio freeZu den GoldenGate Free Container Images für den Datenaustausch und mit Browser Oberfläche für Monitoring, Administration und Konfiguration gesellt sich das GoldenGate Studio Free Container Image mit einer weiteren browser-basierten Oberfläche für die komfortable Einrichtung verschiedener Szenarios wie uni- und bidirektionalem Sync, Daten-Urladung, Daten-Mapping usw. durch sogenannte “Recipes”. Aber es geht auch um die Vorbereitung der Datenbanken für den Datenabgleich, z.B. dem Setzen notwendiger Datenbank Parameter. GoldenGate Studio free funktioniert aktuell ausschließlich mit Oracle Datenbanken.
Um einer eventuellen Verwirrung vorzubeugen eine kleine zusätzliche Information: Der ebenfalls noch auf container-registry.oracle.com liegende Container “Oracle GoldenGate free” ist eine etwas ältere Version (23.5 statt 23.7 oder neuer) von Oracle GoldenGate free für Oracle mit darin bereits enthaltenem GoldenGate Studio free.

Möchten Sie beispielsweise Daten zwischen einer Postgres- und einer mySQL Datenbank austauschen, so sollten Sie die Container von GoldenGate free für Postgres und von GoldenGate free für mySQL herunterladen und starten. Die Container tauschen, korrekt konfiguriert, untereinander über WebSocket Verbindungen (basierend auf dem HTTPS Protokoll) die gesammelten Datenbank Logs aus. Ein Container liest kontinuierlich aus der Quelldatenbank und einer schreibt in das Zielsystem. Sollte Ihr Vorhaben hingegen sein, zwei entfernt liegende Postgres Datenbanken zu synchronisieren, so können Sie entweder zweimal GoldenGate free für Postgres starten, einmal in der Nähe der Quelle und einmal beim Ziel, oder Sie verwenden nur einen einzigen Container der sich wie ein Kraken mit den beteiligten Postgres Datenbanken verbindet. Erstes Szenario wird von Oracle eine Mesh installation genannt, das zweite Szenario bildet einen Hub. Um das Gedankenspiel noch etwas weiter zu führen: laufen alle beteiligten Container auf demselben Server oder im gleichen Netz haben Sie vielleicht physisch einen Hub eingerichtet, logisch aber immer noch ein Mesh aus kommunizierenden Prozessen…

Mesh or Hub ?


Für die Einrichtung von GoldenGate (free und auch Vollversion) speziell unter Kubernetes gibt es sowohl Blog-Beschreibungen unseres Product Managements als auch YAML Dateien in einem github repository, beschrieben durch einen Artikel im Herbst 2024 in unseren Blogs. Seit kurzem wurden zu Testzwecken und für Ihre Referenz einige helm charts erstellt für die automatisierte Einrichtung unter Kubernetes. Diese liegen im Quellcode ebenfalls auf github.com, nur an anderer Stelle als die vorigen YAML Dateien. Und die helm charts sind verlinkt und auffindbar auf artifacthub.io, gewissermaßen gleich neben dem neuen Oracle Operator 1.2 for Kubernetes:

GoldenGate free auf artifacthub.io

Die hinterlegten helm charts sind auch geeignet, um die GoldenGate Vollversionen zu installieren. Allerdings müßten Sie ihre eigenen Container Images bauen und deren Download URL als Parameter für das helm chart hinterlegen.

Anstatt die Anleitungen und Anweisungen auf artifacthub.io zu befolgen können Sie die helm charts auch direkt per Kommandozeile in Ihrer Umgebung registrieren und installieren. Sie benötigen lediglich einen Zugang per kubectl Kommando zu Ihrem Kubernetes Cluster sowie das helm Tool. 
Das Repository registrieren Sie wie folgt:

$ helm repo add oggfree https://ilfur.github.io/VirtualAnalyticRooms
$ helm repo list
NAME            URL
bitnami         https://charts.bitnami.com/bitnami
ingress-nginx   https://kubernetes.github.io/ingress-nginx
oggfree         https://ilfur.github.io/VirtualAnalyticRooms
​​​

Dann schauen Sie sich gerne an, welche Installations-Routinen in dem Repository vorhanden sind. Es sind einige mehr als nur Oracle GoldenGate free. Sie alle dienen als Beispiel und können von Ihnen von github heruntergeladen und gerne weiter angepaßt werden.

​​​​​​$ helm search repo oggfree
NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
oggfree/analytics-server                1.0.0           6.4.0           Oracle Analytics Server
oggfree/cman                            1.0.5           23.5.0.0        Oracle Connection Manager
oggfree/goldengate-bigdata              2.0.0           23.4.0.0.0      Oracle GoldenGate Microservices for Distributed...
oggfree/goldengate-free                 2.0.0           23.5.0.24.07    Oracle GoldenGate Microservices FREE for Oracle...
oggfree/goldengate-mssql                2.0.0           23.4.0.0.0      Oracle GoldenGate Microservices for MSSQL Database
oggfree/goldengate-mysql                2.0.0           23.4.0.0.0      Oracle GoldenGate Microservices for MySQL Database
oggfree/goldengate-mysql-free           2.0.1           23.8.0.25.04    Oracle GoldenGate FREE for mysql
oggfree/goldengate-oracle               2.0.0           23.4.0.0.0      Oracle GoldenGate Microservices for Oracle Data...
oggfree/goldengate-oracle-free          2.0.1           23.8.0.25.04    Oracle GoldenGate Microservices FREE for Oracle...
oggfree/goldengate-postgres             2.0.0           23.4.0.0.0      Oracle GoldenGate Microservices for Postgres Da...
oggfree/goldengate-postgres-free        2.0.1           23.8.0.25.04    Oracle GoldenGate Microservices FREE for Postgres
oggfree/goldengate-sqlserver-free       2.0.1           23.8.0.25.04    Oracle GoldenGate FREE for sqlserver
oggfree/goldengate-studio-free          2.0.0           23.7.1.25.02    Oracle GoldenGate Studio FREE
oggfree/graph-server                    2.0.6           24.4.0.0.0      Oracle Graph & RDF Server with UI plus Jupyter ...
oggfree/jupyterhub                      1.3.8           1.5.0           JupyterHub brings the power of notebooks to gro...
oggfree/oml4py-notebook                 1.0.0           1.0             Oracle Machine Learning 4 Python Jupyter Notebook
oggfree/ords                            2.0.0           latest          Oracle APEX, Database Actions and numerous REST...
oggfree/sqlcl-liquibase                 1.0.0           21.3.0.0.0      Oracle sqlcl with liquibase integration
oggfree/stream-analytics                1.0.0           19.1.0.0.6.3    Oracle GoldenGate Stream Analytics

Um beispielsweise GoldenGate Studio free zu installieren, laden Sie sich zuerst die zur Installation gehörige Parameter Datei herunter (auch values genannt) und passen sie an Ihre Gegebenheiten an:

$ helm show values oggfree/goldengate-studio-free >studio.yaml

$ vi studio.yaml

### specify the name of an existing secret that contains the ogg admin username and password
ogg:
  adminSecret: ogg-admin-secret
  usernameKey: oggusername
  passwordKey: oggpassword
  ## the name of an OGG deployment, mostly "local", or ogg-east, ogg-west, ...
  deploymentName: local

## request sizes of some PVCs, beware that there can be many big trail files ...
storage:
  configSize: 1Gi
  logSize: 10Gi
  trailSize: 50Gi
  storageClass: rook-ceph-block

image:
  pullPolicy: IfNotPresent
  imageName: container-registry.oracle.com/goldengate/goldengate-studio-free:23.7.1.25.02

services:
  ### You can choose to create an istio virtualservice or an ingress in front
  ### with a virtual host name of ggate.<suffix>
  external:
    ### set type to either ingress , virtualservice or none if You need something customized
    type: ingress
    ### typical ingressClasses are nginx and istio
    ingressClass: nginx
    ### ignored if type is not virtualservice
    vserviceGateway: istio-system/http-istio-gateway
    vhostName: ggate.141.147.33.9.nip.io
  internal:
    type: ClusterIP
    port: 8080

Sie erkennen vielleicht anhand der vorgeschlagenen Parameter, dass vorab ein kubernetes Secret angelegt werden sollte, welches den Benutzernamen und das Kennwort des zukünftigen GoldenGate Admin-Users enthält. Diese beiden Angaben werden dann in den Container bei dessen erstem Start eingeflanscht. Das Secret sollte, aber muss nicht, den Namen ogg-admin-secret tragen. Und es sollte dann auch die Schlüssel oggusername und oggpassword beinhalten, mit entsprechenden Werten dahinter. Legen wir also für die Installation nun einen neuen Namespace an und legen das Secret sowie die restliche Installation darin ab:

$ kubectl create namespace oggfree
namespace/oggfree created

$ kubectl create secret generic ogg-admin-secret -n oggfree --from-literal=oggusername=oggadmin --from-literal=oggpassword=Welcome1234#
secret/ogg-admin-secret created

$ helm install ggstudio oggfree/goldengate-studio-free --values studio.yaml -n oggfree
NAME: ggstudio
LAST DEPLOYED: Wed May 14 11:54:06 2025
NAMESPACE: oggfree
STATUS: deployed
REVISION: 1
TEST SUITE: None

Nun prüfen wir am besten, ob Container, Storage und Netzwerk Konfiguration ordentlich vorhanden sind und die Logs im Container keine Fehler enthalten wie beispielsweise ein zu simples Passwort. In meiner Testumgebung habe ich als StorageClass Parameter die für die Oracle Cloud (OCI) typische oci-bv verwendet anstelle der vorgegebenen rook-ceph-block, außerdem habe ich mich zunächst für einen Ingress vom Typ none entschieden und den internal service type auf LoadBalancer gesetzt, um keine manuellen port forwards verwenden zu müssen. Den Port habe ich dabei auf 8080 belassen, vielleicht keine so gute Wahl bei HTTPS Zugriffen aber es müßte funktionieren.

$ kubectl get pvc -n oggfree
NAME                                      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
ggstudio-goldengate-studio-free-u01-pvc   Bound    csi-2e23b64d-ac03-465f-b448-7d15ddbdd026   50Gi       RWO            oci-bv         <unset>                 33s
ggstudio-goldengate-studio-free-u02-pvc   Bound    csi-ad027c1d-c144-4703-a65b-873546c9220d   50Gi       RWO            oci-bv         <unset>                 33s
ggstudio-goldengate-studio-free-u03-pvc   Bound    csi-4bf859c8-d664-47a6-babf-abc332bab6f2   50Gi       RWO            oci-bv         <unset>                 33s

$ kubectl get service -n oggfree
NAME                                  TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)          AGE
ggstudio-goldengate-studio-free-svc   LoadBalancer   10.96.53.119   111.222.333.444 8080:32487/TCP   50m

$ kubectl get pod -n oggfree
NAME                                               READY   STATUS    RESTARTS   AGE
ggstudio-goldengate-studio-free-7f799cb74f-cpwbs   1/1     Running   0          39m

$ kubectl logs ggstudio-goldengate-studio-free-7f799cb74f-cpwbs -n oggfree
OGG_SECURE_DEPLOYMENT=false
APP_HOME=/u01/oggf
APP_DATA_HOME=/u02/oggf
/u02/oggf/deploymentId
OGGF_DEPLOYMENT_ID=c9b30913-230b-4546-bea8-5a01078310b7
/u02/oggf/certificate /u02/oggf
Generating a RSA private key
.................................++++
...++++
writing new private key to '/u01/oggf/certificate/ca-key.pem'
-----
Generating RSA private key, 4096 bit long modulus (2 primes)
...........................................++++
.....................................................................++++
e is 65537 (0x010001)
Signature ok
subject=CN = ggstudio-goldengate-studio-free-7f799cb74f-cpwbs
Getting CA Private Key
/etc/nginx/cert/ogg.pem.full: OK
/etc/nginx/cert/ogg.pem: OK
/u02/oggf
OGG_SERVERCERT=/u02/oggf/certificate/server.pem
OGG_SERVERCERT_KEYFILE=/u01/oggf/certificate/server-key.pem
.......
.......

Da sehr viel Log output erzeugt wird habe ich nur die ersten paar Zeilen angegeben. Sie erkennen sicher bereits hier, daß SSL Zertifikate im Container beim Start erzeugt wurden, und dieser später auf dem HTTPS Protokoll und dem Container-internen Port 443 lauscht. Die Verwaltung von Zertifikaten könnten auch durch Kubernetes-Mittel erfolgen, die nötigen Dateien könnten als Volumes aus Kubernetes Secrets heraus eingebunden werden. Aber für einen ersten Wurf sollte das genügen. Rufen Sie den Service einmal über seine externe IP Adresse auf. Per HTTPS und auf dem durch den Load Balancer geöffneten externen Port 8080. In meinem Beispiel wäre also die URL https://111.222.333.444:8080 im Browser einzutragen. Die external-IP des Kubernetes Service vom Typ LoadBalancer und sein Port. Die Browser-Warnung wegen nicht offizieller Zertifikate darf vorerst auch ignoriert werden:

GOldenGate Studio free login

Sind Benutzername und Kennwort soweit korrekt eingegeben (in unserem Beispiel: oggadmin und Welcome1234# wie im Kubernetes Secret hinterlegt), so sollte sich nun die Startseite zeigen und Sie sind mit der grundsätzlichen Installation fertig. 

GOldenGate Studio Free start page

Möchten Sie Anpassungen vornehmen und die Installation mit anderen Angaben testen, so müssen Sie nicht unbedingt direkt die Kubernetes Ressourcen wie Deployment, Pod, Services editieren. Sie können typischerweise die Installation rückgängig machen mit

$ helm uninstall ggstudio -n oggfree 

Dann die Parameter in der Datei studio.yaml anpassen oder wahrscheinlich das Kubernetes Secret löschen und neu anlegen, schließlich erneut installieren.

Genau so wie GoldenGate Studio free lassen sich auch die anderen GoldenGate Container einrichten und dann per Browser oder REST API konfigurieren. Es können normalerweise Datenbank Verbindungen eingerichtet werden zu Datenbanken innerhalb und außerhalb des Kubernetes Clusters. Auch untereinander können die GoldenGate Container miteinander verknüpft werden über sogenannte Distribution Paths. Dafür sind wahlweise die internen ClusterIP Namen verwendbar oder die externen Namen und IP Adressen. Dabei sind jedoch die jeweiligen selbst generierten Zertifikate herunterzuladen und zu hinterlegen, oder einheitliche offizielle Zertifikate eines vorgeschalteten Ingress zu nutzen.

 

Auch dieses Mal – viel Spaß beim Testen und Ausprobieren!

Einige für Sie zusammengestellte Links und weiterführende Informationen:
Offizielle Ankündigung von GoldenGate Free für Postgres, mySQL und SQL Server
GoldenGate free Dokumentation
GoldenGate Youtube Kanal
Der Data Integration und GoldenGate Blog von Oracle
GoldenGate free Container auf container-registry.oracle.com
GoldenGate Vollversion (und auch free) in Kubernetes einrichten – ohne helm chart aber dafür mit Grafana Monitoring
Github Repository voller helm chart Quellen für GoldenGate, ORDS, Connection Manager, Graph Server und weitere Komponenten
Das durchsuchbare Kubernetes Paketarchiv “artifacthub.io”