Aufbau eines CDB Spiegel-Systems

Eine CDB Installation wird i.d.R. wie im Handbuch beschrieben aufgebaut: „Software + Pakete inkl. Kundenpaket installieren“. Diese Vorgehensweise hat den Vorteil, dass sich die zu transportierenden Änderungen auf die geänderten Module (i.d.R. das Kundenmodul cust.plm) beschränken. Theoretisch lässt sich damit eine vollständige aber immer noch relativ schlanke Anbindung des Lieferanten abbilden.

In der Praxis kann diese Vorgehensweise aber auch erhebliche Nachteile resp. Einschränkungen mit sich bringen. So verfügt der Lieferant mit dem Kundenpaket beispielsweise noch nicht über Nutzdaten, wie sie typischer Weise im produktiven Betrieb aufgebaut werden (mit all ihren Eigentümlichkeiten).

Folgend wird alternativ ein Vorgehen beschrieben, bei dem ein Spiegel der ganzen CDB-Instanz erstellt wird. Um dieses Verfahren zu etablieren, werden keine CDB-Tools benötigt. Die CDB-Tools können aber den Aufbau des Spiegels erheblich erleichtern (Spiegelsystem initialisieren). Der Spiegel wird aus folgenden Komponenten aufgebaut:

DUMP

Ein Export der Datenbank.

CADDOK_BASE

Kopie des Instanzordners

BLOBS

Die BLOBs der Anwendung sind in CDB-Modulen (BLOBs einspielen). Optional kann auch der Vault in den Spiegel übernommen werden (Vault übernehmen).

DB Dump

Die DB Exporte können sehr groß sein, meist empfiehlt es sich die DB vorher zu bereinigen, s.a. Bereinigung der Datenbank. Der DB-Export muss mit dem DB-Management System eingespielt werden. Dazu muss man sich der nativen Werkzeuge des jeweiligen DB-Management Systems bedienen (wird hier nicht weiter erläutert).

CADDOK_BASE

Der CADDOK_BASE Ordner kann ein ZIP sein, besser ist es aber CADDOK_BASE zu versionieren, s.a. einheitliche Ordnerstrukturen. Alle Änderungen zum Betrieb einer Instanz werden so versioniert und Änderungen sind damit reproduzierbar. Als ignore list für git eignet sich CADDOK_BASE/.gitignore.

git clone <URL des gemeinsamen Repository>
git checkout <branch-point>

DB Connect einrichten

Wurde die Clone-Kopie der CDB-Instanz lokal angelegt und der DB Import durchgeführt, wird als Nächstes der DB-Connect eingerichtet. In der Konfigurationsdatei etc/dbtab werden die DB-Connect eingetragen. Für einen MS-SQL Connect cust_dev gegen eine DB Instanz mit dem Namen cust_dev (auf dem localhost) könnte der Eintrag in etwa so aussehen:

# NAME   RDBMS NET       DEFAULT LOGIN     DBMS-HOME DBMS-ID DBMS-LANG            DBMS_DRIVER
cust_dev mssql localhost x       SSPI/SSPI cust_dev  -       Latin1_General_CS_AS mssql

Ein anderes Beispiel für eine Oracle Datenbank auf dem Host ‚dbhost‘ im eigenen Subnetz:

# NAME   RDBMS  NET                   DEFAULT LOGIN             DBMS-HOME DBMS-ID DBMS-LANG               DBMS_DRIVER
cust_dev oracle //dbhost:1521/orclpdb x       cust_dev/cust_dev -         -       german_germany.AL32UTF8 oracle

Alle anderen Einträge sollte man aus-kommentieren. Prinzipiell müsste es danach möglich sein eine cdbsh bzw. ein cdbsql zu starten, dass in der CDB-Instanz läuft und gegen die cust_dev Datenbank verbindet.:

DOS> cdbsql.exe -v
Executing Script: C:\share\cust\etc\site.conf
Encoding IN cp850 OUT cp850
SQL>

CDB Tools einrichten

Die Tools zum Initialisieren eines Spiegels werden in den CDB-Tools bereit gestellt, deshalb müssen diese nun eingerichtet werden, sofern das nicht eh bereits geschehen ist. Wie die CDB-Tools installiert werden ist detailliert im Kapitel Installation beschrieben.

Spiegelsystem initialisieren

Um den Spiegel in Betrieb zu nehmen müsste man normalerweise jetzt die Dienste für den FQDN des lokalen Hosts einrichten. Da noch keine CDB Instanz läuft kann man das eigentlich nur, indem man diese Dienste via SQL Statements direkt in der DB einrichtet. Das kann sehr mühsam sein, Erleichterung verschafft das Skript init-cdb-mirror, das in einer CDB-Tools Umgebung aufgerufen werden kann.

Vorsicht

Das Tool init-cdb-mirror darf niemals in einer produktiven Umgebung ausgeführt werden!

[CDBTools]$ init-cdb-mirror

Mit dem Skript werden die minimal erforderlichen CDB-Dienste eingerichtet um CDB starten zu können. Alle weiteren Dienste können danach in einer CDB Sitzung interaktiv eingerichtet werden.

Die Dienste werden eingerichtet, indem die Konfiguration eines Application Servers des original Systems für den lokalen Host übernommen und als default Site eingerichtet werden. Mit init-cdb-mirror können auch gleichzeitig die Passwörter zurück gesetzt werden und für die Dienste werden einfache Logins (caddok/welcome) eingerichtet. Diese Einstellungen sind nur für Entwickler-Systeme geeignet.

BLOBs einspielen

Nachdem der Spiegel mit dem init-cdb-mirror eingerichtet wurde, müsste es möglich sein, den CDB-Server z.B. mit cdb-localhost-START.bat zu starten. Die weiteren Dienste kann man dann nach Bedarf in einer CDB-Client Sitzung einrichten. Zum Einspielen der BLOBs aus den Modulen muss der Service-Daemon gestartet werden, da die Instanz noch nicht voll aufgebaut ist, wird er für Update gestartet.:

$ cdbsvcd -d --for_update

Der BlobStore Dienst sollte dann soweit laufen und es können die BLOBs aus den Modulen in den BlobStore importiert werden:

$ cdbpkg import_blobs
Imported 42 missing blob(s)

Vault übernehmen

Um den Speicher eines BlobStore Servers komplett zu übernehmen müssen Kopien der Ordner base_path und vault_path angelegt werden (siehe CDB Administration Konfiguration des BlobStore Dienstes). In den meisten Setups ist der vault_path bereits im base_path enthalten. Im base_path befinden sich die SQLite Datenbank filestore.db in welcher der BlobStore Server seine Hash-Value Objekte verwaltet. Siehe auch im CDB Plattform Handbuch im Abschnitt „Die BLOB-Storage-DB“:

cd /D %CADDOK_BASE%\storage\blobstore
sqlite3 filestore.db
 sqlite> .tables
 -- backup    blobs     metadata  vaults
 sqlite> .schema vaults
 --   CREATE TABLE vaults (
 --          vault_id INTEGER PRIMARY KEY,
 --          path     TEXT NOT NULL);
 -- ...
 sqlite> .schema blobs
 --   CREATE TABLE blobs (
 --          id          TEXT PRIMARY KEY,
 --          vault_id    INTEGER,
 --          filename    TEXT NOT NULL,
 --          size        INTEGER,
 --          created_at  TIMESTAMP);
 -- ...
 sqlite> select vault_id, count(*) from blobs group by vault_id;
 -- 1|nnnn
 -- 2|mmmm
 sqlite> select * from vaults;
 -- 1|z:\blobstore\vault\
 -- 2|c:\share\cdb_cust_dev\storage\blobstore\vault\


sqlite> select vault_id, count(*) from blobs group by vault_id;
...

Mit einem Distinct auf die Vault-ID kann man nachschauen, welche Vaults genutzt werden. In der Relation vaults kann man sehen, wo diese Vaults lokalisiert sind:

sqlite> select distinct vault_id from blobs;
sqlite> select * from vaults;
1|c:\share\cdb_cust_dev\storage\blobstore\vault\

Der vault.path Wert muss entsprechend dem Spiegel neu gesetzt werden:

sqlite> update vaults set path='X:\to\my\blobstore\vault\'
   ...> where vault_id = 1;

Hinweis

Bevor Änderungen an der filestore.db vorgenommen werden, sollte sichergestellt sein, dass die DB nicht zeitgleich von einem BlobStore Server benutzt wird (BlobStore Dienst ggf. stoppen).

Einheitliche Ordnerstrukturen

CDB Instanzen erstrecken sich über homogene Systemlandschaften und weltweite Standorte hinweg. Um das Deployment dafür nicht weiter zu verkomplizieren empfiehlt es sich eine einheitliche Ordnerstruktur unternehmensweit zu etablieren. Die Software (Server) muss auf dem Host bereit gestellt werden (der CADDOK_RUNTIME Ordner). Die Installer von Microsoft installieren Software Pakete meist irgendwo unter:

"C:\Program Files (x86)"

Nachteil an diesem Pfadnamen ist, dass er Leerzeichen enthält. Leerzeichen, besondere Zeichen wie - (Minus) oder * (Sternchen) sind nicht selten Ursache von Fehlern. CDB als auch die CDB-Tools sollten damit umgehen können, sobald man aber andere Tools benutzt oder eigene Skripte schreibt kann man mit solchen Zeichen in Pfadnamen schnell Probleme bekommen. Es wird daher empfohlen die gesamte Installation (CDB Software & Instanz) unter Pfaden abzulegen, die keine solche Zeichen enthalten. Gern genutzt wird z.B. opt oder wie hier in den CDB-Tools oft auch share:

C:\share\contact\cdbsrv-11.3.10    <-- CDB Software
C:\share\cdb_cust_dev              <-- CDB Instanz
C:\share\cdb-tools                 <-- CDB-Tools

CADDOK_BASE/.gitignore

Um den CADDOK_BASE Ordner im git zu versionieren eignet sich die folgende, exemplarische .gitignore , die ggf. in Teilen noch angepasst werden muss:

*.pyc
*.pyo
*~
*.swp
*/#*#
.#*
.DS_Store
.cvsignore
.svn
#~$*[.docx|.xlsx]
#~*[.doc|.xls]

# Das Systemverzeichnis instance/app_conf wird von cdbpkg verwaltet und darf
# nicht versioniert resp. distributiert werden.
/app_conf/

# Directory for dynamic configuration.  This is used by various services to
# store temporary configuration items.  It can be excluded from backups.
/etcd/

# TEMP-Daten und der Package Ordner werden nicht versioniert
/tmp/
/CDBAPPS

# Der Storage hat sein eigenes Backup Konzept.  Unter dem storage-Ordner liegt
# allerdings auch die Konfiguration des Index Servers, die muss mit in die
# Versionsverwaltung.

/storage/*
!/storage/index
/storage/index/*
!/storage/index/search
/storage/index/search/*
!/storage/index/search/conf

# Das 3D Connect Release 15.5.1.2 neigt dazu Änderungen an Dateien im
# site-package vorzunehmen. Wir behandeln die AdobeFnt11.lst Dateien, wie auch
# schon die *.pyc Dateien.
# site-packages/cs.threed-15.5*.egg/win64/release/img/resource/CMap/AdobeFnt11.lst
# site-packages/cs.threed-15.5*.egg/win64/release/img/resource/Font/AdobeFnt11.lst