Arbeiten mit dem Enterprise Manager Command Line Interface (EMCLI) - Teil 1
von Ralf Durben, ORACLE Deutschland GmbH

Oracle Enterprise Grid Control ist eine umfassende grafische Verwaltungsumgebung nicht nur für Oracle Produkte. In einer zentralen, rein webbasierten Konsole bekommen Sie einen Überblick über alle Zielsysteme und können diese optimal verwalten. Desweiteren steht Ihnen unter anderem ein vollwertiges Jobsystem zur Verfügung.

Auch wenn die meisten Verwaltungsaufgaben in einem grafischen Tool bewältigt werden wollen, gibt es dennoch Aufgabenbereiche, in denen ein zeilenbasiertes Arbeiten mit Skripten sinnvoll ist. Für derartige Aufgaben gibt es das Enterprise Manager Command Line Interface (EMCLI), welches integraler Bestandteil einer Grid Control Installation ist.

In einer kleinen Reihe von Tipps möchte ich Ihnen ausgewählte Funktionalitäten des EMCLI vorstellen. In diesem Tipp zeige ich Ihnen, wie Sie mit dem EMCLI gespeicherte Credentials und Administratoren in Grid Control verwalten können. Gerade in größeren Umgebungen stellt sich immer wieder die Frage, wie Änderungen von Datenbankpasswörtern in Grid Control berücksichtigt werden können, ohne großen Aufwand zu erzeugen. Schließlich speichern die EM-Benutzer Informationen zum Anmelden an die jeweiligen Zieldatenbanken in Grid Control ab, um diese nicht ständig eingeben zu müssen.

Allgemeines Arbeiten mit dem EMCLI
Zunächst jedoch zeige ich Ihnen, wie der EMCLI gestartet wird. Das Executable finden Sie im Verzeichnis $OMS_HOME/bin ($OMS_HOME entspricht dem Verzeichnis, in das der OMS installiert wurde). Starten Sie EMCLI mit
cd $OMS_HOME/bin
./emcli
bekommen sie eine Ausgabe aller möglichen Kommandos, die auch "Verb" genannt werden. Hier ein Auszug:
Summary of commands:


  argfile         -- execute EMCLI verb where verb and arguments are contained in a file
  help            -- get help using EMCLI
  login           --  Login and establish session with OMS
  logout          --  logout the EMCLI client from EM
  setup           -- setup EMCLI to work with an EM management server (OMS)
  sync            -- synchronize the EMCLI client with an OMS

  Agent Recovery Verbs
    resyncAgent           -- Agent Recovery

Da mit EMCLI Aktionen durchgeführt werden, die in der grafischen Umgebung ein Anmelden als EM-Benutzer erfordern, ist eine Anmeldung auch in EMCLI erforderlich. Bevor Sie also mit EMCLI weitere Aktionen durchführen können melden Sie sich erst einmal an mit
cd $OMS_HOME/bin
./emcli login -username={em-benutzername}
also zum Beispiel mit
cd $OMS_HOME/bin
./emcli login -username=rdurben 
Sie werden dann zur interaktiven Eingabe Ihres Passwortes aufgefordert. Nach erfolgreicher Verifizierung des Passwortes erhalten Sie einen normalen Betriebssystem-Prompt, sind aber in einer laufenden Sitzung des EMCLI.

Bei einer Integration in Skripte könnnen Sie das Passwort auch in der Kommandozeile Übergeben, also zum Beispiel
cd $OMS_HOME/bin
./emcli login -username=rdurben -password=manager
Aus Sicherheitsgründen empfiehlt sich dieses aber nicht. Besser ist es zum Beispiel unter UNIX die Eingabe des Passwortes in einem Skript wie folgt zu realisieren:
Skript: start_EMCLI.sh
 ./emcli login -username=rdurben << EOI
 manager
 EOI
Wenn Sie Ihre Aktionen in EMCLI beendet haben, sollten Sie sich auch explizit aus EMCLI abmelden mit
cd $OMS_HOME/bin
./emcli logout


Ändern gespeicherter Credentials
Aus Sicherheitsgründen sollten Passwörter von Zielsystemen in regelmäßigen Abständen geändert werden. Diese Änderungen betreffen dann auch die in dem Grid Control Repository gespeicherten Credentials, die entsprechend angepasst werden müssen. In einer Grid Control Umgebung mit einer Vielzahl von Zielsystemen ist dieses in der grafischen Umgebung eine mühsame Aktion. Einfacher und wesentlich effizienter ist eine Anpassung mit EMCLI.

Nachdem das Passwort im Zielsystem verändert wurde, können Sie dieses mit dem Kommando "update_password" in Grid Control eintragen. Genauer formuliert: Das neue Passwort wird in einer Tabelle im Grid Control Repository gespeichert. Diese Tabelle ist derart generisch definiert, dass für die Credentials verschiedener Zieltypen verschiedene Attribute verwendet werden. Dieses ist in EMCLI zu berücksichtigen, was die Nutzung von "update_password" auf den ersten Blick komplizierter erscheinen lässt, als es wirklich ist.

Die Änderung des Passworts eines Datenbankbenutzers wird wie folgt durchgeführt (hier wird das Passwort des DB Benutzers SYSTEM von "welcome2" auf "welcome1" gesetzt):
./emcli update_password 
  -target_type=oracle_database 
  -target_name=orcl 
  -credential_type=DBCreds 
  -key_column=DBUserName:system 
  -non_key_column=DBPassword:welcome2:welcome1 
Gültige Werte für die Parameter "target_type" und "credential_type", sowie der Spaltennamen, die in "key_column" und "non_key_column" angegeben werden, ermitteln Sie ganz einfach mit dem Kommando
./emcli show_credential_type_info
Target Type                  Cred Type Name       Cred Type Column Name    Key Column
host                         HostCreds            HostPassword             No
                                                  HostUserName             Yes
oracle_database              DBCreds              DBPassword               No
                                                  DBRole                   No
                                                  DBUserName               Yes
                             DBHostCreds          HostPassword             No
                                                  HostUserName             Yes 
Das Ändern von Betriebssystem-Credentials für den Server erfolgt also wie folgt:
./emcli update_password 
  -target_type=host 
  -target_name=myhost 
  -credential_type=HostCreds 
  -key_column=HostUserName:root 
  -non_key_column=HostPassword:pwd1:pwd2 
In Grid Control werden Betriebssystem-Credentials aber in verschiedenen Zusammenhängen verwendet:
  • Die Credentials auf "host"-Ebene betreffen den Zugriff in Grid Control Über die Host-Homepage.
  • Host-Credentials auf Datenbank-Ebene betreffen Jobs, die vom Management Agent ausgeführt werden und einen Zugriff auf das Betriebssystem erfordern.
Im zweiten Fall passen Sie das neue Passwort an, indem Sie den Target-Typ "oracle_database" verwenden:
./emcli update_password 
  -target_type=oracle_database 
  -target_name=orcl 
  -credential_type=DBHostCreds 
  -key_column=HostUserName:oracle 
  -non_key_column=HostPassword:pwd1:pwd2 
Im obigen Beispiel werden sowohl das alte als auch das neue Passwort auf Kommandozeilenebene angegeben. Dieses ist nicht gerade sicher und daher nicht zu empfehlen. Aus diesem Grund können Sie auch eine Datei erstellen, in der das Passwort steht. Dazu geben sie im Parameter "non_key_column" einen Bezeichner an, der dann im Parameter "input_file" mit einer Datei verknüpft wird. Diese Datei enthält dann den Wert des Parameters.
./emcli update_password 
  -target_type=oracle_database 
  -target_name=orcl 
  -credential_type=DBHostCreds 
  -key_column=HostUserName:oracle
  -non_key_column=FILE1 
  -input_file=FILE1:wdg1.txt 

Inhalt der Datei wdg1.txt:
 HostPassword:pwd1:pwd2
In diesem Tipp zeige ich Ihnen nur Beispiele für die Zieltypen "Oracle Datenbank" und "Host". Die Nutzung dieses Kommandos für alle anderen Zieltypen ist aber einfach ableitbar und die notwendigen Werte für die Parameter lassen sich leicht durch das oben beschriebene Kommando "show_credential_type_info" ermitteln.

Neben dem Ändern von Credentials können Sie gespeicherte Credentials auch entfernen. Dieses ist zum Beispiel dann sinnvoll, wenn ein Administrator den Aufgabenbereich wechselt und nun für andere Zielsysteme zuständig ist. Ein Ändern der Passwörter auf vorsätzlich falsche Werte ist in diesen Fällen nur eine suboptimale Lösung. Sie können Credentials leicht entfernen mit
./emcli clear_credential 
  -target_type=oracle_database 
  -credential_set=DBCredsNormal  
  -target_name=orcl
  [-user={em-benutzername}]
Die Angabe des Zielsystems ist optional. Wenn hier nichts angegeben wird, werden alle Credentials zu diesen Credential-Set entfernt. Wenn kein EM-Benutzer angegeben wird, werden nur die Credentials des in EMCLI angemeldeten Benutzers gelöscht. Mit der Angabe eines EM-Benutzernamens löschen Sie die Credentials eines anderen EM-Benutzers - dieses ist natürlich nur als Superuser möglich.

Bitte beachten Sie auch den Unterschied zwischen den Parametern "credential_type" bei dem Update-Kommando und "credential_set" bei dem Clear-Kommando. Den jeweils gültigen Wert für "credential_set" erfahren Sie mit
./emcli show_credential_set_info
Target Type                  Cred Set Name            Set Column Name          Key Column
oracle_database              DBCredsMonitoring        Role                     No
                                                      UserName                 Yes
                                                      password                 No
                             DBCredsNormal            password                 No
                                                      role                     No
                                                      username                 Yes
                             DBCredsSYSDBA            sysDBAPassword           No
                                                      sysDBARole               No
                                                      sysDBAUserName           Yes
                             DBCredsUDM               Role                     No
                                                      UserName                 Yes
                                                      password                 No
                             DBHostCreds              HostPassword             No
                                                      HostUsername             Yes 


Das Erstellen neuer Credentials
Bislang ging es nur um das Verändern bereits bestehender Credentials. Das Erstellen neuer Credentials ist mit einem Update-Kommando nicht möglich. Hierzu gibt es das Kommando "set_credential":
./emcli set_credential 
  -target_type=oracle_database 
  -credential_set=DBCredsNormal 
  -target_name=orcl 
  -columns="username:system;password:welcome1;role:normal"
Die verfügbaren Credential Sets können Sie wie oben beschrieben wieder mit dem Kommando "show_credential_set_info" ermitteln. Wichtig ist nun, dass alle Spalten eines Credential Sets gefüllt werden müssen. Bei Datenbank-Credentials ist neben Benutzername und Passwort auch eine Rolle anzugeben, welche aber nichts mit Datenbankrollen gemein hat. Vielmehr sind hier die Rollen "sysdba", "sysoper" bzw. "normal" gemeint.

Wie beim Löschen von Credentials erstellen Sie mit "set_credentials" per Default neue Credentials für den in EMCLI angemeldeten Benutzer. Mit dem Parameter "user" können Sie als EM-Superuser auch Credentials für andere EM-Benutzer erstellen.

./emcli set_credential 
  -target_type=oracle_database 
  -credential_set=DBCredsNormal 
  -target_name=orcl 
  -user=test 
  -columns="username:system;password:welcome1;role:normal"


Das Erstellen neuer EM Benutzer
Auch das Erstellen von EM-Benutzern möchte man eventuell per Skript realisieren, vor allem wenn dieses im Zuge eines Identity Management Workflows geschehen soll. Voraussetzung hierfür ist natürlich, dass Sie in EMCLI als EM-Superuser angemeldet sind.

Einen neuen EM-Superuser erstellen Sie mit
./emcli create_user 
  -name="test2" 
  -password="oracle" 
  -privilege="SUPER_USER"
Einen Nicht-Superuser erstellen Sie unter Angabe der speziell für den neuen Benutzer gültigen Privilegien. Dabei gibt es in Grid Control sowohl System- als auch Objektprivilegen. Die Systemprivilegien beziehen sich nicht auf spezielle Objekte, sondern auf das gesamte System:
  • CREATE_ANY_ROLE
  • CREATE_ANY_PRIVILEGE
  • MANAGE_CREDENTIAL_GROUP
  • CREATE_TARGET
  • DELETE_ANY_TARGET
  • VIEW_ANY_TARGET
  • USE_ANY_BEACON
  • EM_MONITOR
  • SUPER_USER
Objektprivilegien sind
  • VIEW_TARGET
  • OPERATOR_TARGET
  • MAINTAIN_TARGET
  • CLONE_FROM_TARGET
  • FULL_TARGET
  • CREATE_TARGET_IN_GROUP
und diese müssen zusammen mit dem Namen und Typ des Zielsystems, für das dieses Privileg vergeben wird, spezifiziert werden.

Zusätzlich gibt es noch Privilegien für Jobs
  • VIEW_JOB
  • FULL_JOB
die mit der jeweiligen Job-ID vergeben werden. Ein Beispiel zur Erstellung eines Nicht-Superusers ist dann
./emcli create_user 
  -name="test2" 
  -password="oracle" 
  -privilege="view_target;orcl:oracle_database"
  -privilege="EM_MONITOR"
Weiterhin können Sie auch noch Angaben hinsichtlich Rolle und Erreichbarkeit machen:
./emcli create_user 
  -name="test2" 
  -password="oracle"
  -email="test2@mycompany.de"
  -roles="public" 
  -privilege="view_target;orcl:oracle_database"
  -privilege="EM_MONITOR"
Diesen EM-Benuzer löschen Sie mit
./emcli delete_user 
  -name="test2"
Hinweis auf Handbuch:
Zum Enterprise Manager Command Line Interface gibt es auch ein Handbuch, in dem Sie weitere Funktionalitäten finden.
Lizenzhinweis:
Lizenzhinweis: EMCLI als Tool ist Bestandteil der Basisfunktionalität von Grid Control. Die in EMCLI zur Verfügung stehenden Funktionalitäten sind teilweise Bestandteil von zusätzlich lizenzpflichtigen Packs. Die in diesem Tipp beschriebenen Funktionalitäten sind aber Basisfunktionalität, für die Sie keine zusätzlichen Lizenzen benötigen.
Versionshinweis:
Die in diesem Tipp angegebene Syntax bezieht sich auf die Version von Grid Control 10.2.0.5.

Zurück zur Community-Seite