Posts mit dem Label Grid Control werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Grid Control werden angezeigt. Alle Posts anzeigen

2013-02-05

Data Pump Export mit Flashback-Zeit über Enterprise Manager

Im Database Control einer 11.2.0.2 Datenbank habe ich versucht einen lesekonsistenten Data Pump Export auf eine Flashback-Zeit als Job zu konfigurieren. Dabei bin ich auf zwei Probleme getroffen:

  1. Bei der Auswahl der Flashback-Zeit kann keine volle Stunde gewählt werden, da als Minuten 5 bis 60 in Fünferschritten angeboten werden. 00 Minuten fehlen und 60 Minuten ist ja Unsinn bei einer Zeitangabe. Siehe auch folgenden Bildschirmabzug:
    OEM-DP-Job-Fehler
  2. Wenn eine sinnvolle Flashback-Zeit (z.B. 11.03.2013 15:05 Uhr) angegeben ist, dann führt das Weiterleiten des Jobs zum Fehler ORA-39001, ORA-39150, ORA-08186:
     OEM-DP-Job-Fehler2

Den ersten Fehler kann ich in anderen Installationen (10gR2, 11gR1 und 11gR2) nicht nachvollziehen. Das kann also eventuell an einer ungünstigen Kombination der NLS Parameter liegen.

Den zweiten Fehler habe ich auch in anderen Installationen, so auch beim Database Control einer 10.2.0.3 Datenbank als auch im Grid Control 11g bei einer 11.1.0.7 und einer 11.2.0.1 Datenbank. Das scheint also ein Bug zu sein.
Der eigentliche Fehler ORA-08186 resultiert aus dem generierten Data Pump Script, speziell aus der folgenden Zeile:
  dbms_datapump.set_parameter(handle => h1, name => 'FLASHBACK_TIME', value => '11-03-13 15.05');
Es wird implizite und keine explizite Typkonvertierung durchgeführt. Das Format der Datum/Zeitangabe, endspricht nicht dem Default. Dieser kann ermittelt werden mit dem folgenden Select (siehe MOS Note ID 464132.1):
  SELECT * FROM V$NLS_PARAMETERS where parameter = 'NLS_TIMESTAMP_FORMAT';
In meinem Fall ist das Ergebnis:
  PARAMETER VALUE
  NLS_TIMESTAMP_FORMAT DD.MM.RR HH24:MI:SSXFF

Das Format entspricht der deutschen Territory Einstellung. Diese wird aber weder im Database Control noch im Grid Control berücksichtigt.

Wenn man den Data Pump Export mit Flashback-Zeitpunkt über den Enterprise Manager machen möchte, bleibt also nichts anderes übrig als einen manuellen SQL-Skript Job anzulegen und darin dann entweder den Zeitpunkt im zum Default korrekten Format anzugeben oder aber eine explizite Typkonvertierung durchzuführen, z.B.:
  dbms_datapump.set_parameter(handle => h1, name => 'FLASHBACK_TIME', value => '11.03.13 15:00:00');

Ich hoffe diese Information hilft anderen bei der Problemanalyse.

2012-11-15

Minimalinvasive Überwachung von Datenbanken für optimale Verfügbarkeit

Überwachung von Datenbanksystemen ist ein wichtiges Thema um deren Verfügbarkeit zu gewährleisten. Über Werkzeuge zur Überwachung wie z. B. Enterprise Manager oder Nagios wurde schon viel berichtet. Die Werkzeuge ermöglichen es, viele vordefinierte Messwerte (Metriken) regelmäßig zu erfassen, mit Schwellwerten zu versehen und bei deren Überschreiten Alarme zu senden. Bei jedem dieser Werkzeuge stellt sich aber die Frage, was will ich bzw. was muss ich mindestens überwachen, um die für mein Unternehmen optimale Verfügbarkeit zu gewährleisten?
Sicher kann man alle möglichen Messwerte erfassen lassen. Aber eine Überwachung soll möglichst minimalinvasiv, d.h. mit kleinstmöglichem Aufwand eingreifend, erfolgen und damit das Datenbanksystemen wenig belasten.

Im Rahmen der proaktiven Überwachung unserer „Oracle Administration Services“ haben wir uns bei verschiedensten Kundenumgebungen Gedanken dazu gemacht, welche Überwachung unter dem Aufwand-/Nutzen-Aspekt sinnvoll sind. Aufwand meint hier Kosten als auch Systembelastung und Nutzen ist die sichergestellte Verfügbarkeit.
Mit diesem Vortrag möchte ich darstellen, welche Messwerte in welchen Konfigurationen minimal überwacht werden sollten und welche Ausfälle damit vermieden werden können. Aus unseren Erfahrungen berichte ich auch, welche Ausfälle sich nicht gänzlich vermeiden lassen. Dabei werden die verschiedensten Konfigurationen und Komponenten von Datenbanksystemen berücksichtigt. z.B.: Single Instanz, RAC, Data Guard, Fail Safe, Filesystem, ASM, Netzwerk, Unix/Linux, Windows.

Sollte Sie das Thema interessieren, dann kommen Sie doch zur DOAG Konferenz 2012, die in nicht mal einer Woche startet. Wie in den vergangenen Jahren ist TEAM mit mehreren Vorträgen dabei. Ich halte dort den Vortrag mit dem oben genannten Titel. Und wie in den letzten Jahren wird TEAM auch mit einem Stand vor Ort in Nürnberg vertreten sein, an dem Sie die Chance haben, mit uns, den Autoren, in die Diskussion einzusteigen.

2012-k-banner_speaker Wir sehen uns
  • beim Vortrag am Donnerstag, 22. November 2012,
    10:00 - 10:45 Uhr Uhr im Raum St. Petersburg

oder
  • am Stand von TEAM, Stand 204, in der 2. Etage (gelb)

Weitere Details finden Sie auf den DOAG Seiten oder auch selbstverständlich hier bei TEAM.

2011-12-01

Überwachungsvorlagen im Enterprise Manager Grid Control 11g: Quellcode zum Vergleich der Metrik-Werte aus den Überwachungsvorlagen und den Zielsystemen

Im Enterprise Manager Grid Control kann die Konfiguration von Metriken und deren Schwellwerten über alle Datenbanken und anderen Ziele hinweg mit Überwachungsvorlagen vereinfacht und vereinheitlicht werden. Was ist jedoch, wenn in einer gewachsenen Oracle-Infrastruktur nachträglich die Überwachung vereinheitlicht werden soll?

Dann ist ein aufwändiger Abgleich bereits vorhandener Metrikeinstellungen zwischen einer Vorlage und dem Zielsystem bzw. zwischen den Zielsystemen untereinander nötig. Im Enterprise Manager Grid Control kann immer nur ein Zielsystem mit einer Vorlage verglichen werden. Das ist somit sehr mühselig.

Mit Hilfe des folgenden Codes kann eine komplette Ansicht der Metrikwerte der gewünschten Vorlagen und der gewünschten Zielsysteme generiert werden.

Code:

1. Anlegen der Tabellen:

-- Tabelle anlegen
create table TEAM_METRIC_VERGLEICH
(
  ZEILE            NUMBER,
  TYP              VARCHAR2(7),
  TEMPLATE_NAME    VARCHAR2(64),
  TARGET_NAME      VARCHAR2(256),
  TARGET_TYPE      VARCHAR2(64),
  METRIC_NAME      VARCHAR2(64),
  COLUMN_LABEL     VARCHAR2(323),
  SPALTEN_LABEL    VARCHAR2(323),
  COLLECTION_NAME  VARCHAR2(64),
  KEY_VALUE        VARCHAR2(256),
  WARN             VARCHAR2(4000),
  CRIT             VARCHAR2(4000),
  DIFF             CHAR(1),
  VATER            NUMBER,
  GRUPPE           NUMBER,
  OCCURRENCE_COUNT NUMBER,
  METRIC_GUID      RAW(16),
  TARGET_GUID      RAW(16),
  TEMPLATE_GUID    RAW(16)

);

-- Create table
create table TEAM_TARGETS_METRIC
(
  TARGET_NAME     VARCHAR2(256) not null,
  TARGET_TYPE     VARCHAR2(64) not null,
  TYPE_QUALIFIER1 VARCHAR2(64),
  HOST_NAME       VARCHAR2(256),
  GRUPPE          VARCHAR2(256),
  DATENBANK       VARCHAR2(256),
  METRIC_KNZ      NUMBER,
  RULES_KNZ       NUMBER,
  TARGET_GUID     RAW(16) not null
);

Bsp.:

insert into TEAM_TARGETS_METRIC
select    target_name, target_type, t.type_qualifier1, t.host_name,
  decode(target_type, 'host', '------------------', target_name) gruppe,
  decode(target_type, 'host', '------------------', target_name) datenbank,
            -1 metric_knz,
            0 rules_knz,           
      target_guid
from MGMT$TARGET t
where  t.target_type in ( 'host' ,'oracle_database','rac_database');

2. Skript zur Vergleichsberechnung:

declare
/*
Kurzbeschreibung:
Innerhalb dieses Skripts wird die Tabelle TEAM_METRIC_VERGLEICH mit den Metrik-Daten der Vorlagen und der Zielsystem (Datenbankinstanzen, Host, ..) gefüllt. Danach werden die Werte der Metriken zwischen der Vorlage und der Ziele miteinander verglichen.

Voraussetzung:
1) Der Name der Vorlagen, deren Metriken mit den Ziel-Metriken verglichen werden sollen, haben einen eindeutigen Präfix. Bsp.: „Vorlage_“.
Der Präfix muss in das nachfolgende Skript eingetragen werden.
2) Es werden für den Vergleich nur die Ziele verwendet, die in der Spalte METRIC_KNZ der Tabelle TEAM_TARGET_METRIC eine 1 stehen haben.
  
select target_name from team_targets_metric where metric_knz = 1
*/

k_vorlage_praefix   varchar2(80) := 'Vorlage_';

begin
-- Alten Daten löschen
delete from TEAM_METRIC_VERGLEICH;

-- Fülle die Tabelle mit den Vorlagen-Daten
insert into TEAM_METRIC_VERGLEICH (  typ, template_name,  target_name, target_type, metric_name,
            column_label,  spalten_label,  collection_name, key_value, warn,  crit, occurrence_count, diff,  vater, template_guid, metric_guid )
select   'VORLAGE' typ,  t.template_name, '- Vorl.' target_name, t.target_type, t.metric_name,
            t.column_label,  t.column_label spalten_label,     t.collection_name, t.key_value,
            decode( t.warning_operator, 0 , '>' ,   1 ,' =' ,     2 , '<' ,   3, '<=',    4 , '>=' ,    5, 'CONTAINS' ,    6, 'NE' ,    7, 'MATCH', warning_operator)||' '||t.warning_threshold warn,
            decode( t.critical_operator, 0 , '>' ,   1 ,' =' ,     2 , '<' ,   3, '<=',    4 , '>=' ,    5, 'CONTAINS' ,    6, 'NE' ,    7, 'MATCH', critical_operator)||' '||t.critical_threshold crit,
            null , '-' diff, 0 vater, template_guid, metric_guid
from MGMT$TEMPLATE_METRIC_SETTINGS t
where  template_name like k_vorlage_praefix||'%'
order by  t.target_type,  t.metric_name ,  t.column_label,  t.key_value;

-- Fülle die Tabelle mit den Ziel-Metrik-Daten
insert into TEAM_METRIC_VERGLEICH (  typ, template_name,  target_name, target_type, metric_name,
            column_label,  spalten_label,  collection_name, key_value, warn,  crit, occurrence_count, diff,  vater, target_guid, metric_guid )
 select  'TARGET' typ, '' ,  t.target_name, t.target_type, t.metric_name,
            t.column_label, t.column_label spalten_label, t.collection_name , t.key_value,
            decode( t.warning_operator, 0 , '>' ,   1 ,' =' ,     2 , '<' ,    3, '<=',    4 , '>=' ,    5, 'CONTAINS' ,    6, 'NE' ,    7, 'MATCH', warning_operator)||' '||t.warning_threshold warn,
            decode( t.critical_operator, 0 , '>' ,   1 ,' =' ,     2 , '<' ,    3, '<=',    4 , '>=' ,    5, 'CONTAINS' ,    6, 'NE' ,    7, 'MATCH', critical_operator)||' '||t.critical_threshold crit        
           ,occurrence_count ,'-' diff  , -1 vater, target_guid, metric_guid
     from MGMT$TARGET_METRIC_SETTINGS t
     where target_name in (select target_name from team_targets_metric where metric_knz = 1  )
order by  t.target_type,  t.metric_name ,  t.column_label,  t.key_value;

-- Berechnung

--    Vorbereitung
update TEAM_METRIC_VERGLEICH set key_value = ' '
where key_value is null ;

update TEAM_METRIC_VERGLEICH set spalten_label = replace(spalten_label,' - '||key_value),
      vater = zeile,
      diff = '.'
where typ = 'VORLAGE';

-- Sonderbehandlung für User Defind Metriken
update TEAM_METRIC_VERGLEICH set spalten_label = collection_name
where typ = 'TARGET'
  and metric_name in ( 'SQLUDM', 'SQLUDMNUM', 'SQLUDMSTR');
  

update TEAM_METRIC_VERGLEICH set key_value = ''
where spalten_label = key_value;

-- Template-Name zu den Ziel-Zeilen hinzufügen
update TEAM_METRIC_VERGLEICH t set (template_name, template_guid) =
   (  select distinct template_name, template_guid
         from TEAM_METRIC_VERGLEICH v
      where v.typ = 'VORLAGE'
              and t.metric_guid = v.metric_guid
   )
where typ = 'TARGET';

-- Differenz berechnen: für Metriken mit einem KEY_VALUE- Wert
update TEAM_METRIC_VERGLEICH t set diff =
   ( select  decode( nvl(v.key_value,'#') ,  nvl(t.key_value,'#'),
                  decode( nvl(v.warn,'#') ,  nvl(t.warn,'#'),
                      decode( nvl(v.crit,'#'), nvl(t.crit,'#'), '.', 'X'), 'X'), 'X')
        from TEAM_METRIC_VERGLEICH v
        where v.typ = 'VORLAGE'
              and t.metric_guid = v.metric_guid
              and t.key_value  = v.key_value
              and t.spalten_label  = v.spalten_label        
   )
where typ = 'TARGET'
  and template_name is not null
  ;

-- Differenz berechnen: für die restlichen Metriken
update TEAM_METRIC_VERGLEICH t set diff =
   ( select  decode( nvl(v.key_value,'#') ,  nvl(t.key_value,'#'),
                  decode( nvl(v.warn,'#') ,  nvl(t.warn,'#'),
                      decode( nvl(v.crit,'#'), nvl(t.crit,'#'), '.', 'X'), 'X'), 'X')
        from TEAM_METRIC_VERGLEICH v
        where v.typ = 'VORLAGE'
              and t.metric_guid = v.metric_guid
              and v.key_value  = ' '
              and t.spalten_label  = v.spalten_label
   )
where typ = 'TARGET'
  and template_name is not null
  and diff is null
  ;

commit;

end;

3. Anzeige:

select nvl(p.gruppe,'X') nr, nvl(p.nr,999) nr, m.*
from   team_pruefungen  p,
(     select  v.template_name,  v.target_name,  v.spalten_label, v.key_value, v.warn, v.crit, v.diff, metric_guid gruppe, v.occurrence_count, v.metric_name,v.target_type, 
               v.spalten_label sortierung, decode(target_type,'host','host','datenbank') sort_1
      from TEAM_METRIC_VERGLEICH v
      where template_name is not null and typ = 'VORLAGE'
      union all
      select  v.template_name, v.target_name, v.spalten_label, v.key_value, v.warn, v.crit, v.diff, metric_guid gruppe, v.occurrence_count, v.metric_name,v.target_type, 
            v.spalten_label, decode(target_type,'host','host','datenbank') sort_1
      from TEAM_METRIC_VERGLEICH v
      where template_name is not null and  typ = 'TARGET'
      union all
      select  distinct v.template_name,  '***************','********','********','********','********','********', 
              metric_guid gruppe,  null, '********', v.target_type, 
              v.spalten_label, decode(target_type,'host','host','datenbank') sort_1
      from TEAM_METRIC_VERGLEICH v
      where typ = 'VORLAGE'
)    m
where m.gruppe = p.metric_guid(+)
order by 1, 2, 10, 4, 6
;

Den Artikel zu diesem Code finden Sie in der DOAG News Ausgabe 6/Dezember 2011
Thema: „Überwachungsvorlagen im Enterprise Manager Grid Control 11g,
Vergleich und Vereinheitlichung von überwachten Metriken“
Autoren: Claudia Gabriel und Ralf Appelbaum, TEAM GmbH

2011-01-19

Grid Control Agent läuft, aber Windows Service nicht mehr! Was tun?

Gelegentlich kommt es vor, dass der Windows Service für den GC Agent (z.B. Oracleagent10gAgent) beendet ist, obwohl im Taskmanager der emagent.exe Prozess noch läuft. In diesem Fall kann der Agent dann nicht über Services und auch nicht über "emctl stop/start agent" beendet bzw. neu gestartet werden. Der Status mit "emctl status agent" wird korrekt als "Agent is Running and Ready" ausgegeben.

Beim Killen über den Taskmanager wird der Prozess immer wieder automatisch neu gestartet!

Dann hilft:
> emctl istop agent
in der Kommandozeile.

siehe hierzu auch “My Oracle Support” ID 459387.1