рдЫреЛрдЯреНрдпрд╛ рдбреЗрдЯрд╛ рд╡реЗрдЕрд░рд╣рд╛рдКрд╕рдордзреНрдпреЗ рдИрдЯреАрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреЗ

рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдбреЗрдЯрд╛ рдХрд╛рдврдгреНрдпрд╛рд╕рд╛рдареА, рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреЗрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░рддрд╛рдд. рдХрд╛рд░реНрдпрд░рдд рд╕рд╛рдзрдирд╛рдВрдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓реЙрдЧ рдХреЗрд▓реА рдЖрд╣реЗ, рддреНрд░реБрдЯреА рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд.

рддреНрд░реБрдЯреА рдЖрдврд│рд▓реНрдпрд╛рд╕, рд▓реЙрдЧрдордзреНрдпреЗ рдорд╛рд╣рд┐рддреА рдЕрд╕рддреЗ рдХреА рдЯреВрд▓ рдХрд╛рд░реНрдп рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рдд рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реЗ рдЖрдгрд┐ рдХреЛрдгрддреЗ рдореЙрдбреНрдпреВрд▓ (рдмрд╣реБрддреЗрдХрджрд╛ java) рдХреБрдареЗ рдерд╛рдВрдмрд▓реЗ. рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдУрд│реАрдВрдордзреНрдпреЗ, рдЖрдкрдг рдбреЗрдЯрд╛рдмреЗрд╕ рддреНрд░реБрдЯреА рд╢реЛрдзреВ рд╢рдХрддрд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЯреЗрдмрд▓ рдЕрджреНрд╡рд┐рддреАрдп рдХреА рдЙрд▓реНрд▓рдВрдШрди.

рдИрдЯреАрдПрд▓ рддреНрд░реБрдЯреА рдорд╛рд╣рд┐рддреА рдХрд╛рдп рднреВрдорд┐рдХрд╛ рдмрдЬрд╛рд╡рддреЗ рдпрд╛ рдкреНрд░рд╢реНрдирд╛рдЪреЗ рдЙрддреНрддрд░ рджреЗрдгреНрдпрд╛рд╕рд╛рдареА, рдореА рдЧреЗрд▓реНрдпрд╛ рджреЛрди рд╡рд░реНрд╖рд╛рдд рдЙрджреНрднрд╡рд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рд╕рдорд╕реНрдпрд╛ рдореЛрдареНрдпрд╛ рднрд╛рдВрдбрд╛рд░рд╛рдд рд╡рд░реНрдЧреАрдХреГрдд рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд.

рдЫреЛрдЯреНрдпрд╛ рдбреЗрдЯрд╛ рд╡реЗрдЕрд░рд╣рд╛рдКрд╕рдордзреНрдпреЗ рдИрдЯреАрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреЗ

рдбреЗрдЯрд╛рдмреЗрд╕ рддреНрд░реБрдЯреАрдВрдордзреНрдпреЗ рдкреБрд░реЗрд╢реА рдЬрд╛рдЧрд╛ рдирд╕рдгреЗ, рдХрдиреЗрдХреНрд╢рди рдЧрдорд╛рд╡рдгреЗ, рд╕рддреНрд░ рд╣рдБрдЧ рдЗ.

рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯреАрдВрдордзреНрдпреЗ рдЯреЗрдмрд▓ рдХреА рдЪреЗ рдЙрд▓реНрд▓рдВрдШрди, рдЧреИрд░-рд╡реИрдз рд╡рд╕реНрддреВ, рд╡рд╕реНрддреВрдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдирд╕рдгреЗ рдЗрддреНрдпрд╛рджреАрдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рд╣реЛрддреЛ.
рд╢реЗрдбреНрдпреБрд▓рд░ рд╡реЗрд│реЗрд╡рд░ рд╕реБрд░реВ рд╣реЛрдК рд╢рдХрдд рдирд╛рд╣реА, рддреЗ рдЧреЛрдард╡реВ рд╢рдХрддреЗ рдЗ.

рд╕рд╛рдзреНрдпрд╛ рдЪреБрдХрд╛ рд╕реБрдзрд╛рд░рд╛рдпрд▓рд╛ рд╡реЗрд│ рд▓рд╛рдЧрдд рдирд╛рд╣реА. рдПрдХ рдЪрд╛рдВрдЧрд▓рд╛ рдИрдЯреАрдПрд▓ рддреНрдпрд╛рдкреИрдХреА рдмрд╣реБрддреЗрдХ рд╕реНрд╡рддрдГрдЪ рд╣рд╛рддрд╛рд│реВ рд╢рдХрддреЛ.

рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдмрдЧреНрд╕ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдбреЗрдЯрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реЛрдзрдгреЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдмрдирд╡рддреЗ. рдЕрдиреЗрдХрджрд╛ рдмрджрд▓ рдЪрд╛рдЪрдгреА рдЖрдгрд┐ рдЙрдкрдпреЛрдЬрди рдЧрд░рдЬ рд╣реЛрдК.

рддрд░, рд╕рд░реНрд╡ рд╕рдорд╕реНрдпрд╛рдВрдкреИрдХреА рдирд┐рдореНрдореНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗрдд. рд╕рд░реНрд╡ рдЪреБрдХрд╛рдВрдкреИрдХреА 48% рдЪреБрдХрд╛ рд╕рд╛рдзреНрдпрд╛ рдЪреБрдХрд╛ рдЖрд╣реЗрдд.
рд╕рд░реНрд╡ рд╕рдорд╕реНрдпрд╛рдВрдкреИрдХреА рдПрдХ рддреГрддреАрдпрд╛рдВрд╢ рд╕реНрдЯреЛрд░реЗрдЬ рд▓реЙрдЬрд┐рдХ рдХрд┐рдВрд╡рд╛ рдореЙрдбреЗрд▓ рдмрджрд▓рдгреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗрдд, рдпрд╛рдкреИрдХреА рдЕрд░реНрдзреНрдпрд╛рд╣реВрди рдЕрдзрд┐рдХ рддреНрд░реБрдЯреА рдЬрдЯрд┐рд▓ рдЖрд╣реЗрдд.

рдЖрдгрд┐ рд╕рд░реНрд╡ рд╕рдорд╕реНрдпрд╛рдВрдкреИрдХреА рдПрдХ рдЪрддреБрд░реНрдерд╛рдВрд╢рдкреЗрдХреНрд╖рд╛ рдХрдореА рдХрд╛рд░реНрдп рд╢реЗрдбреНрдпреВрд▓рд░рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗрдд, рддреНрдпрд╛рдкреИрдХреА 18% рд╕рд╛рдзреНрдпрд╛ рддреНрд░реБрдЯреА рдЖрд╣реЗрдд.

рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдЙрджреНрднрд╡рдгрд╛рд░реНтАНрдпрд╛ рд╕рд░реНрд╡ рддреНрд░реБрдЯреАрдВрдкреИрдХреА 22% рдЬрдЯрд┐рд▓ рдЖрд╣реЗрдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕реБрдзрд╛рд░рдгреЗрд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рдЬрд╛рд╕реНрдд рд▓рдХреНрд╖ рдЖрдгрд┐ рд╡реЗрд│ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреЗ рдЖрдард╡рдбреНрдпрд╛рддреВрди рдПрдХрджрд╛ рдШрдбрддрд╛рдд. рддрд░ рд╕рд╛рдзреНрдпрд╛ рдЪреБрдХрд╛ рдЬрд╡рд│рдкрд╛рд╕ рд░реЛрдЬрдЪ рдШрдбрддрд╛рдд.

рд╕рд╛рд╣рдЬрд┐рдХрдЪ, рд▓реЙрдЧрдордзреНрдпреЗ рддреНрд░реБрдЯреАрдЪреЗ рд╕реНрдерд╛рди рд╢рдХреНрдп рддрд┐рддрдХреНрдпрд╛ рдЕрдЪреВрдХрдкрдгреЗ рд╕реВрдЪрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рд╕рдорд╕реНрдпреЗрдЪреЗ рд╕реНрддреНрд░реЛрдд рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рдХрд┐рдорд╛рди рд╡реЗрд│ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ рдИрдЯреАрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдкреНрд░рднрд╛рд╡реА рд╣реЛрдИрд▓.

рдкреНрд░рднрд╛рд╡реА рджреЗрдЦрд░реЗрдЦ

рдИрдЯреАрдПрд▓ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпреЗрдордзреНрдпреЗ рдорд▓рд╛ рдХрд╛рдп рдкрд╣рд╛рдпрдЪреЗ рд╣реЛрддреЗ?

рдЫреЛрдЯреНрдпрд╛ рдбреЗрдЯрд╛ рд╡реЗрдЕрд░рд╣рд╛рдКрд╕рдордзреНрдпреЗ рдИрдЯреАрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреЗ
рдкреНрд░рд╛рд░рдВрдн рдХрд░рд╛ - рдЬреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдиреЗ рдХрд╛рдо рд╕реБрд░реВ рдХреЗрд▓реЗ,
рд╕реНрд░реЛрдд - рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд,
рд╕реНрддрд░ - рд╕реНрдЯреЛрд░реЗрдЬрдЪреА рдХреЛрдгрддреА рдкрд╛рддрд│реА рд▓реЛрдб рдХреЗрд▓реА рдЬрд╛рдд рдЖрд╣реЗ,
рдИрдЯреАрдПрд▓ рдЬреЙрдмрдЪреЗ рдирд╛рд╡ - рдЕрдкрд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдЬреНрдпрд╛рдордзреНрдпреЗ рдЕрдиреЗрдХ рд▓рд╣рд╛рди рдкрд╛рдпрд▒реНрдпрд╛ рдЕрд╕рддрд╛рдд,
рдЪрд░рдг рдХреНрд░рдорд╛рдВрдХ - рдХреЗрд▓реНрдпрд╛ рдЬрд╛рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЪрд░рдгрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛,
рдкреНрд░рднрд╛рд╡рд┐рдд рдкрдВрдХреНрддреА - рдХрд┐рддреА рдбреЗрдЯрд╛рд╡рд░ рдЖрдзреАрдЪ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ,
рдХрд╛рд▓рд╛рд╡рдзреА рд╕реЗрдХрдВрдж - рдХрд┐рддреА рд╡реЗрд│ рд▓рд╛рдЧрддреЛ,
рд╕реНрдерд┐рддреА - рд╕рд░реНрд╡рдХрд╛рд╣реА рдареАрдХ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА: рдареАрдХ рдЖрд╣реЗ, рддреНрд░реБрдЯреА, рдзрд╛рд╡рдгреЗ, рд╣рдБрдЧреНрд╕
рд╕рдВрджреЗрд╢ - рд╢реЗрд╡рдЯрдЪрд╛ рдпрд╢рд╕реНрд╡реА рд╕рдВрджреЗрд╢ рдХрд┐рдВрд╡рд╛ рддреНрд░реБрдЯреА рд╡рд░реНрдгрди.

рдиреЛрдВрджреАрдВрдЪреНрдпрд╛ рд╕реНрдерд┐рддреАрд╡рд░ рдЖрдзрд╛рд░рд┐рдд, рддреБрдореНрд╣реА рдИрдореЗрд▓ рдкрд╛рдард╡реВ рд╢рдХрддрд╛. рдЗрддрд░ рд╕рджрд╕реНрдпрд╛рдВрдирд╛ рдкрддреНрд░. рдЬрд░ рдХрд╛рд╣реА рддреНрд░реБрдЯреА рдирд╕рддреАрд▓ рддрд░ рдкрддреНрд░ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА.

рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рддреНрд░реБрдЯреА рдЭрд╛рд▓реНрдпрд╛рд╕, рдШрдЯрдиреЗрдЪреЗ рд╕реНрдерд╛рди рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд╕реВрдЪрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

рдХрдзреАрдХрдзреА рдЕрд╕реЗ рд╣реЛрддреЗ рдХреА рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдЯреВрд▓ рд╕реНрд╡рддрдГрдЪ рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдереЗрдЯ рджреГрд╢реНрдп (рджреГрд╢реНрдп) рдХреЙрд▓ рдХрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ, рдЬреНрдпрд╛рдЪреНрдпрд╛ рдЖрдзрд╛рд░рд╛рд╡рд░ рдЕрд╣рд╡рд╛рд▓ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ.

рдИрдЯреАрдПрд▓ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдЯреЗрдмрд▓

рдИрдЯреАрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдПрдХ рдЯреЗрдмрд▓ рдЖрдгрд┐ рдПрдХ рджреГрд╢реНрдп рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ.

рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг рдкрд░рдд рдпреЗрдК рд╢рдХрддрд╛ рддреБрдордЪрд╛ рдЫреЛрдЯрд╛рд╕рд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдЖрдгрд┐ sqlite рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рддрдпрд╛рд░ рдХрд░рд╛.

DDL рдЯреЗрдмрд▓

CREATE TABLE UTL_JOB_STATUS (
/* Table for logging of job execution log. Important that the job has the steps ETL_START and ETL_END or ETL_ERROR */
  UTL_JOB_STATUS_ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  SID               INTEGER NOT NULL DEFAULT -1, /* Session Identificator. Unique for every Run of job */
  LOG_DT            INTEGER NOT NULL DEFAULT 0,  /* Date time */
  LOG_D             INTEGER NOT NULL DEFAULT 0,  /* Date */
  JOB_NAME          TEXT NOT NULL DEFAULT 'N/A', /* Job name like JOB_STG2DM_GEO */
  STEP_NAME         TEXT NOT NULL DEFAULT 'N/A', /* ETL_START, ... , ETL_END/ETL_ERROR */
  STEP_DESCR        TEXT,                        /* Description of task or error message */
  UNIQUE (SID, JOB_NAME, STEP_NAME)
);
INSERT INTO UTL_JOB_STATUS (UTL_JOB_STATUS_ID) VALUES (-1);

DDL рдкрд╣рд╛/рдЕрд╣рд╡рд╛рд▓

CREATE VIEW IF NOT EXISTS UTL_JOB_STATUS_V
AS /* Content: Package Execution Log for last 3 Months. */
WITH SRC AS (
  SELECT LOG_D,
    LOG_DT,
    UTL_JOB_STATUS_ID,
    SID,
	CASE WHEN INSTR(JOB_NAME, 'FTP') THEN 'TRANSFER' /* file transfer */
	     WHEN INSTR(JOB_NAME, 'STG') THEN 'STAGE' /* stage */
	     WHEN INSTR(JOB_NAME, 'CLS') THEN 'CLEANSING' /* cleansing */
	     WHEN INSTR(JOB_NAME, 'DIM') THEN 'DIMENSION' /* dimension */
	     WHEN INSTR(JOB_NAME, 'FCT') THEN 'FACT' /* fact */
		 WHEN INSTR(JOB_NAME, 'ETL') THEN 'STAGE-MART' /* data mart */
	     WHEN INSTR(JOB_NAME, 'RPT') THEN 'REPORT' /* report */
	     ELSE 'N/A' END AS LAYER,
	CASE WHEN INSTR(JOB_NAME, 'ACCESS') THEN 'ACCESS LOG' /* source */
	     WHEN INSTR(JOB_NAME, 'MASTER') THEN 'MASTER DATA' /* source */
	     WHEN INSTR(JOB_NAME, 'AD-HOC') THEN 'AD-HOC' /* source */
	     ELSE 'N/A' END AS SOURCE,
    JOB_NAME,
    STEP_NAME,
    CASE WHEN STEP_NAME='ETL_START' THEN 1 ELSE 0 END AS START_FLAG,
    CASE WHEN STEP_NAME='ETL_END' THEN 1 ELSE 0 END AS END_FLAG,
    CASE WHEN STEP_NAME='ETL_ERROR' THEN 1 ELSE 0 END AS ERROR_FLAG,
    STEP_NAME || ' : ' || STEP_DESCR AS STEP_LOG,
	SUBSTR( SUBSTR(STEP_DESCR, INSTR(STEP_DESCR, '***')+4), 1, INSTR(SUBSTR(STEP_DESCR, INSTR(STEP_DESCR, '***')+4), '***')-2 ) AS AFFECTED_ROWS
  FROM UTL_JOB_STATUS
  WHERE datetime(LOG_D, 'unixepoch') >= date('now', 'start of month', '-3 month')
)
SELECT JB.SID,
  JB.MIN_LOG_DT AS START_DT,
  strftime('%d.%m.%Y %H:%M', datetime(JB.MIN_LOG_DT, 'unixepoch')) AS LOG_DT,
  JB.SOURCE,
  JB.LAYER,
  JB.JOB_NAME,
  CASE
  WHEN JB.ERROR_FLAG = 1 THEN 'ERROR'
  WHEN JB.ERROR_FLAG = 0 AND JB.END_FLAG = 0 AND strftime('%s','now') - JB.MIN_LOG_DT > 0.5*60*60 THEN 'HANGS' /* half an hour */
  WHEN JB.ERROR_FLAG = 0 AND JB.END_FLAG = 0 THEN 'RUNNING'
  ELSE 'OK'
  END AS STATUS,
  ERR.STEP_LOG     AS STEP_LOG,
  JB.CNT           AS STEP_CNT,
  JB.AFFECTED_ROWS AS AFFECTED_ROWS,
  strftime('%d.%m.%Y %H:%M', datetime(JB.MIN_LOG_DT, 'unixepoch')) AS JOB_START_DT,
  strftime('%d.%m.%Y %H:%M', datetime(JB.MAX_LOG_DT, 'unixepoch')) AS JOB_END_DT,
  JB.MAX_LOG_DT - JB.MIN_LOG_DT AS JOB_DURATION_SEC
FROM
  ( SELECT SID, SOURCE, LAYER, JOB_NAME,
           MAX(UTL_JOB_STATUS_ID) AS UTL_JOB_STATUS_ID,
           MAX(START_FLAG)       AS START_FLAG,
           MAX(END_FLAG)         AS END_FLAG,
           MAX(ERROR_FLAG)       AS ERROR_FLAG,
           MIN(LOG_DT)           AS MIN_LOG_DT,
           MAX(LOG_DT)           AS MAX_LOG_DT,
           SUM(1)                AS CNT,
           SUM(IFNULL(AFFECTED_ROWS, 0)) AS AFFECTED_ROWS
    FROM SRC
    GROUP BY SID, SOURCE, LAYER, JOB_NAME
  ) JB,
  ( SELECT UTL_JOB_STATUS_ID, SID, JOB_NAME, STEP_LOG
    FROM SRC
    WHERE 1 = 1
  ) ERR
WHERE 1 = 1
  AND JB.SID = ERR.SID
  AND JB.JOB_NAME = ERR.JOB_NAME
  AND JB.UTL_JOB_STATUS_ID = ERR.UTL_JOB_STATUS_ID
ORDER BY JB.MIN_LOG_DT DESC, JB.SID DESC, JB.SOURCE;

SQL рдирд╡реАрди рд╕рддреНрд░ рдХреНрд░рдорд╛рдВрдХ рдорд┐рд│рд╡рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ рдХрд╛ рддреЗ рддрдкрд╛рд╕рдд рдЖрд╣реЗ

SELECT SUM (
  CASE WHEN start_job.JOB_NAME IS NOT NULL AND end_job.JOB_NAME IS NULL /* existed job finished */
	    AND NOT ( 'y' = 'n' ) /* force restart PARAMETER */
       THEN 1 ELSE 0
  END ) AS IS_RUNNING
  FROM
    ( SELECT 1 AS dummy FROM UTL_JOB_STATUS WHERE sid = -1) d_job
  LEFT OUTER JOIN
    ( SELECT JOB_NAME, SID, 1 AS dummy
      FROM UTL_JOB_STATUS
      WHERE JOB_NAME = 'RPT_ACCESS_LOG' /* job name PARAMETER */
	    AND STEP_NAME = 'ETL_START'
      GROUP BY JOB_NAME, SID
    ) start_job /* starts */
  ON d_job.dummy = start_job.dummy
  LEFT OUTER JOIN
    ( SELECT JOB_NAME, SID
      FROM UTL_JOB_STATUS
      WHERE JOB_NAME = 'RPT_ACCESS_LOG'  /* job name PARAMETER */
	    AND STEP_NAME in ('ETL_END', 'ETL_ERROR') /* stop status */
      GROUP BY JOB_NAME, SID
    ) end_job /* ends */
  ON start_job.JOB_NAME = end_job.JOB_NAME
     AND start_job.SID = end_job.SID

рд╕рд╛рд░рдгреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ:

  • рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪрд╛ рдкреНрд░рд╛рд░рдВрдн рдЖрдгрд┐ рд╢реЗрд╡рдЯ ETL_START рдЖрдгрд┐ ETL_END рдпрд╛ рдЪрд░рдгрд╛рдВрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
  • рддреНрд░реБрдЯреА рдЖрдврд│рд▓реНрдпрд╛рд╕, рддреНрдпрд╛рдЪреНрдпрд╛ рд╡рд░реНрдгрдирд╛рд╕рд╣ ETL_ERROR рдЪрд░рдг рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рд╡реЗ
  • рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдЪреЗ рдкреНрд░рдорд╛рдг рд╣рд╛рдпрд▓рд╛рдЗрдЯ рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддрд╛рд░рдХрд╛рд╕рд╣
  • рддреАрдЪ рдкреНрд░рдХреНрд░рд┐рдпрд╛ force_restart=y рдкреЕрд░рд╛рдореАрдЯрд░рд╕рд╣ рдПрдХрд╛рдЪ рд╡реЗрд│реА рд╕реБрд░реВ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ, рддреНрдпрд╛рд╢рд┐рд╡рд╛рдп рд╕рддреНрд░ рдХреНрд░рдорд╛рдВрдХ рдХреЗрд╡рд│ рдкреВрд░реНрдг рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕ рдЬрд╛рд░реА рдХреЗрд▓рд╛ рдЬрд╛рддреЛ.
  • рд╕рд╛рдорд╛рдиреНрдп рдореЛрдбрдордзреНрдпреЗ, рддреБрдореНрд╣реА рд╕рдорд╛рди рдбреЗрдЯрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдВрддрд░ рдЪрд╛рд▓рд╡реВ рд╢рдХрдд рдирд╛рд╣реА

рдЯреЗрдмрд▓рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдСрдкрд░реЗрд╢рдиреНрд╕ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдЖрд╣реЗрдд:

  • рдЪрд╛рд▓реВ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдИрдЯреАрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪрд╛ рд╕рддреНрд░ рдХреНрд░рдорд╛рдВрдХ рдорд┐рд│рд╡рдгреЗ
  • рдЯреЗрдмрд▓рдордзреНрдпреЗ рд▓реЙрдЧ рдПрдВрдЯреНрд░реА рдШрд╛рд▓рд╛
  • рдИрдЯреАрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪрд╛ рд╢реЗрд╡рдЯрдЪрд╛ рдпрд╢рд╕реНрд╡реА рд░реЗрдХреЙрд░реНрдб рдорд┐рд│рд╡рдгреЗ

рдУрд░реЕрдХрд▓ рдХрд┐рдВрд╡рд╛ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рд╕рд╛рд░рдЦреНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ, рд╣реА рдСрдкрд░реЗрд╢рдиреНрд╕ рдЕрдВрдЧрднреВрдд рдлрдВрдХреНрд╢рдиреНрд╕ рдореНрд╣рдгреВрди рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд. sqlite рд▓рд╛ рдмрд╛рд╣реНрдп рдпрдВрддреНрд░рдгрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рддреЗ PHP рдордзреНрдпреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗрд▓реЗрд▓реЗ.

рдирд┐рд╖реНрдХрд░реНрд╖

рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЯреВрд▓реНрд╕рдордзреАрд▓ рддреНрд░реБрдЯреА рд╕рдВрджреЗрд╢ рдПрдХ рдореЛрдареА-рдорд╣рддреНрддреНрд╡рд╛рдЪреА рднреВрдорд┐рдХрд╛ рдмрдЬрд╛рд╡рддрд╛рдд. рдкрд░рдВрддреБ рд╕рдорд╕реНрдпреЗрдЪреЗ рдХрд╛рд░рдг рддреНрд╡рд░реАрдд рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдВрдирд╛ рдЗрд╖реНрдЯрддрдо рдореНрд╣рдгрдгреЗ рдХрдареАрдг рдЖрд╣реЗ. рдЬреЗрд╡реНрд╣рд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╢рдВрднрд░рдЪреНрдпрд╛ рдЬрд╡рд│ рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЗрдЦрд░реЗрдЦ рдПрдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд▓реНрдкрд╛рдд рдмрджрд▓рддреЗ.

рд▓реЗрдЦ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкрдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рд╕рдорд╕реНрдпреЗрдЪреНрдпрд╛ рд╕рдВрднрд╛рд╡реНрдп рдирд┐рд░рд╛рдХрд░рдгрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреЛ. рд╕рдВрдкреВрд░реНрдг рд▓рд╣рд╛рди рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЧрд┐рдЯрд▓реЕрдмрдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ SQLite PHP ETL рдЙрдкрдпреБрдХреНрддрддрд╛.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛