Oracle Enterprise Manager Grid Control 11g: Blackouts setzen mit EMCLI und EMCTL
Ralf Durben, 26.01.2011

Oracle Enterprise Grid Control 11g bietet neben der grafischen Oberfläche auch ein Command Line Interface (emcli) an. Die allgemeine Nutzung und Verwendung in verschiedenen Fällen ist sehr gut in folgenden Veröffentlichungen erklärt:

Dazu ergänzend möchte ich hier das Handling von Blackouts mittels EMCLI beschreiben. Dieses findet auf der Seite des OMS statt. Aber auch auf der Seite der Agenten kann ein Blackout gesetzt werden mit EMCTL.



Setzen von Blackouts mit EMCLI



Zunächst einmal eine Auflistung der in EMCLI bzgl. Blackouts zur Verfügung stehenden Kommandos:
  Blackout Verbs
    create_blackout       -- create a blackout
    delete_blackout       -- delete a blackout
    get_blackout_details  -- get detailed info for a blackout
    get_blackout_reasons  -- list all blackout reasons
    get_blackout_targets  -- list targets for a blackout
    get_blackouts         -- list blackouts
    stop_blackout         -- stop a blackout


Erstellen eines Blackouts



Die allgemeine Syntax zum Erstellen eines Blackouts lautet
emcli create_blackout
      -name="name"
      add_targets="name1:type1;name2:type2;..."...
      reason="reason"
      [-description="description"]
      [-jobs_allowed]
      [-propagate_targets]
      schedule=
         frequency:];
         duration:[HH...][:mm...];
         [start_time:];
         [end_time:];
         [repeat:<#m|#h|#d|#w>];
         [months:<#,#,...>];
         [days:<#,#,...>];
         [tzinfo:]
         [tzoffset:#|[-][HH][:mm]]
         [tzregion:<...>]
Ich erkläre hier nicht die komplette Syntax, denn dazu gibt es das Handbuch auf OTN. Vielmehr gebe ich hier Beispiele für gängige Aufgaben an. So kann ein Blackout zum Beispiel auf folgende Arten erstellt werden:

1. Beispiel

Für die Datenbank ORCL soll ein Blackout für die Dauer von 30 Minuten gesetzt werden, weil z.B. ein Offline Backup erstellt wird. (OK, jetzt werden einige denken, warum man heute noch ein Offline Backup erstellen sollte, da es doch auch Online geht. Es gibt aber durchaus noch Oracle DBAs, die Offline Backup erstellen, und es ist ja nur ein Beispiel)
emcli create_blackout 
      -name=Blackout1 
      -add_targets=ORCL:oracle_database
      -schedule="duration::30"
      -reason="Die Datenbank wird gesichert"

2. Beispiel

Für die Datenbank ORCL soll ein Blackout für ein festes Zeitintervall gesetzt werden.
emcli create_blackout 
      -name=Blackout1 
      -add_targets=ORCL:oracle_database
      -schedule="frequency:once;start_time:11-01-24 23:00;duration::60;tzinfo:target:tzoffset:1"
      -reason="Die Datenbank wird gesichert"

3. Beispiel

Man kann auch für mehrere Targets mit einem Kommando ein Blackout setzen. Der Timezone Offset gibt dabei an, welche Zeitzone für die Bestimmung der Ausführungszeit verwendet werden soll, hier also die Zeitzone der ersten angegebenen Datenbank, also ORCL1:
emcli create_blackout 
      -name=Blackout1 
      -add_targets="ORCL1:oracle_database;ORCL2:oracle_database"
      -schedule="frequency:once;start_time:11-01-24 23:00;duration::60;tzinfo:target:tzoffset:1"
      -reason="Die Datenbank wird gesichert"

4. Beispiel

Man kann ein Blackout auch für alle von einem Target abhängigen Targets setzen. Hier wird der Blackout bis zu einem festen Endzeitpunkt gesetzt:
emcli create_blackout 
      -name=Blackout2 
      -add_targets=meinserver:host
      -propagate_targets 
      -schedule="end_time:2011-01-26 19:00;tzinfo:specified;tzregion:Europe/Berlin"
      -reason="Maschine wird repariert"


Bei den Targets muss man ja den Target Typ angeben. Es stellt sich die Frage, wie diese internen Typnamen aussehen. Dazu gibt es einen einfachen Trick: Man kann nämlich mit emcli eine Auflistung aller in Grid Control verwalteten Targets bekommen, mit
emcli get_targets 
Status ID  Status      Target Type      Target Name 
1          Up          host             gridcontrol.durben.de
1          Up          oracle_database  ORCL
1          Up          oracle_emd       durben1.durben.de:3872
1          Up          oracle_listener  LISTENER_durben1.durben.de
...                                           
Die möglichen Target Typen werden damit also frei Haus geliefert.



Anzeigen aller Blackouts



Die derzeitig aktiven Blackouts kann man sich anzeigen lassen mit
emcli get_blackouts
      [-target="name1:type1" | -hostnames="host1;host2;..."]
      [-noheader]
      [-script | -format=
           [name:];
           [column_separator:"column_sep_string"];
           [row_separator:"row_sep_string"];
      ]
Man kann also die Suche einschränken nach Targets. Das ist bei einer großen Anzahl aktiver Blackouts sicherlich interessant. Einen Komplettüberblick bekommt man einfach mit
emcli get_blackouts
Name       Created By  Status   Status ID  Next Start           Duration  Reason                   Frequency  Repeat  Start Time           End Time             Previous End  TZ Region      TZ Offset           
Blackout2  RDURBEN     Started  4          2011-01-26 15:07:30  03:53     Maschine wird repariert  once       none    2011-01-26 15:07:30  2011-01-26 19:00:00  none          Europe/Berlin  +00:00




Stoppen und Löschen von Blackouts



Blackouts werden immer mit einer Dauer oder Endzeitpunkt angegeben. Mann kann sie aber auch vorzeitig beenden mit
emcli stop_blackout
      -name="name"
      [-createdby="blackout_creator"]
Also im obigen Beispiel kann man den Blackout stoppen mit
emcli stop_blackout -name="Blackout2"
Der Blackout wird als gestoppt angezeigt:
emcli get_blackouts
Name       Created By  Status   Status ID  Next Start  Duration  Reason                   Frequency  Repeat  Start Time           End Time             Previous End         TZ Region      TZ Offset
Blackout2  RDURBEN     Stopped  10         none        03:53     Maschine wird repariert  once       none    2011-01-26 15:07:30  2011-01-26 19:00:00  2011-01-26 15:14:08  Europe/Berlin  +00:00
und kann nun gelöscht werden mit
emcli delete_blackout -name="Blackout2"




Setzen von Blackouts mit EMCLI



Soll ein Blackout auf der Agentenseite gesetzt werden, zum Beispiel als Teil eines Wartungsskripts, so kommt die Utility EMCTL zum Einsatz. Leider gibt es hier kein Kommando zum Auflisten aller von diesem Agenten überwachten Targets, aber dass kann der Datei $AGENT_HOME/sysman/emd/targets.xml entnommen werden.

Erstellen eines Blackouts



Ein Blackout wird erstellt mit
emctl start blackout  [-nodeLevel] [[:]].... [-d ] [-nowait]
also zum Beispiel
./emctl start blackout Blackout1 radu1:oracle_database
Oracle Enterprise Manager 11g Release 1 Grid Control 11.1.0.1.0
Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.
Blackout Blackout1 added successfully
EMD reload completed successfully


Anzeigen von Blackouts



Die laufenden Blackouts können angezeigt werden mit
emctl stop blackout  [-nowait]
Im Beispiel sieht das dann so aus:
./emctl status blackout
Oracle Enterprise Manager 11g Release 1 Grid Control 11.1.0.1.0
Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.
Blackoutname = Blackout1
Targets = (radu1:oracle_database,)
Time = ({2011-01-26|16:16:07,|} )
Expired = False


Löschen eines Blackouts



Ein Blackout wird gelöscht mit
emctl status blackout [[:]]....
Im obigen Beispiel also
./emctl stop blackout Blackout1
Oracle Enterprise Manager 11g Release 1 Grid Control 11.1.0.1.0
Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.
Blackout Blackout1 stopped successfully
EMD reload completed successfully


Impressum