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
|