Deployment von Informatica Objekten mit pmrep

In einem meiner Projekte gab es eine Anforderung, Informatica Objekte automatisch per Skript von einer in eine andere Umgebung zu deployen. Da Informatica eine sehr mächstige Kommandozeilenschnittstelle hat, lag es sehr nahe, dies auch darüber zu realisieren.

In der Informatica Dokumentation zur Command Reference findet man zu diesem Thema folgenden Kommandoaufruf mit erforderlichen und optionalen Parametern:

pmrep objectimport -i <input_xml_file_name> -c <control_file_name> [-l <log_file_name> ] [-p (retain persistent value)]

Aber wie ist dieser genau zu nutzen?

Wenn man die beiden optionalen Parameter außen vor läßt, benötigt man eine XML-Datei (input_xml_file_name), die die exportierten Objekte enthält. Weiterhin ist auch noch eine Kontrolldatei (control_file_name) nötig.

Wie man Informatica Objekte exportiert, möchte ich hier nicht beschreiben, da dies eigentlich klar sein sollte. Viel interessanter ist aber die Konfigurationsdatei und der Prozess zum Importieren.

Die Kontrolldatei wird über die auf dem Informatica Server unter \server\bin\ abgelegte Datei impcntl.dtd definiert und besteht aus folgenden Abschnitten:

XML Header

Der Header der XML Datei ist selbsterklärend und hier sind auch keine Anpassungen zu machen.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE IMPORTPARAMS SYSTEM "impcntl.dtd">

Importparams

Der zweite Abschnitt der Kontrolldatei enthält wichtige Parameter für den Import.

CHECKIN_AFTER_IMPORT (YES | NO) "NO"
CHECKIN_COMMENTS CDATA #IMPLIED
APPLY_LABEL_NAME CDATA #IMPLIED
RETAIN_GENERATED_VALUE (YES | NO) "NO"
COPY_SAP_PROGRAM (YES | NO) "YES"
APPLY_DEFAULT_CONNECTION (YES | NO) "NO"

Foldermap

Im Abschnitt Foldermap wird das Mapping zwischen dem Ordner und dem Repository der Quelle und des Ziels definiert.

SOURCEFOLDERNAME CDATA #REQUIRED
SOURCEREPOSITORYNAME CDATA #REQUIRED
TARGETFOLDERNAME CDATA #REQUIRED
TARGETREPOSITORYNAME CDATA #REQUIRED

Typefilter

Der XML-Tag Typefiler wird genutzt, um die Objekte, die in der Export-XML Datei vorkommen, auf einen bestimmten Typ zu filtern. So kann man z.B. nur die Source Tabellen importieren, die in der Exportdatei vorhanden sind.

TYPENAME CDATA #REQUIRED

Resolveconflict

Im Abschnitt Resolveconflict wird definiert, wie der Importvorgang vorgehen soll, falls Objekte des Imports schon im entsprechenden Ordner des Zielrepository vorhanden sind. Hierfür sind 4 verschiedene Verfahren möglich:

Labelobject

Durch den Einsatz des Tags Labelobject kann man die Lösung von Objektkonflikten auf Objekte anwenden, die ein bestimmtes Label haben.

LABELNAME CDATA #REQUIRED
RESOLUTION (REPLACE | REUSE | RENAME) #REQUIRED

Queryobject

Weiterhin ist es möglich, die Lösung für Konflikte über eine Informatica Query zu definieren. Dazu ist es notwendig, dass diese Query auch im Repository Manager angelegt wurde.

QUERYNAME CDATA #REQUIRED
RESOLUTION (REPLACE | REUSE | RENAME) #REQUIRED

Typeobject

Möchte man die Lösing für Importkonflikte über den Typ des Objektes definieren, nutzt man das Tag Typeobject.

OBJECTTYPENAME CDATA #REQUIRED
RESOLUTION (REPLACE | REUSE | RENAME) #REQUIRED

Specificobject

Die feinste Granularität für die Definition von Lösungen für Importkonflikte kann man durch einen Einsatz des Tags Specificobject erreichen. Hier definiert man dies auf Objektebene.

NAME CDATA #REQUIRED
DBDNAME CDATA #IMPLIED
OBJECTTYPENAME CDATA #REQUIRED
FOLDERNAME CDATA #REQUIRED
REPOSITORYNAME CDATA #REQUIRED
RESOLUTION (REPLACE | REUSE | RENAME) #REQUIRED

Beispiel

Ein einfaches Beispiel in einem nicht versionierten Repository, bei dem alle schon vorhandenen Objekte im Zielrepository überschrieben werden sollen und bei dem der Ordner DWH_STAGING des Repositories E1 in den Ordner DWH_STAGING des Ziel Repositories T1 deployed werden soll, könnte auf folgende Weise definiert werden:

<xml version="1.0" encoding="UTF-8">
<!DOCTYPE IMPORTPARAMS SYSTEM "impcntl.dtd">
<IMPORTPARAMS CHECKIN_AFTER_IMPORT ="NO">
<FOLDERMAP SOURCEFOLDERNAME ="DWH_STAGING" 
   SOURCEREPOSITORYNAME ="E1" 
   TARGETFOLDERNAME ="DWH_STAGING" 
   TARGETREPOSITORYNAME ="T1"/>
<RESOLVECONFLICT>
<TYPEOBJECT OBJECTTYPENAME="ALL" RESOLUTION="REPLACE"/>
</RESOLVECONFLICT>
</IMPORTPARAMS>

Ausführung

Die Ausführung des Deployments über das pmrep Kommando ist dann eingentlich ganz einfach. Zuerst stellt man über das pmcmd Kommando eine Verbindung zum Informatica Server her:

pmcmd connect -sv Service -d domain -u username -p password

Anschließend setzt man das pmrep Kommando ab:

pmrep objectimport -i wf_test.xml -c control_file.xml