Logo Oracle Deutschland   DBA Community  -  August 2012
Oracle Enterprise Manager Cloud Control 12c: Nutzung von Skripten mit Deployment Prozeduren
von Ralf Durben, Oracle Deutschland B.V. & Co. KG

Auch wenn Oracle Enterprise Manager Cloud Control viele interaktive Möglichkeiten zur Verwaltung von Datenbanken anbietet, gibt es immer wieder den Wunsch, bereits bestehende Skripte einzubinden, die mehrere Aktionen gemeinsam ausführen. Diese Skripte sind zumeist parametrisiert und sollen über ein Sicherheitskonzept nur bestimmten Administratoren zur Verfügung stehen.

Das Jobsystem von Cloud Control hilft in diesem Fall nicht weiter, da die dort erstellten Jobs keine Parametrisierung erlauben.

Die Deployment Prozeduren aus dem Lifecycle Management Pack können für diese Aufgabe sehr gut verwendet werden und so zeigt Ihnen dieser Tipp, wie Sie Skripte über Deployment Prozeduren ausführen können.

In diesem Tipp wird ein Beispielskript verwendet, welches die Erstellung eines Datenbankbenutzers durchführt. Dabei wird der neue Datenbankbenutzer nicht nur einfach erstellt, sondern gleich mit den passenden Privilegien ausgestattet. Über einen Parameter kann der Typ des neuen Datenbankbenutzers festgelegt werden, was dann auch automatisch die Privilegien festlegt, die zu vergeben sind.

Inhalt

Dieser Tipp beinhaltet folgende Themen:

Beschreibung des verwendeten Skripts

Das hier verwendete Skript sieht folgendermaßen aus:

[oracle@radu1 ~]$ more credbuser.sh
ORACLE_SID=$1
export ORACLE_SID
export ORAENV_ASK="NO"
. oraenv
export PATH=$ORACLE_HOME/lib:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
echo $ORACLE_HOME
echo $ORACLE_SID
echo $PATH

sqlplus /nolog << EOF
connect / as sysdba
declare
 username varchar2(100):=to_char('$2');
 password varchar2(100):='$3';
 usermode char(1):='$4';
begin
 execute immediate('create user '||username||' identified by '||password);
 if usermode='c' then
  execute immediate('grant connect to '||username);
 elsif usermode='r' then
  execute immediate('grant resource to '||username);
 end if;
end;
/
exit
und wird zum Beispiel wie folgt verwendet (Anlegen eines Benutzers, der die CONNECT-Rolle bekommt):
./credbuser.sh radu1 testuser1 dummy c
wobei "radu1" die Instanz ist, in der ein Benutzer angelegt werden soll. "testuser1" ist der Name und "dummy" das Passwort des neuen Datenbankbenutzers. "c" gibt den Typ des neuen Datenbankbenutzers an und steht hier für einen Benutzer, der die Datenbankrolle CONNECT bekommen soll.
Je nach angegebenen Typ werden also unterschiedliche Privilegien vergeben. Dieses Skript ist sehr einfach gehalten, da es in diesem Tipp ja um das Prinzip der Einbindung von Skripten geht. Drei Bemerkungen sind aber angebracht:
  1. Das Skript meldet sich als SYSDBA an die Datenbank an. Das funktioniert, wenn der verwendete "Oracle"-User in der dafür korrekten UNIX-Gruppe ist. Der Vorteil dieses Verfahrens ist, dass für das Skript volle Rechte vorliegen, diese aber nur innerhalb des Skripts gültig sind. Bei der Entwicklung dieses Skripts ist also darauf zu achten, dass keine unberechtigte Aktion durch Angabe entsprechender Parameterwerte gestartet werden kann (vgl. SQL Injection bei PL/SQL Prozeduren). Selbstverständlich kann auch ein anderer Benutzer verwendet werden.
    Die passwortlose Datenbankverbindung funktioniert aber nur, wenn wie oben im Skript PATH und LD_LIBRARY_PATH gesetzt werden.
  2. Es wird davon ausgegangen, dass Ihre Datenbankinstallation insofern korrekt ist, dass Mechanismen wie /etc/oratab und /usr/local/bin/oraenv funktionieren, sowie das Verzeichnis /usr/local/bin in PATH gesetzt ist.
  3. Die echo-Kommandos sind natürlich nicht erforderlich, erleichtern aber im Fehlerfall die Suche nach der Ursache.

Hochladen des Skripts in die Software Library

Softwarebestandteile, die provisioniert werden sollen, werden als Komponente in der Software Library gespeichert. Das Skript wird demnach als Komponente in die Software Library geladen. Dazu navigieren Sie zu "Enterprise"->"Provisioning and Patching"->"Software Library"



Hier wird davon ausgegangen, dass die Software Library angelegt wurde. Mehr dazu und dem Umgang mit Deployment Prozeduren finden Sie im Tipp "Oracle Enterprise Manager Cloud Control 12c: Verteilen von beliebiger Software mit Deployment Prozeduren".

Navigieren Sie zu dem Verzeichnis, in dem das Skript gespeichert werden soll. Selektieren Sie das Verzeichnis durch einen Klick auf die erste Spalte, klicken dann auf "Actions"->"Create Entity"->"Component".



Sie können jetzt den Typ der neuen Komponente angeben. Belassen Sie es bei "Generic Component" und klicken auf "Continue".



Vergeben Sie jetzt einen Namen für die neue Komponente. Sie können eine Beschreibung und andere Attribute angeben. Das ist hier aber nicht erforderlich und wird weggelassen. Klicken Sie auf "Next".



Im Schritt "Configure" können Sie Property Typen definieren, um mehrere Instanzen einer Komponente zu identifizieren. Das wird hier aber nicht gebraucht und so klicken Sie auf "Next".



Jetzt geben Sie die Datei an, die hochgeladen werden soll. Die Datei kann vom Client (dort wo Ihr Browser läuft) oder von einem Agenten hochgeladen werden. In diesem Beispiel liegt das Skript auf einem Target-Rechner, da es dort entwickelt und getestet wurde. Also wird hier die Datei über den Agenten auf dem Target-Rechner hochgeladen. Wählen Sie als "File Source" den Wert "Agent Machine" und klicken dann auf die Lupe neben dem Feld "Host". Wählen Sie den Target-Rechner aus und klicken dann auf "Select".



Klicken Sie auf die Lupe neben dem Feld "Upload Location" und wählen Sie die Software Library als Ziel aus. Klicken Sie auf "OK".



Wenn das Ziel ausgewählt wurde, können Sie unter "Specify Source" die Skript-Datei auswählen. Klicken Sie dazu auf "Add".



Sie müssen sich am Target-Rechner anmelden. Klicken Sie dazu auf "Login As"...



... und geben passende Host-Credentials an.



Sie können jetzt durch die Verzeichnisse browsen und die Datei auswählen. Ist die Datei ausgewählt klicken Sie auf "Add".



Nachdem die Datei ausgewählt ist, klicken Sie auf "OK".



Sie landen wieder im normalen Wizard und klicken dort auf "Next".



Das Setzen von Direktiven können Sie auslassen und klicken auf "Next".



Sie bekommen eine Zusammenfassung angezeigt, die Sie mit "Save and Upload" bestätigen.



Sie bekommen eine Bestätigung, dass der Vorgang des Uploads gestartet wurde.



Dieses ist ein Job im EM Jobsystem. Sie finden ihn unter "Enterprise"->"Job"->"Activity".



In diesem Beispiel ist die Komponente also erfolgreich hochgeladen worden. Die neue Komponente ist auch in der Software Library sichtbar.



Erstellen der Deployment Prozedur

Sie erstellen jetzt die Deployment Prozedur, die später das Skript übertragen und ausführen soll, indem Sie zu "Enterprise"->"Provisioning and Patching"->"Procedure Library" navigieren.



Öffnen Sie neben "Launch" die Popup-Liste und wählen "Create New"...



... und klicken auf "Go".



Geben Sie der Prozedur einen Namen und ggf. eine Beschreibung. Klicken Sie dann auf "Procedure Variables".



Prozedur Variablen sind hier eher als Prozedur Parameter zu verstehen. Diese Parameter werden bei der Ausführung der Prozedur abgefragt, wenn dieses gewünscht wird. Mit "Add Row" fügen Sie eine neue Variable (Parameter) hinzu. Geben Sie jeweils den Namen, Display Namen (also was angezeigt werden soll), sowie eine Beschreibung an. Wenn Sie die Variable als "Password" festlegen, wird die spätere Eingabe nicht offen gezeigt. Auch können Sie mit "Required" festlegen, ob diese Variable einen Wert enthalten muss.

Im Screenshot sehen Sie die für das Beispielskript sinnvollen Variablen. Klicken Sie auf "Procedure Steps"



Sie geben jetzt die Ausführungsschritte der Prozedur an. Aktivieren sie die Checkbox vor "Default Phase" und klicken Sie auf "Insert".



Geben Sie dem Schritt einen Namen und wählen als Typ "Library: Component" aus. In diesem Schritt soll die Skript-Datei auf dem Zielrechner kopiert werden. Klicken Sie auf "Next".



Wählen Sie Ihre Komponente aus und klicken auf "Next".



In diesem Schritt wählen Sie die Direktive zum Kopieren aus. Die gibt es schon. Suchen Sie nach %Copy% und wählen dann "CompositeDeploy/Directives/Copy" aus. Klicken Sie dann auf "Next".



Im Schritt "Map Properties" müssen Sie die Checkbox "Run Directive" aktivieren und "Perform Cleanup" deaktivieren. Dann geben Sie über die Properties an, wohin die Datei kopiert werden soll. Dieses geben Sie hier fix ein, damit zur Laufzeit der Prozedur nicht danach gefragt wird. Unter "COMPONENT_NAME" geben Sie den Dateinamen des zu übertragenen Skripts ein. Klicken Sie auf "Next".



Bestätigen Sie mit "Finish".



Jetzt fügen Sie einen zweiten Schritt hinzu, der das Skript ausführen wird. Dazu selektieren Sie den gerade erstellten Transfer-Schritt und klicken auf "Insert".



Geben Sie einen Namen an und wählen den Typ "Host Command". Klicken Sie auf "Next".



Jetzt geben Sie das Kommando an, welches ausgeführt werden soll. Die auszuführende Datei ist

/home/oracle/em_scripts/credbuser.sh
und die zur Verfügung stehenden Parameter werden von Cloud Control angegeben. Rechts oben finden Sie die Standardparameter, wie zum Beispiel "Target Name". Rechts unten finden Sie Ihre selbst definierten "Procedure Variables", die als Parameter zur Verfügung stehen.



Mit diesen Parametern lautet der Skriptaufruf
/home/oracle/em_scripts/credbuser.sh ${data.p_sid} ${data.p_username} ${data.p_password} ${data.p_type}
Klicken Sie auf "Next" und bestätigen dann mit "Finish".



Speichern Sie die Prozedur mit "Save and Close".



Im Prinzip ist die Prozedur fertig, aber leider fehlt noch ein Schritt. Ein Test der Prozedur wird zeigen, dass die Shellskript-Datei zwar korrekt kopiert wird, aber keine Ausführungsrechte (UNIX-spezifisch) hat. Diese Rechte müssen in einem Zwischenschritt gesetzt werden. Dazu wählen Sie Ihre Prozedur aus und editieren diese. Nach dem Step "Transfer_der_Datei" fügen Sie einen neuen Step ein.



Vergeben Sie einen Namen und wählen den Typ "Host Command". Klicken Sie auf "Next".



Geben Sie das Kommando "chmod +x" und den Dateinamen des Skripts an. Klicken Sie auf "Next".



Bestätigen Sie mit "Finish".



Speichern Sie die Prozedur.



Test und Nutzung der Deployment Prozedur

Unter "Enterprise"->"Provisioning and Patching"->"Procedure Library" finden Sie Ihre neue Prodezur. Selektieren Sie die und klicken auf "Go" (die Popup-Liste zeigt den Wert "Launch" an).



Geben Sie den Host an, auf dem die Datenbank liegt, für die ein neuer DB Benutzer angelegt werden soll und klicken auf "Next".



Jetzt geben Sie die Prozedurparameter ein. Hier sind es SID, Name des neuen Benutzers, Passwort, Typ des neuen Benutzers. Klicken Sie dann auf "Next".



Sie geben jetzt gültige Credentials an. Es wird die Nutzung von Named Credentials empfohlen.



Sie können die Ausführung dieser Prozedur auch für einen späteren Zeitpunkt planen. In diesem Beispiel soll sie sofort ausgeführt werden. Klicken Sie auf "Submit".



Sie geben einen Ausführungsnamen an, unter dem Sie diesen Job später in der Ausführungsliste finden werden.



Sie gelangen automatisch zur Ausführungsliste. Der Jobstatus wechselt von "Scheduled" über "Running" zu "Succeeded".



Modifizieren der verwendeten Skripte

Wenn Sie ein Skript modifizieren möchten, müssen Sie die neue Version in die Software Library hochladen. Entfernen Sie in der Komponente die alte Datei und fügen Sie die neue hinzu. Navigieren Sie in der Software Library dazu zu der Komponente, selektieren diese und klicken auf "Edit". Wählen Sie den Reiter "Select Files".



Wählen Sie die Datei und klicken auf "Remove". Dann fügen Sie die neue Datei wie oben beschrieben hinzu.



Aber Achtung: Die Deployment Prozedur wird zunächst weiterhin die alte Datei verwenden. Sie müssen also auch die Deployment Prozedur modifizieren, indem die im Step "Transfer_der_Datei" den Wizard einmal durchgehen, ohne aktiv Änderungen vorzunehmen. Im Schritt der Auswahl der Komponente wird automatisch die neue Version ausgewählt und verwendet.



Lizenzhinweis

Die Nutzung von Deployment Prozeduren ist im Rahmen des Lifecycle Management Packs separat lizenzpflichtig.

Weitere Informationen und hilfreiche Links

Weitere Informationen finden Sie unter:


Zurück zum Anfang des Artikels

Zurück zur Community-Seite