jeudi 12 juillet 2012

DBMS_SCHEDULER



0] Schedule a single SQL DML

Under SYSTEM user.

Management

Run a DBMS_SCHEDULER job

EXEC dbms_scheduler.run_job('TRUNC_AUDIT_TRAIL');

0.1 every Week/Month

-       Week : WED 11:30

-- execute a single Delete every week
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'DEL_DDL_LOG_31',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN delete ADB.ddl_log where ddl_date < sysdate-31 ; END;',
   start_date           => to_timestamp('29/05/2013 11:00:00', 'dd/mm/yyyy hh24:mi:ss'),
   repeat_interval      => 'FREQ=DAILY;BYDAY=WED;BYHOUR=11;BYMINUTE=30;',
   enabled              =>  TRUE,
   comments             => 'AUC 290513: Delete ADB.ddl_log to keep 31 days');
END;
/

-       or MONTH : WED 10:00

-- execute a single Delete every Month
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'DEL_DDL_LOG_60',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN delete ADB.ddl_log where ddl_date < sysdate-60 ; END;',
   start_date           => to_timestamp('12/02/2014 10:00:00', 'dd/mm/yyyy hh24:mi:ss'),
   repeat_interval      => 'FREQ=MONTHLY;BYDAY=WED;BYHOUR=10;BYMINUTE=00;',
   enabled              =>  TRUE,
   comments             => 'AUC 120214: Delete ADB.ddl_log to keep 60 days');
END;
/

0.2 every 30 minutes at Working hours

Prepare target table then create job :


create table ADB.CPT_SESS_APP ( APPL varchar2(32) , SESS number , DAT date ) tablespace ADB_DAT
-- truncate table ADB.CPT_SESS_APP ;
-- insert into ADB.CPT_SESS_APP select schemaname , count(1) , sysdate from v$session group by schemaname order by 2

-- execute a single Insert every 30 minutes at Working hours
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'CPT_SESS_APP',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN insert into ADB.CPT_SESS_APP select schemaname , count(1) , sysdate from v$session group by schemaname order by 2; END;',
   start_date           => to_timestamp('22/05/2013 16:30:00', 'dd/mm/yyyy hh24:mi:ss'),
   repeat_interval      => 'FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI;BYHOUR=7,8,9,10,11,12,13,14,15,16,17,18,19,20; BYMINUTE=0,30;',
   enabled              =>  TRUE,
   comments             => 'AUC 220513: Compte Sessions par Applications');
END;
/


A more SQL complex one :

drop table ADB.CPT_SESS_APP ;
create table ADB.CPT_SESS_APP ( APP varchar2(32) , TOT_SESS number , SCHEMA_NAME varchar2(32) , SESSIONS number , MODULE varchar2(64) , DAT date ) tablespace ADB_DAT ;


BEGIN
DBMS_SCHEDULER.DROP_JOB (job_name=> 'CPT_SESS_APP');
END;
/

-- execute a single Insert every 30 minutes at Working hours
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'CPT_SESS_APP',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN insert into ADB.CPT_SESS_APP select substr(decode(schemaname,''INSER'',''HFB'',''NUC'',''SPE5'',''CNX'',''SPE5'',''VTFSTN'',''HMP'',schemaname),1,3) APP,
sum(cnt) over (partition by substr(schemaname,1,3) order by null ) total_app , schemaname , cnt , module , sysdate from (
select decode(upper(module),''ABYFONCI.EXE'',''MPL'',''ABYLA.EXE'',''MPL'',''MENUPAR.EXE'',''TTS3'',''MENUELEV.EXE'',''TTS3'',''MAPINFOW.EXE'',''TTS3'',''THE MUSEUM SYSTEM'',''UMS'',schemaname) SCHEMANAME,
count(1) cnt , MODULE , sysdate from v$session
where module not in (''SQL Developer'') and module not like ''TOAD%''
and username not in (''DBSNMP'',''SYS'',''SYSMAN'',''SYSTEM'')
group by schemaname , module order by 1
)
order by 1; END;',
   start_date           => to_timestamp('22/05/2013 16:30:00', 'dd/mm/yyyy hh24:mi:ss'),
   repeat_interval      => 'FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI;BYHOUR=7,8,9,10,11,12,13,14,15,16,17,18,19,20; BYMINUTE=0,30;',
   enabled              =>  TRUE,
   comments             => 'AUC 240513: Compte Sessions par Applications');
END;
/


0.3 every 2 Hours

Prepare target table then create job :

create table APP.CPT_T_TEMP ( DAT date , TOTAL integer , ERREUR integer , OK integer ) tablespace APP_DAT

-- execute a single Insert every 2 Hours
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'CPT_T_TEMP',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN insert into APP.CPT_T_TEMP select sysdate,TOT.T,ERR.E,OK.O from ( select count(1) T from T_TEMP )TOT,( select count(1) E from T_TEMP where CODE_ERREUR = -1 )ERR,( select count(1) O from T_TEMP where CODE_ERREUR = 0 )OK ; END;',
   start_date           => to_timestamp('01/06/2015 12:00:00', 'dd/mm/yyyy hh24:mi:ss'),
   repeat_interval      => 'FREQ=DAILY;BYHOUR=00,02,04,06,08,10,12,14,16,18,20,22;BYMINUTE=0;',
   enabled              =>  TRUE,
   comments             => '010615: Compte T_TEMP');
END;
/

0.4 daily Refresh of MV & copy to a table

BEGIN
  SYS.DBMS_SCHEDULER.CREATE_JOB
    (
       job_name        => 'SAT_VM_REFRESH_02'
      ,start_date      => TO_TIMESTAMP_TZ('2014/11/13 02:00:00.000000 +01:00','yyyy/mm/dd hh24:mi:ss.ff tzh:tzm')
      ,repeat_interval => 'FREQ=DAILY'
      ,end_date        => NULL
      ,job_class       => 'DEFAULT_JOB_CLASS'
      ,job_type        => 'PLSQL_BLOCK'
      , job_action      => 'BEGIN dbms_mview.refresh(''APP.MV_BUSINESS01'',''C'',atomic_refresh=>FALSE) ; EXECUTE IMMEDIATE ''TRUNCATE TABLE APP.T_BUSINESS01'' ; insert into APP.T_BUSINESS01 select * from APP.MV_BUSINESS01 ; END;'
      ,comments        => 'AUC 210715: Refresh VM'
    );
END ;
/


1] Schedule a PL/SQL

1.1 Daily - Recreate Text Indexes

Under the applicative user, create a procedure to recreate Text Indexes


CREATE OR REPLACE Procedure appli.tms_sp_resync_text_indexes authid current_user as

Begin
       For curs in (Select idx_name From ctx_user_indexes Order By idx_name)
       Loop
             dbms_output.put_line('sync index:'||curs.idx_name);
             execute immediate 'begin ctx_ddl.sync_index('''||curs.idx_name||''');end;';
       End Loop;
End;
/


Test this


Enter user-name: appli

SQL> set serveroutput on ;
BEGIN APPLI.tms_sp_resync_text_indexes; END;
sync index:ACQJUSTIFICATION_29
sync index:ACQJUSTIFICATION_89
sync index:VALUATIONNOTES_89
sync index:VALUE_8

PL/SQL procedure successfully completed.

SQL> exit


Under SYSTEM, grant right to user


grant create job to appli;


Under the applicative user, create a dbms_scheduler Job to daily call the Procedure


BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'APPLI_RESYNC_TEXT_IDX',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN tms_sp_resync_text_indexes; END;',
   start_date           => trunc(sysdate)+14/24, /* 16:00 */
   repeat_interval      => 'FREQ=DAILY',
   enabled              =>  TRUE,
   comments             => 'AUC 200412: Resync des Index Intermedia');
END;
/

PL/SQL procedure successfully completed.


1.2 Daily - Refresh MVs


-- under SYSTEM
BEGIN
DBMS_SCHEDULER.DROP_JOB ('APP_REFRESH_VM') ;
END;
/

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'APP_REFRESH_VM',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN dbms_mview.refresh(''APP.VM_DEM_ABS'',''C'',atomic_refresh=>FALSE) ; dbms_mview.refresh(''APP.VM_JOUR'',''C'',atomic_refresh=>FALSE,PARALLELISM=>4) ; END;',
   start_date           => trunc(sysdate)+2/24, /* 04:00 */
   repeat_interval      => 'FREQ=DAILY',
   enabled              =>  TRUE,
   comments             => 'AUC 090414: Refresh des 2 VMs APP');
END;
/


1.3 Execute a PL once using the Oracle Scheduler


SQL> grant scheduler_admin to APP_USER ;

SQL> conn APP_USER


BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'DWH_VALID_DATA_CHECK',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN PKG_DWHTOOL.DWH_VALID_DATA_CHECK ; END;',
   repeat_interval      => NULL,
   enabled              =>  FALSE,
   comments             => 'AUC 271114: Check Talend');
END;
/

PL/SQL procedure successfully completed.

SQL> exec dbms_scheduler.enable('DWH_VALID_DATA_CHECK') ;

PL/SQL procedure successfully completed.


1.4 Gather statistics once a day using a Stored Procedure

-       Write the Procedure : using a technical owner [ADB], with invoker’s right :

We’re gathering statistics on Partition with the procedure given name.
Begin and End of the Proc execution will be logged in a table, and return code.

CREATE OR REPLACE procedure ADB.PR_CD13_HR_PART_GATHER_STATS ( MON IN VARCHAR2 , RETOUR OUT NUMBER )
authid current_user
----------------------------------------------------------------------
-- type : Procedure
-- invoker's right ( HR )
--
-- Output :
--         * 0 OK
--         * 1 NO DATA FOUND
--         * 2 Technical error ORA-
-- create table ADB.CD13_HR_PART_GATHER_STATS_ERR (DTE DATE,RET NUMBER,MSG VARCHAR2(64)) ;
-- grant all ON ADB.CD13_HR_PART_GATHER_STATS_ERR TO HR ;
-- grant execute ON ADB.PR_CD13_HR_PART_GATHER_STATS TO HR ;
-- grant select on ADB.CD13_HR_PART_GATHER_STATS_ERR TO HR ;
--
-- test
--declare
--num number ;
--begin
--ADB.PR_CD13_HR_PART_GATHER_STATS(num) ;
--dbms_output.put_line('RET_COD = '||num) ;
--end;
--/
--
--exec DBMS_STATS.GATHER_TABLE_STATS ( 'HR','TABLE1','MT201809',DBMS_STATS.AUTO_SAMPLE_SIZE,null,'FOR ALL INDEXED COLUMNS SIZE AUTO',2,'ALL',TRUE);
--exec DBMS_STATS.GATHER_TABLE_STATS ( 'HR','TABLE2','MT201809',DBMS_STATS.AUTO_SAMPLE_SIZE,null,'FOR ALL INDEXED COLUMNS SIZE AUTO',2,'ALL',TRUE);
---------------------------------------------------------------------
-- 15/10/2018 Creation
----------------------------------------------------------------------
AS
my_sqlerrm     VARCHAR2(2000);
l_err_code     NUMBER;
ct integer;
ig number;
chaine varchar2(1024);
BEGIN
    retour           := 0;
    my_sqlerrm       := NULL;
         -- ig     :=11;
insert into ADB.CD13_HR_PART_GATHER_STATS_ERR values (sysdate,retour,'PR_CD13_HR_PART_GATHER_STATS Begin traitement');
commit ;

-- EXECUTE IMMEDIATE 'BEGIN DBMS_STATS.GATHER_TABLE_STATS ( ''HR'',''TABLE1'',''MT2018'||ig||''',DBMS_STATS.AUTO_SAMPLE_SIZE,null,''FOR ALL INDEXED COLUMNS SIZE AUTO'',2,''ALL'',TRUE); END; ' ;
EXECUTE IMMEDIATE 'BEGIN DBMS_STATS.GATHER_TABLE_STATS ( ''HR'',''TABLE1'','''||MON||''',DBMS_STATS.AUTO_SAMPLE_SIZE,null,''FOR ALL INDEXED COLUMNS SIZE AUTO'',2,''ALL'',TRUE); END; ' ;
EXECUTE IMMEDIATE 'BEGIN DBMS_STATS.GATHER_TABLE_STATS ( ''HR'',''TABLE2'','''||MON||''',DBMS_STATS.AUTO_SAMPLE_SIZE,null,''FOR ALL INDEXED COLUMNS SIZE AUTO'',2,''ALL'',TRUE); END; ' ;

insert into ADB.CD13_HR_PART_GATHER_STATS_ERR values (sysdate,retour,'PR_CD13_HR_PART_GATHER_STATS End traitement');
COMMIT ;

-- gestion des erreurs
EXCEPTION
    WHEN NO_DATA_FOUND THEN
         retour :=1;
         my_sqlerrm:=substr(sqlerrm,1,100);
         dbms_output.put_line ('traitement: KO - sortie : '||my_sqlerrm);
         insert into ADB.CD13_HR_PART_GATHER_STATS_ERR values (sysdate,retour,'PR_CD13_HR_PART_GATHER_STATS traitement: KO - sortie : '||my_sqlerrm);
         commit;
    WHEN OTHERS THEN
         retour :=2;
         my_sqlerrm:=substr(sqlerrm,1,100);
         dbms_output.put_line ('traitement: KO - sortie : '||my_sqlerrm);
         insert into ADB.CD13_HR_PART_GATHER_STATS_ERR values (sysdate,retour,'PR_CD13_HR_PART_GATHER_STATS traitement: KO - sortie : '||my_sqlerrm);
commit;
END;
/


-       Create Log table and Give the appropriate rights to the execution owner :

create table ADB.CD13_HR_PART_GATHER_STATS_ERR (DTE DATE,RET NUMBER,MSG VARCHAR2(64)) ;
grant all ON ADB.CD13_HR_PART_GATHER_STATS_ERR TO HR ;
grant execute ON ADB.PR_CD13_HR_PART_GATHER_STATS TO HR ;
grant select on ADB.CD13_HR_PART_GATHER_STATS_ERR TO HR ;

-       Test the execution

declare
num number ;
begin
ADB.PR_CD13_HHR_PART_GATHER_STATS('MT201811',num) ;
dbms_output.put_line('RET_COD = '||num) ;
end;
/

-       Schedule the Procedure

-- under SYSTEM
grant CREATE JOB TO HR ;

-- under HR
BEGIN
  SYS.DBMS_SCHEDULER.CREATE_JOB
    (
       job_name        => 'CD13_HR_PART_GATHER_STATS'
      ,start_date      => TO_TIMESTAMP_TZ('2018/10/15 15:08:00.000000 +01:00','yyyy/mm/dd hh24:mi:ss.ff tzh:tzm')
      ,repeat_interval => 'FREQ=DAILY'
      ,end_date        => NULL
      ,job_class       => 'DEFAULT_JOB_CLASS'
      ,job_type        => 'PLSQL_BLOCK'
      , job_action      => 'declare num number ; begin ADB.PR_CD13_HR_PART_GATHER_STATS(num) ; end;'
      ,comments        => 'AUC 181015: Gather Stats avant Paye'
    );
END ;
/

exec dbms_scheduler.enable('CD13_HR_PART_GATHER_STATS');

-- under SYSTEM
revoke CREATE JOB FROM HR ;



2] How to run an RMAN Backup from a Stored Procedure – one shot with the Scheduler

For the Batch Concern subject, I needed to have a new procedure that kills long running session responsible for the over-generation of archivelogs and that runs a RMAN Backup + Delete of the Archivelogs :
-       Kill call « app_admin.kill_long_running_session » from Batch Concern Post
-       RMAN : « call rman_backup_ar.ksh » from RMAN Backup Post

2.1 Reminder

START_DATE The START_DATE parameter specifies the first date that the job should be run.
If both the START_DATE and REPEAT_INTERVAL parameters are NULL, the job will be run as soon
as it is enabled.
The START_DATE parameter is used as a reference date when the REPEAT_INTERVAL parameter
uses a calendaring expression. In this situation, the job will run on the first date that matches
the calendaring expression and is on or after the date specified in the START_DATE parameter.
The Scheduler cannot guarantee that a job will execute at an exact time, because
the system may be overloaded and thus resources may be unavailable.

REPEAT_INTERVAL The REPEAT_INTERVAL parameter specifies how often the job should
be repeated. This parameter can be specified using either a calendaring or a PL/SQL expression.
If this parameter is NULL, the job will run only once (at the scheduled start time).

ENABLED The ENABLED parameter specifies whether the job is created in an enabled state. A
value of TRUE means the job will be enabled. By default, all jobs are created disabled, so the
default value for this parameter is FALSE. A disabled job will exist as an object in the database,
but it will never be processed by the job coordinator.

2.2 Pre-requisite : Unix Rights & Configuration File


$ ls -l $ORACLE_HOME/rdbms/admin/externaljob.ora
-rw-r-----    1 root     dba            1534 Dec 22 2005  /oracle/10GDB/rdbms/admin/externaljob.ora

$ ls -l $ORACLE_HOME/bin/extjob
-rwsr-x---    1 root ?    dba          700321 May 27 2011  /oracle/10GDB/bin/extjob

$ cat $ORACLE_HOME/rdbms/admin/externaljob.ora
# $Header: externaljob.ora 16-dec-2005.20:47:13 rramkiss Exp $
#
# Copyright (c) 2005, Oracle. All rights reserved.
# NAME
#   externaljob.ora
# FUNCTION
#   This configuration file is used by dbms_scheduler when executing external
#   (operating system) jobs. It contains the user and group to run external
#   jobs as. It must only be writable by the owner and must be owned by root.
#   If extjob is not setuid then the only allowable run_user
#   is the user Oracle runs as and the only allowable run_group is the group
#   Oracle runs as.
#
#run_user = nobody
#run_group = nobody
run_user = oracle
run_group = dba


2.3 Create the Job : one-shot execution of the Shell script


$ cat job.sql
begin
DBMS_SCHEDULER.CREATE_JOB (
job_name             => 'purge_archivelogs',
job_type             => 'EXECUTABLE',
job_action           => '/bin/ksh',
number_of_arguments =>  1,
enabled              => false,
comments             => 'Backup and Purge Archivelogs when Nagios Volume Threshold is reached');

end;
/

exec dbms_scheduler.set_job_argument_value('PURGE_ARCHIVELOGS', 1, '/work/oracle/<base>/rman/rman_backup_ar.ksh');
exec dbms_scheduler.enable('PURGE_ARCHIVELOGS');


Run the job & check for the Backup execution


SQL> @job
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.

SQL> !ps -ef | grep rman
  oracle  8126616 24248460  66 11:40:22      -  0:01 rman @/work/oracle/INSTORA1/rman/scr/rma_bck_arc_noc.scr log=/work/oracle/<base>/rman/log/rma_bck_arc_noc_070512_09:40:22.log
  oracle 18939962        1   0 11:40:22      -  0:00 extjob <BASE> 22347882 -exec /bin/ksh /work/oracle/<base>/rman/rman_backup_ar.ksh
  oracle 22085660 20709604   0 11:40:27  pts/0  0:00 /usr/bin/bash -c ps -ef | grep rman
  oracle 24248460 18939962   0 11:40:22      -  0:00 /bin/ksh /work/oracle/<base>/rman/rman_backup_ar.ksh


2.4 Plug the job in PL/SQL procedure

Grants under SYS user


SQL> grant create job to system ;
SQL> grant create any job to system ;
SQL> grant CREATE EXTERNAL JOB to system ;
SQL> grant SELECT ON SYS.V_$INSTANCE to system ;



CREATE OR REPLACE package app_admin
as
-- app : Trigramme Application
-- exécution sous compte Exploitation ( ex: BTC_USR ) ou Nagios NAG_USR
-- Needed Rights , under SYS user :
-- GRANT EXECUTE ON SYS.DBMS_SERVICE TO SYSTEM; GRANT SELECT ON  SYS.DBA_OBJECTS TO SYSTEM; GRANT SELECT ON  SYS.DBA_ROLE_PRIVS TO SYSTEM ;
-- GRANT SELECT ON  SYS.V_$ACTIVE_SERVICES to system ; GRANT SELECT ON  SYS.V_$LOCKED_OBJECT TO SYSTEM; GRANT SELECT ON SYS.V_$SESSION TO SYSTEM; grant alter system to system ;
-- GRANT SELECT ON  SYS.V_$TRANSACTION  TO SYSTEM; GRANT SELECT ON  SYS.V_$SESS_IO TO SYSTEM; GRANT EXECUTE ON SYS.DBMS_SYSTEM TO SYSTEM;
-- grant create job to system ; grant create any job to system ; grant CREATE EXTERNAL JOB to system ; grant SELECT ON SYS.V_$INSTANCE to system ;
-- 20/03/11 AUC Création
-- 05/01/12 Validée par DC
-- 11/06/12 AUC mode CRITICAL ajout kill_long_running_session lancée par Nagios pour éviter saturation des archivelogs
-- 04/07/12 mode WARNING Kill + ajout du backup RMAN
        procedure kill_long_run_plus_backup_RMAN;
        procedure kill_long_running_session;
        procedure stop_app (app in varchar2);
        procedure start_app (app in varchar2);
        procedure before_btc (app in varchar2);
        procedure before_btc_all ;
end;
/

procedure kill_long_run_plus_backup_RMAN
is
rma_scr varchar2(64) ;
instanc varchar2(16) ;
begin
-- This message goes to the alert log
sys.dbms_system.ksdwrt(2, ' Called Procedure app_admin.kill_long_run_plus_backup_RMAN');

select lower(instance_name) into instanc from v$instance ;
rma_scr := '/work/oracle/'||instanc||'/rman/rman_backup_ar.ksh' ;
 kill_long_running_session ;
 -- This message goes to the alert log
    sys.dbms_system.ksdwrt(2, ' Procedure app_admin.kill_long_run_plus_backup_RMAN: launch RMAN Backup '||rma_scr);
 DBMS_SCHEDULER.CREATE_JOB (
            job_name             => 'purge_archivelogs',
            job_type             => 'EXECUTABLE',
            job_action           => '/bin/ksh',
            number_of_arguments =>  1,
            enabled              => false,
            comments             => 'Backup and Purge Archivelogs when Nagios Volume Threshold is reached');
    dbms_scheduler.set_job_argument_value('PURGE_ARCHIVELOGS', 1, ''||rma_scr||'');
    dbms_scheduler.enable('PURGE_ARCHIVELOGS');

end kill_long_run_plus_backup_RMAN;


2.5 Run

Open an IO intensive session



-- create table t_intensive ( a int ) ;

truncate table t_intensive ;

BEGIN
  DECLARE
  m NUMBER;
  BEGIN
  FOR i IN 1..100000 LOOP
  FOR j  IN 1..10000 LOOP
  m := sqrt(4567);
  insert into t_intensive values (m) ;
  END LOOP;
  commit ;
dbms_lock.sleep(10); -- sleep about 10 seconds
execute immediate ('truncate table t_intensive') ;
  END LOOP;
  END;
  END;
  /



SQL> set serveroutput on

SQL> execute system.app_admin.kill_long_run_plus_backup_RMAN ;
Kill top Block Change and Active session
Kill session username: SCOTT alter system kill session '993,13980'

PL/SQL procedure successfully completed.

SQL> !ps -ef | grep rman
  oracle 19267836 17432588   0 15:40:40  pts/0  0:00 grep rman
  oracle 22085772        1   0 15:40:34      -  0:00 extjob <BASE> 18350102 -exec /bin/ksh /work/oracle/<base>/rman/rman_backup_ar.ksh
  oracle 23068746 24313948  54 15:40:34      -  0:02 rman @/work/oracle/<base>/rman/scr/rma_bck_arc_noc.scr log=/work/oracle/<base>/rman/log/rma_bck_arc_noc_070612_13:40:34.log
  oracle 24313948 22085772   0 15:40:34      -  0:00 /bin/ksh /work/oracle/<base>/rman/rman_backup_ar.ksh


Alert.log


Thu Jul 12 14:59:10 GMT+02:00 2012Thread 1 advanced to log sequence 86975 (LGWR switch)
  Current log# 4 seq# 86975 mem# 0: /data/<base>/log41<BASE>.dbf
  Current log# 4 seq# 86975 mem# 1: /data/<base>/log42<BASE>.dbf
Thu Jul 12 14:59:18 GMT+02:00 2012 Called Procedure app_admin.kill_long_run_plus_backup_RMAN
 Called Procedure app_admin.kill_long_running_session: Kill top Block Change and Active session
 Procedure app_admin.kill_long_running_session: SCOTT sqlplus@sr-dev-1 (TNS V1-V3) block_changes: 25260823 alter system kill session '993,13980'
 Procedure app_admin.kill_long_run_plus_backup_RMAN: launch RMAN Backup /work/oracle/<base>/rman/rman_backup_ar.ksh
Thu Jul 12 12:59:23 UTC 2012
ALTER SYSTEM ARCHIVE LOG