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

Oracle Enterprise Grid Control bietet neben der grafischen Oberfläche auch ein Command Line Interface (emcli) an. Im ersten Teil dieses Tipps wurde die allgemeine Benutzung (Aufruf und Anmeldung) sowie der Umgang mit Administratoren in EM und deren gespeicherter Credentials beschrieben. In diesem zweiten Teil zeige ich Ihnen, wie Sie mit emcli das Job-System in Grid Control nutzen können.

Mit emcli können Sie ohne Nutzung der grafischen Oberfläche neue Jobs erstellen. Dieses ist vor allem für eine Anbindung von Grid Control an weitere Job Kontroll Systeme sinnvoll. Diese Job Kontroll Systeme können einen neuen Job definieren und das Job-System von Grid Control zur Ausführung nutzen.

Dabei stehen zwei Typen von Jobs zur Verfügung:

  • Ausführung von Shell-Skripten auf Betriebssystem-Ebene
  • Ausführung von SQL-Skripten in einer Oracle Datenbank


Ausführung von SQL-Skripten in einer Oracle Datenbank
Bei der Ausführung eines SQL-Skripts startet der Oracle Management Agent auf dem Zielsystem eine SQL*Plus-Sitzung und führt das Skript aus. Das Skript selbst wird von Grid Control an den Oracle Management Agent geschickt, der das Skript ausführen soll. Das folgende sehr einfache Beispiel zeigt, wie es funktioniert: Zunächst einmal soll das folgende Skript ausgeführt werden, welches den Status der Instanz angezeigt, sowie die Zeit seit dem letzten Startup:
/home/oracle/testskript.sql:

select instance_name,status,
       to_char(startup_time,'dd.mm.yyyy hh24:mi:ss') as startup_time,
       to_char(sysdate,'dd.mm.yyyy hh24:mi:ss') as time_now,
       sysdate-startup_time as days_since_startup
from v$instance;
Dieses Skript soll nun per Job in einer Datenbank ausgeführt werden, die in Grid Control unter dem Namen "emrep" registriert ist. Das Kommando sieht wie folgt aus:
emcli submit_job 
 -job="emcli_job_host_1:SQLScript" 
 -parameters="large_sql_script:LARGE_SCRIPT_FILE;db_username:system;db_password:pwd;db_role:normal;
              host_username:oracle;host_password:pwd" 
 -input_file="LARGE_SCRIPT_FILE:/home/oracle/testskript.sql" 
 -targets="emrep:oracle_database"
Wichtig: An dieser Stelle füge ich Zeilenumbrüche zur besseren Lesbarkeit ein. Bei der Ausführung des Kommandos muss aber alles in einer Zeile formuliert werden.

Die Parameter haben die folgende Bedeutung:
  • Mit dem Parameter "job" legen Sie den Namen des Jobs und seinen Typ fest. Neben dem Typ "SQLScript" gibt es noch den Typ "OSCommand", der weiter unten näher beschrieben wird.
  • Beim Parameter "parameters" geben Sie mit "large_sql_script" einen Bezeichner an, der für die Verbindung mit der Skriptdatei verwendet wird (beim Parameter "input_file"). Des Weiteren werden die Credentials angegeben. Werden diese wegelassen, werden die in Grid Control gespeicherten Credentials verwendet.
  • Mit "input_file" geben Sie die Skriptdatei an. Der Speicherort bezieht sich auf das System, von dem aus Sie das emcli-Kommando absetzen. Die Skriptdatei wird automatisch auf das angegebene Zielsytem übertragen. Die Skriptdatei kann bis zu 4GB groß sein.
  • Mit dem Parameter "targets" legen Sie die Zielsysteme fest. Dieses kann ein System sein, oder es können mehrere sein:
emcli submit_job 
 -job="emcli_job_host_1:SQLScript" 
 -parameters="large_sql_script:LARGE_SCRIPT_FILE;db_username:system;db_password:pwd;db_role:normal;
              host_username:oracle;host_password:pwd" 
 -input_file="LARGE_SCRIPT_FILE:/home/oracle/testskript.sql" 
 -targets="test1:oracle_database;test2:oracle_database"
Solange bei dem Kommando "submit_job" keine Angaben zum Scheduling des Jobs gemacht werden, wird der Job sofort gestartet. Soll der Job zum Beispiel alle zwei Tage ausgeführt werden - beginnend mit morgen 10Uhr - wird der Parameter "schedule" hinzugefügt:
emcli submit_job 
 -job="emcli_job_host_1:SQLScript" 
 -parameters="large_sql_script:LARGE_SCRIPT_FILE;db_username:system;db_password:pwd;db_role:normal;
              host_username:oracle;host_password:pwd" 
 -input_file="LARGE_SCRIPT_FILE:/home/oracle/testskript.sql" 
 -targets="emrep:oracle_database"
 -schedule="frequency:interval;start_time:10-02-03 10:00;repeat:2d"
Das Ergebnis des Kommandos "submit_job" ist die Anzeige der Job-ID sowie der Execution-ID des neuen Jobs.
Job ID                            Execution ID
7E443DB47B4749F0E040A50A88F40280  7E443DB47B4A49F0E040A50A88F40280
Anhand dieser Informationen können weitere Aktionen mit diesem Job ausgeführt werden. So können Sie das Ergebnis des Jobs anzeigen lassen mit
emcli get_job_execution_detail -execution=<execution_id> -xml -showOutput

emcli get_job_execution_detail -execution=7E443DB47B4A49F0E040A50A88F40280 -xml -showOutput
<?xml version = '1.0' encoding = 'UTF-8'?>
<jobExecution jobOwner="RDURBEN" status="5" startTime="2010-02-02 10:21:29.0" 
  id="7E443DB47B4A49F0E040A50A88F40280" jobName="EMCLI_JOB_HOST_1">
   <target hostName="gridcontrol.de.oracle.com" type="oracle_database" name="emrep"/>
   <steps>
      <step command="remoteOp" status="5" name="Command">
         <stepOutput>
            <output>
SQL*Plus: Release 11.1.0.7.0 - Production on Tue Feb 2 11:21:29 2010

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

SQL> SQL> SQL> SQL> Connected.
SQL> SQL> SQL> SQL>   2    3    4    5
INSTANCE_NAME    STATUS       STARTUP_TIME        TIME_NOW            DAYS_SINCE_STARTUP
---------------- ------------ ------------------- ------------------- ------------------
emrep            OPEN         16.12.2009 10:59:09 02.02.2010 11:21:30 48.0155208


SQL> SQL> SQL> SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining
and Real Application Testing options
</output>
         </stepOutput>
      </step>
   </steps>
</jobExecution>
In der grafischen Umgebung von Grid Control kann dieser Job natürlich auch eingesehen werden. In der Beschreibung wird mit "CLI JOB" deutlich gemacht, dass dieser Job per emcli erstellt wurde. Wenn Sie einen entsprechenden Screenshot sehen möchten, klicken Sie bitte auf das nachfolgende Bild.

                         

Ausführung von Shell-Skripten auf Betriebssystem-Ebene
Die Ausführung von Shell-Skripten funktioniert ähnlich. Betrachten Sie folgendes Beispiel:
emcli submit_job 
 -job="emcli_job_host_1:OSCommand" 
 -parameters="command:/bin/sh;args:-x;large_os_script:LARGE_SCRIPT_FILE;username:oracle;password:pwd" 
 -input_file="LARGE_SCRIPT_FILE:/home/oracle/wdg.sh" 
 -targets="gridcontrol.de.oracle.com:host"
Der Jobtyp wird mit "OSCommand" angegeben, und zur Angabe des Skripts in "parameters" wird "large_os_script" verwendet. Des Weiteren wird eine Shell gestartet, in der das Skript ausgeführt wird.

Sie haben aber auch die Möglichkeit, einzelne Kommandos direkt auszuführen, ohne Skriptdatei, wie das folgende Beispiel zeigt, mit dem das Verzeichnis /tmp/wdg gelöscht wird:
emcli submit_job 
 -job="emcli_job_host_0:OSCommand" 
 -parameters="command:rm;args:-rf /tmp/wdg;username:oracle;password:pwd" 
 -targets="gridcontrol.de.oracle.com:host"


Stoppen und Löschen von Jobs
Gestartete Jobs können mit dem Kommando "stop_job" beendet werden. Dieses ist auch für alle Jobs mit Problemen notwendig, um diese dann mit "delete_job" löschen zu können. Sowohl das Stoppen als auch das Löschen eines Jobs können über dessen Namen oder Job-ID (die von submit_job zurückgegeben wird) initiiert werden:
emcli stop_job -name=emcli_job_host_0

Job "EMCLI_JOB_HOST_0" stopped successfully
emcli stop_job -job_id=7E3993B292A3F157E040A50A88F478F3

Job "7E3993B292A3F157E040A50A88F478F3" stopped successfully
Bzw.
emcli delete_job -name=emcli_job_host_0

Job "EMCLI_JOB_HOST_0" deleted successfully
emcli delete_job -job_id=7E3993B292A3F157E040A50A88F478F3

Job "7E3993B292A3F157E040A50A88F478F3" deleted successfully
Hinweis auf das Handbuch:
Zum Enterprise Manager Command Line Interface gibt es auch ein Handbuch, in dem Sie diese und weitere Funktionalitäten finden.
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