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