ZoraDDL

ZoraDDL ist ein kleines Tool mit dem es ermöglicht wird einfach DDL Code aus der Oracle Datenbank zu extrahieren.

Warum wurde ZoraDDL entwickelt?

Kurzum, wer z.B. Packages per SQLPlus in der original Formatierung extrahieren möchte kann sich eine ganze Zeit damit beschäftigen bis er zum Erfolg kommt.

Voraussetzungen für den Einsatz von ZoraDDL Getestet mit Was kann ZoraDDL

Installation:


Für ZoraDDL wird keine Installation benötigt, einfach das Zip in ein Verzeichnis entpacken.

Vor dem ersten Start:

Da ZoraDDL auf den vorhanden Treiber von Oracle zurückgreift muss das Programm wissen wo es die benötigte Treiber Daten findet. (In unserem Fall die Oracle.DataAccess.dll)
Bitte prüfe zuerst ob die Oracle ODP.Net Unterstützung für das Framework 2.0 bei der Oracle-Treiberinstallation mit installiert wurde. (Verzeichnis odp.net\bin\2.x muss existieren)
Falls der Treiber nach Oracle Installationsangaben installiert wurde, müsste sich die Oracle.DataAccess.dll im GAC (Global Assembly Cache) befinden. Dies kann mit dem GACViewer kontrolliert werden, falls diese Oracle.DataAccess nicht im GAC installiert ist kann dies leicht mir dem GACViewer nachgeholt werden.

Bitte prüfe auch ob die Version von der Oracle.DataAccess vom GAC und Treiberverzeichnis übereinstimmt. In manchen Fällen kommt es nach einem Update des Oracle-Treibers vor, daß sich im GAC noch die alte Version befindet.

Extrahieren von DDL über die Kommandozeile:


Mit ZoraDDL ist es möglich, DDL über die Kommandozeile zu extrahieren, dies Ausgabe des DDL Textes wird hier über den ERROR Outputstream ausgegeben und ermöglicht es in Dos-Batchprogrammen mittels 2>Dateiname das DDL in eine Datei umzuleiten.

Syntax:
zoraddl [Username/Password@Server] [PKB|PKH|PROC|FUNC|TAB|VIEW:Objectname]

Parameter:
Username Benutzername für die Anmeldung
Password Passwort für die Anmeldung
Server TNS Name oder IP-Adresse:Port
PKB|PKH|PROC
|FUNC|TAB|VIEW
Angabe was zu extrahieren ist
Objectname der Objektname mit optionaler Schema angabe
Beispiele:
C:\zoraddl\matze/>zoraddl.exe scott/tiger@192.168.178.25:1528 PKH:myPackage 2> myPackage.pkh

C:\zoraddl\matze/>zoraddl.exe scott/tiger@MyTNS PKB:HR.myPackage 2> myPackage.pkh

Extrahieren von DDL über ein Batchfile:


Mit ZoraDDL ist es auch möglicht sehr komfortable mehrere DDL Dateien aus Oracle zu extrahieren. Dies wird über eine XML Datei durchgeführt die wie folgt aufgebaut ist.

Dokumentation des XML

BatchJob.BeforeText

Optionales Element, in der CDATA Sektion kannst Du einen beliebigen Text angeben welcher vor jedem DDL Text in die Datei geschrieben wird. (In diesem Text kannst Du auch Variablen verwenden)

BatchJob.BeforeText

Optionales Element, in der CDATA Sektion kannst Du einen beliebigen Text angeben welcher nach jedem DDL Text in die Datei geschrieben wird. (In diesem Text kannst Du auch Variablen verwenden)

BatchJob.Session_SQL

Optionales Element, in der CDATA Sektion kannst Du PLSQL Code angeben welcher nach der Erzeugung der Oracle Session ausgeführt wird. Somit es es möglich z.B. den generierten DDL Text zu Konfigurieren. Siehe Oracle-Dokumentation für DBMS_METADATA.SET_TRANSFORM_PARAM

Beispiel:
<Session_SQL>
<![CDATA[ --Initialize session
begin
  DBMS_METADATA.SET_TRANSFORM_PARAMDBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',false);
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
  BMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'TABLESPACE',false);
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'CONSTRAINTS',false);
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',true); end; ]]>
</Session_SQL>

BatchJob.TypeMapping

In diesem Element wird bestimmt wie der Dateiname auszusehen hat pro DDL Typ, zusätzlich ist es möglich ein Programm anzugeben welche ausgeführt wird wenn die DDL Datei erstellt wurde.

Attribute:
type Der Typ Mögliche Werte PKB,PKH,PROC,FUNC,TAB,VIEW
filename Dateinamen für diesen Type (hier kannst Du auch Variablen verwenden)
execute Programm das nach dem Erstellen der Datei ausgeführt wird (hier kannst Du auch Variablen verwenden)
echo Text der nach dem Erstellen der Datei ausgegeben wird. Dieser Text wird in den Error Ausgabekanal geschrieben und kann durch Umleiten mittels 2> in eine Datei gefiltert geschreiben werden. Hier kannst Du natürlich auch Variablen verwenden und \n für einen Zeilenumbruch. Diese Möglichkeit erlaubt es z.B. automatisch SQL Skripte zur Einspielung der DDL's zu generieren.
Hier ein Beispiel: echo="@{OBJECTNAME}.TAB\N/\Nshow errors\n/\N"
Beispiel:
<TypeMapping type="PKB" filename="{OBJECTNAME}.PKB" execute="test.cmd {OBJECTNAME}.PKB"/>

BatchJob.Item

Hier wird definiert welche DDL Objekte aus der Datenbank extrahiert werden.

Attribute:
Objectname der Name in der Datenbank von diesem Objekt angabe des Schemas ist optional.
Type der Type des Objektes. Mögliche Werte PKB,PKH,PROC,FUNC,TAB,VIEW

BatchJob.Item.BeforeText

Mit diesem optionalen Element kann man die Angabe von BatchJob.BeforeText pro DDL Objekt überschreiben. (Der Text kann auch Variablen enthalten)

BatchJob.Item.AfterText

Mit diesem optionalen Element kann man die Angabe von BatchJob.AfterText pro DDL Objekt überschreiben. (Der Text kann auch Variablen enthalten)

Verfügbare Variablen im Batchjob xml


{SCHEMA} Akuelles Schema des Objektes
{OBJECTNAME} Der aktuelle Objektname
{TYP} Aktueller Typ des Objektes
{DATABASE} Die Datenbank Angabe von der Kommandozeile
{USER} Benutzernameangabe von der Kommandozeile
{DATE} Aktuelles Datum
{TIME} Aktuelle Zeit

Beispiele für die Verwendung


Hier ein Beispiel XML welches folgendes Ausführt:


<?xml version="1.0" encoding="utf-8"?>
<!-- Please notice xml is case sensitive!
 You can use follow variables:
{SCHEMA} =current objectschema
{OBJECTNAME} =current objektname
{TYP}=current objekttyp
{DATABASE} =Database from the commandline
{USER} =Username from the commandline
{ENV_[EnvironmentVar]} =Content of a Environmentvariable
Variables allow in:
BatchJob.BeforeText.CDATA
BatchJob.AfterText.CDATA
BatchJob.TypeMapping.filename
BatchJob.TypeMapping.execute
BatchJob.TypeMapping.echo
BatchJob.Item.BeforeText.CDATA
BatchJob.Item.AfterText.CDATA -->

<BatchJob>
  <BeforeText>
<![CDATA[ /****************************************************************************
This text is the default text that applies first in the ddl output (Optional) it's Multiline
Filename={OBJECTNAME}
Type ={TYP}
DATABASE={DATABASE}
USER ={USER}
Date ={DATE} {TIME}
Machine ={ENV_USERDOMAIN}/{ENV_USERNAME} *****************************************************************************/]]>
 
</BeforeText>
  <AfterText>
<![CDATA[ --This text is the default text that applies after the ddl output (Optional) ]]>
 
</AfterText>
  <!--Initial Session-->

  <Session_SQL>
<![CDATA[ --Initialize session
begin
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',false);
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'TABLESPACE',false);
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'CONSTRAINTS',false);
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',true);
end; ]]>

  </Session_SQL>
  <!--Default Outputpath-->
 
<Outputpath>.\Unittest</Outputpath>
 <!-- TypeMappings specify the Outputfilename for a Type.
      echo= Outputext to stderr
      execute= Execute Programm after extract ddl -->

  <TypeMapping type="PKH" filename="{OBJECTNAME}.PKH"/>
  <TypeMapping type="PKB" filename="{OBJECTNAME}.PKB"/>
  <TypeMapping type="PROC" filename="{OBJECTNAME}.PRC"/>
  <TypeMapping type="FUNC" filename="{OBJECTNAME}.FUN"/>
  <TypeMapping type="TAB" filename="{OBJECTNAME}.TAB" echo="@{OBJECTNAME}.TAB\N/\Nshow errors\n/\N" />
  <TypeMapping type="VIEW" filename="{OBJECTNAME}.VIEW" execute="cmd.exe /c echo test" />
  <!--Items are the DDL Objects to extract from the Database-->
 
<Item objectname="TEST" type="PKB">
    <BeforeText>
     <![CDATA[--This overrides the default Text BatchJob->BeforeText (optional)]]>
    </BeforeText>
    <AfterText>
     <![CDATA[--This overridesthe default Text BatchJob->AfterText (optional)]]>
   
</AfterText>
  </Item>
  <Item objectname="TEST" type="PKH" />
  <Item objectname="add_job_history" type="PROC" />
  <Item objectname="func" type="FUNC"/>
  <Item objectname="Countries" type="TAB" />
  <Item objectname="EMP_DETAILS_VIEW" type="VIEW" />
</BatchJob>

Beispiel für den Aufruf von ZoraDDL bei Verwendung eines Batchfiles:

C:\zoraddl\matze/> Zoraddl.exe Benutzer/Passwort@TNS-Name BatchXmldatei.xml 2> mysqlplusskript.sql

Errorcodes von ZoraDDL:

Download

Path:
FilenameFilesizeDate
ZoraDDL_Rev_83.zip 11.01 kB 2011-09-20

Bei Frage kannst Du mich gerne über das Kontaktformular erreichen. Kontakt