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. Vollständiges Anlegen einer leeren Datenbank

Es soll eine neue Datenbank vollständig angelegt werden, inklusive aller Indices, Constraints und Referenzen.

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. Verändern einer Datenbank

Existierende Datenbanktabellen sollen verändert bzw. erweitert werden.

4. Löschen einer Datenbank

Alle Tabellen inkl. der daran angeknüpften Datenbankobjekte sollen gelöscht werden.

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

1 POD Error

The following errors were encountered while parsing the POD:

Around line 139:

Non-ASCII character seen before =encoding in 'für'. Assuming CP1252