dddl - Kommandozeilenprogramm für Dimedis::Ddl


NAME

dddl - Kommandozeilenprogramm für Dimedis::Ddl


SYNOPSIS

  dddl [options]
    -t db-type      Datenbanktyp (z.B. Oracle, mysql, Sybase)
    -d dbi-connect  DBI Connect-String (alternativ zu -t)
    -u username     Username, wenn DBI Connect-String gegeben
    -p password     Passwort, wenn DBI Connect-String gegeben
    -f filename     Dimedis::Ddl Konfigurationsdateiname
    -o filename     Zieldateiname für SQL-Code bzw. Dimedis::Sql
                    Type Hash (- für STDOUT)
    -w what         Welcher SQL Code soll ausgegeben werden?
                    Mögliche Werte sind:

                    create_all            alles anlegen (Default)
                    create_tables         Tabellen anlegen
                    create_references     Referenzen anlegen
                    create_constraints    Constraints anlegen
                    create_indices        Indices anlegen
                    drop_all              alles löschen
                    drop_tables           Tabellen löschen
                    drop_references       Referenzen löschen
                    drop_constraints      Constraints löschen
                    drop_indices          Indices löschen
                    type_hash             Dimedis::Sql Type Hash
                    full_type_hash        vollständiges Type Hash
                    cleanup               Löscht unreferenzierte Daten
                                          (braucht Datenbankverbindung)
    -h hints        Zusätzliche Steuerungsparameter im Format:
                    "name=value, name=value, ..."


DESCRIPTION

Das dddl Kommando ist eine einfache Schnittstelle zum Dimedis::Ddl Modul zur datenbankübergreifenden Generierung von DDL Code zur Erstellung und Manipulation von Datenbankobjekten.

Das Programm benötigt als Parameter mindestens eine Dimedis::Ddl Konfigurationsdatei, den gewünschten Datenbanktyp, sowie den Dateinamen für den generierten Code. Hinweise zum Aufbau der Konfigurationsdatei gibt die manpage zu Dimedis::Ddl (-> perldoc Dimedis::Ddl).

Statt den Datenbanktyp mit -t anzugeben, kann auch ein DBI Connect String mit -d, plus username/password mit -u und -p angegeben werden. Der Datenbanktyp wird daraus entsprechend ermittelt.

Per Default wird Code für alle in der Konfigurationsdatei beschriebenen Objekte (Tabellen, Indices, Constraints und Referenzen) erzeugt, mit dem -w Parameter kann die Ausgabe aber auch auf bestimmte Objekte reduziert werden.

Wenn die Konfiguration fehlerhaft ist, werden die Fehlermeldungen auf STDERR ausgegeben. In diesem Fall wird kein Code generiert, die Konfiguration muß also fehlerfrei sein, eine Teilgenerierung ist nicht möglich.


ZUSÄTZLICHE STEUERUNGSPARAMETER

Mit -h können zusätzliche, auch datenbankspezifische, Parameter übergeben werden, im Format:

  "name=value, name=value, ..."

Folgende Parameter können hier angegeben werden:

create_oracle_sequence=1 CREATE und DROP SEQUENCE Befehle werden für Oracle beim Tabellen anlegen/löschen mit erzeugt. Default ist hier 0.


HINWEIS ZU MYSQL UND REFERENZEN

Wenn Referenzen bei einer MySQL verwendet werden sollen, müssen die DBI Connect Informationen angegeben werden (mit den Optionen -d, -u und -p). Weitere Hinweise zu diesem Thema finden sich in der Dimedis::Ddl Manpage.


ANWENDUNGSFÄLLE

Im wesentlichen gibt es fünf Anwendungsfälle für Dimedis::Ddl und den Einsatz des dddl Kommandos:

  1. 1. Vollständiges Anlegen einer leeren Datenbank
    Es soll eine neue Datenbank vollständig angelegt werden, inklusive aller Indices, Constraints und Referenzen.

  2. 2. Anlegen einer Datenbank mit anschließendem Datenimport
    In diesem Fall werden ebenfalls alle Datenbanktabellen angelegt, allerdings ohne Indices und Referenzen, da diese einen anschließenden Datenimport behindern würden.

  3. 3. Verändern einer Datenbank
    Existierende Datenbanktabellen sollen verändert bzw. erweitert werden.

  4. 4. Löschen einer Datenbank
    Alle Tabellen inkl. der daran angeknüpften Datenbankobjekte sollen gelöscht werden.

  5. 5. Generierung des Dimedis::Sql Type Hashs
    Dimedis::Ddl korrespondiert natürlich direkt mit Dimedis::Sql, d.h. das von Dimedis::Sql benötigte Type Hash kann direkt aus der Dimedis::Ddl Konfiguration generiert werden.

Es folgt eine Beschreibung dieser fünf Anwendungsfälle, mit Beispielen zur Veranschaulichung:

1. Vollständiges Anlegen einer leeren Datenbank

Dies kann mit einem einzigen dddl Aufruf erledigt werden:

  dddl -t Oracle -f ddl.config -o create_all.sql

Der Default für den -w Parameter ist create_all, damit kann dieser hier weggelassen werden und es wird der Code für alle Datenbankobjekte ausgegeben. Die so erzeugte .sql Datei kann nun z.B. mit dbshell.pl ausgeführt werden:

  dbshell.pl -u foo -p foo dbi:Oracle: < create_all.sql

2. Anlegen einer Datenbank mit anschließendem Datenimport

In diesem Fall werden zunächst nur die Tabellen der Datenbank angelegt. Anschließend erfolgt der Datenimport, und erst danach werden die Indices, Referenzen und Constraints hinzugefügt. Damit ergibt sich folgender Ablauf (das Beispiel verwendet - als Ausgabedateinamen, also Ausgabe auf STDOUT, und schreibt den generierten Code anschließend per Pipe direkt in dbshell.pl):

  dddl -t Oracle -f ddl.config -o - -w create_tables      | dbshell.pl [...]
  dsql_import [...]
  dddl -t Oracle -f ddl.config -o - -w create_indices     | dbshell.pl [...]
  dddl -t Oracle -f ddl.config -o - -w create_constraints | dbshell.pl [...]
  dddl -t Oracle -f ddl.config -o - -w create_references  | dbshell.pl [...]

3. Verändern einer Datenbank

Der wesentliche Unterschied beim Verändern einer Datenbank steckt in der Konfigurationsdatei, in der das _alter Schlüsselwort anzeigt, wie die Tabellen modifiziert werden sollen (siehe ``perldoc Dimedis::Ddl'').

Die Generierung und Ausführung der Befehle erfolgt analog zum vollständigen Anlegen von Tabellen:

  dddl -t Oracle -f alter_ddl.config -o alter.sql
  dbshell.pl -u foo -p foo dbi:Oracle: < alter.sql

Der -w Parameter kann hier auch wieder weggelassen werden, damit werden alle in der Datei beschriebenen Aktionen berücksichtigt. Im _alter Modus macht es i.A. keinen Sinn, sich nur auf einzelne Objektarten zu beschränken, es wäre aber theoretisch möglich.

4. Löschen einer Datenbank

Dimedis::Ddl kann Code zum Löschen aller Objektarten generieren, i.d.R. soll aber immer alles gelöscht werden. Da alle Objektarten von Tabellen abhängen, reicht es also die DROP TABLE statements generieren zu lassen:

  dddl -t Oracle -f ddl.config -w drop_tables -o drop.sql
  dbshell.pl -u foo -p foo dbi:Oracle: < drop.sql

Wie gesagt gibt es für die anderen Objektarten auch entsprechende -w Parameter. Hiermit könnten z.B. alle Referenzen abgeschaltet werden:

  dddl -t Oracle -f ddl.config -w drop_references -o drop_ref.sql
  dbshell.pl -u foo -p foo dbi:Oracle: < drop_ref.sql

5. Generierung des Dimedis::Sql Type Hashs

Das Dimedis::Sql Type Hash wird mit einem der folgenden Aufrufe erzeugt:

  dddl -t Oracle -f ddl.config -w type_hash      -o type_hash.conf
  dddl -t Oracle -f ddl.config -w full_type_hash -o full_type_hash.conf

Es kann ein beliebiger Datenbanktyp angegeben werden - das Type Hash
ist ja selbst datenbankunabhängig. Aufgrund der internen Architektur
von Dimedis::Ddl muß aber stets ein Datenbanktyp angegeben werden.

Die Angabe von -w type_hash bewirkt die Erzeugung eines optimierten Type Hashs, das nur die für Dimedis::Sql unbedingt nötigen Spalten enthält (Serials, Blobs und Clobs). Mit -w full_type_hash wird ein vollständiges Type Hash generiert, wie es für die Benutzung des Dimedis::Sql Export/Import Programms nötig ist.

6. Korrigieren von nicht aufgelösten DELETE CASCADE Referenzen

Wenn eine Datenbank bislang ohne Referenzen betrieben wurde, nun sollen diese aber eingeschaltet werden, so müssen zunächst die bislang nicht gelöschten Datensätze von DELETE CASCADE Referenzen gelöscht werden.

  dddl -d dbi:mysql:xyz -u xyz -p xyz -f ddl.config -w cleanup -o -


AUTOR

Joern Reder <joern@dimedis.de>


COPYRIGHT

Copyright (c) 2001-2003 dimedis GmbH, All Rights Reserved


SEE ALSO

Dimedis::Ddl, Dimedis::Ddl::Config, Dimedis::Sql

 dddl - Kommandozeilenprogramm für Dimedis::Ddl