2011-12-23

Oracle Scheduler Jobs ein-/ausschalten

ab Oracle Version 10g werden regelmäßig auszuführende, zeitgesteuerte Jobs über den Scheduler (Package: dbms_scheduler) und nicht mehr als Jobs (Package: dbms_jobs) eingerichtet. Immer wieder steht man vor der Aufgabe alle Scheduler-Jobs auf einmal zu deaktivieren, insbesondere z.B. nach dem Clonen einer Produktiv-DB in eine Test-DB.

Komplett ausgeschaltet werden kann der Scheduler mittels:
   dbms_scheduler.set_scheduler_attribute('SCHEDULER_DISABLED','TRUE');
Komplett eingeschaltet werden kann der Scheduler mittels:
   dbms_scheduler.set_scheduler_attribute('SCHEDULER_DISABLED','FALSE');
Zu beachten ist hier die, auf den ersten Blick, vertauschte Bedeutung von 'TRUE' und 'FALSE'!

Ein einzelner Job kann deaktiviert werden mittels:
   exec dbms_scheduler.disable('<job_name>');
und aktiviert wird er über:
   exec dbms_scheduler.enable('<job_name>');
Hiermit können jedoch nur Jobs des am SQL*Plus angemeldeten Benutzers (aktuelles Schema) ein- bzw. ausgeschaltet werden. Die Dokumentation liefert keinen Hinweis darauf, wie man z.B. als sys alle Scheduler-Jobs auch fremder Schamata ausschalten kann.

Etwas Herumexperimentieren hat aber ergeben, dass ein einzelner Job in einem fremden Schema deaktiviert werden kann mittels:
   exec dbms_scheduler.disable('<owner>.<job_name>');
und aktiviert wird ein Job in einem fremden Schema über:
   exec dbms_scheduler.enable('<owner>.<job_name>');
Man muss also einfach den Job-Namen ersetzen durch Eigentümer.Job-Name.

Die notwendigen Informationen zu den Scheduler-Jobs liefert die View DBA_SCHEDULER_JOBS.

Alle Scheduler-Jobs aller DB-Benutzer auf einmal ausschalten geht mit folgendem PL*SQL Block:
begin
   for v_job_info in (select owner, job_name from DBA_SCHEDULER_JOBS where enabled = 'TRUE')
   loop
      dbms_scheduler.disable(v_job_info.owner || '.' || v_job_info.job_name);
   end loop;
end;

Folgende Scheduler-Jobs sollte man typischer Weise aktiv/eingeschaltet lassen
(und es gibt sicher noch weitere, die laufen sollten):
OWNER                          JOB_NAME
------------------------------ ------------------------------
SYS                            BSLN_MAINTAIN_STATS_JOB
SYS                            DRA_REEVALUATE_OPEN_FAILURES
SYS                            ORA$AUTOTASK_CLEAN
SYS                            PURGE_LOG
ORACLE_OCM                     MGMT_STATS_CONFIG_JOB
ORACLE_OCM                     MGMT_CONFIG_JOB
EXFSYS                         RLM$SCHDNEGACTION
EXFSYS                         RLM$EVTCLEANUP

2011-12-21

DOAG@Talk mit Ducan Mills

Christian Schwitalla (DOAG Leiter der SIG Development / Tools) hat mit Duncan Mills über die Zukunft der Entwicklungswerkzeuge von Oracle gesprochen. Das Gespräch gibt es hier.

2011-12-15

HowTo: Set Default Run Target to TaskFlow Activity

Goal

Eine Fusion Web Application (ADF) soll innerhalb einer Applikation Workspace]  unabhängig vom selektierten Kontext per Tastatur gestartet werden.

Context

- JDeveloper 11gR2

- Fusion Web Application (ADF)

Solution

1

Choose: Run / Choose Active Run Configuration / Manage Run Configuration..

2

Select: Run Configuration / Default

Choose: Edit..

3

Deselect: Attempt to Run Active File Before Default

Select Default Run Target: ..\WEB-INF\adfc-config.xml [your task-flow file]

4

Choose: Launch Settings / ADF Task Flow

Select View Activity: home [your start page]

Choose: Ok

Choose: F11

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