Riduciamo e ottimizziamo i tempi delle nostre attività

Quando il sistema è ripartito l'ultima volta?

Spesso vengono schedulati dei riavvii (IPL) del sistema IBM i, oppure vengono programmati durante i periodi di inattività, come i weekend.

Ma una volta che il sistema è ripartito, ci piacerebbe sapere quando è successo. E' un'informazione che può servirci per capire come mai certe cose non hanno funzionato, oppure per spiegare come mai abbiamo avuto certi allarmi in una determinata ora, o ancora per conoscere l'effettiva durata di un IPL e usarla per migliorarne la programmazione.

Come facciamo a conoscere quando il sistema è ripartito?
Tra i vari metodi che abbiamo trovato tra i suggerimenti, c'è quello di vedere il momento in cui è entrato in macchina il job di sistema SCPF

Cos'è il Job SCPF (Start Control Program Function)?

Dal sito IBM ecco la definizione del job SCPF: The SCPF system job is the central job during the operating system IPL, providing the environment and directing the functions necessary to start the operating system. SCPF starts all the other system jobs, (except QLUS, which is started by QSYSARB) and brings the system up to a usable state. SCPF remains active after the IPL providing an environment for the running of low-priority and possibly long-running system functions. SCPF also runs during the PWRDWNSYS processing and is the job that terminates the machine processing.

Quando è partito questo il Job SCPF?

Nel momento in cui parte questo job, possiamo considerare il sistema attivo e funzionante. Per questo motivo useremo la data e ora di attivazione del job SCPF per determinare quando il nostro as/400 è ripartito. Vedremo ora quanti modi abbiamo per trovare questa informazione:

  • Comandi interattivi
  • Query SQL
  • Codice C# con la libreria JTOpen

    Quando è partito questo il Job SCPF?

    WRKACTJOB JOB(*SYS)
    cerco il job SCPF (probabilmente è l'ultimo), opzione 5, opzione 1


    Come conoscere la data dell'IPL con una query SQL (ver. 7.2+)

    Il job SCPF parte con job number 000000 e con l'utente QSYS. Per questo motivo potrebbe bastare una query come la seguente per ottenere la data e l'ora di partenza in effettivo del sistema

                                SELECT message_timestamp FROM TABLE(QSYS2/JOBLOG_INFO('000000/QSYS/SCPF')) A
                                order by ordinal_position asc
                                limit 1 offset 0
                                

    Se non dovesse trovare il job, allora precediamo la query con questa che segue, per ricavare la tripla number/user/jobname corretta

    select job_name FROM TABLE (QSYS2/ACTIVE_JOB_INFO()) X
                                where job_name like '%SCPF%'

    Come conoscere la data dell'IPL da codice C# utilizzando la libreria JTOpen

    Nell'articolo https://www.linkedin.com/pulse/come-usare-jtopen-ambiente-net-marco-moret/ ho spiegato i vari passaggi per poter trasformare la libreria JTOpen in dll per .Net e quindi utilizzarla. Un esempio d'uso è quello di reperire le informazioni sui job attivi sul sistema. Vediamo una parte di codice che recupera la data e l'ora di partenza del job SCPF che ci fornisce quindi il momento in cui il sistema è ripartito


                                using System
                                using System.Collections.Generic;
                                using System.Linq;
                                using System.Configuration;
                                using com.ibm.as400.access;
                                using java.util;
                                using java.text;
                                using System.IO;
                                using java.sql;
                                using System.Data.SqlClient;
                                using System.Xml.Serialization;
                                using System.Xml;
                                using System.Text;
                                using System.Diagnostics;
                                using System.Threading;
                                using System.Timers;
    
    
                                namespace jt400Test
                                {
                                    class Program
                                    {
                                        private static AS400 system;
                                        static void Main(string[] args)
                                        {
                                            system = new AS400();
                                            system.setSystemName("SYSTEMNAME");
                                            system.setUserId("xxxxxx"); //utente con diritti *ALLOBJ
                                            system.setPassword("xxxxxxx");
                                            
                                            CommandCall command = new CommandCall(system);
                                            try
                                            {
                                                JobList list = new JobList(system);
                                                list.addJobSelectionCriteria(JobList.SELECTION_JOB_NAME, "SCPF");// ritorna il job SCPF   
    
    
                                                list.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_OUTQ, java.lang.Boolean.FALSE);
                                                Enumeration items = list.getJobs();
                                                String date = String.Empty;
                                                while (items.hasMoreElements())
                                                {
                                                    Job job = (Job)items.nextElement();
    
    
                                                    job.loadInformation();
    
    
                                                    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                                                    date = formatter.format(job.getJobEnterSystemDate()); //la data di quando il job SCPF è partito
                                                    break;
                                                }
    
                                                Console.WriteLine("Last IPL " + date);
                                                
                                            }
                                            catch (Exception e)
                                            {
                                                Console.WriteLine("Command " + command.getCommand() + " issued an exception!");
                                                Console.WriteLine(e.Message + " - " + e.StackTrace);
                                            }
                                            system.disconnectService(AS400.COMMAND);
                                         }
                                    }
                                };
                                

    Ecco come sapere il momento in cui il nostro sistema as/400 ha iniziato a funzionare dopo un'accensione o un riavvio

    Marco Moret Monitoring Project Manager presso smeup ICS
     Puoi trovare l'articolo anche su LinkedIn


    Tutti gli articoli
     Quando il sistema è ripartito l'ultima volta?
     Writers Manager: Controllare e gestire le stampanti con l'SQL
     Controllare la sicurezza sui sistemi IBM i: l'​Audit Journal
     JTOpen per ambienti .Net. La prima connessione JDBC da C#
     JTOpen, sviluppare applicazioni in .Net per IBM i
     DB2 for i: gestire le date in SQL
     Scaricare, installare e utilizzare i driver ODBC per IBM i
     Ottenere le info di sistema in SQL

    Gestisci, analizza e controlla il sistema IBM i
    Scarica, installa e lavora in pochi secondi
      IBM i Monitoring Facility - Check è completamente gratuito fino a fine mese

  • Update cookies preferences