Amministrare un AS/400: come funziona il sistema Capitolo 8 di 10

Lo spool: stampe e code di uscita

Rivista il Verificata su IBM i 7.5

Accedi per salvare

Un programma che stampa non parla con una stampante. Apre un file di stampa, e se il suo parametro SPOOL lo dice, il sistema mette l'uscita in un file di spool: un documento che resta sul sistema finché qualcuno non lo stampa, lo converte o lo cancella.

Ne discendono due cose. La prima è che il documento esiste anche se la stampante non c'è: si può guardare a schermo, rimandare, spostare, salvare in PDF. La seconda è che il documento occupa disco, e resta lì finché qualcuno o qualcosa non lo toglie.

Come è organizzato

  • Un file di spool è il singolo documento. Di solito ha il nome del file di stampa che l'ha prodotto: il tasto Stampa produce QSYSPRT. I dati stanno in membri di database della libreria QSPL (o QSPLxxxx per un ASP).
  • Una coda di uscita (*OUTQ) è un oggetto in una libreria, e raccoglie i file di spool. Quando si configura una stampante, il sistema le crea una coda predefinita in QUSRSYS.
  • Un writer è il lavoro che prende i documenti da una coda e li manda a una stampante. Gira nel sottosistema QSPL, che deve essere attivo. Senza writer avviato, la coda si riempie e non stampa nulla.
WRKSPLF
WRKOUTQ OUTQ(PRODLIB/STAMPE)
STRPRTWTR DEV(PRT01)
WRKWTR

In quale coda finisce un documento: se il file di stampa dice OUTQ(*JOB), nella coda del job, che arriva dalla descrizione di job; se la descrizione di job dice *USRPRF, dal profilo utente; e il profilo, a sua volta, può dire *WRKSTN, cioè la coda della stazione di lavoro.

Nota

«la stampa non esce» ha tre cause da escludere in quest'ordine: il documento non è mai stato prodotto (guardare il job log), il documento è in coda ma il writer non è avviato (WRKWTR), oppure il documento è in un'altra coda. La catena qui sopra è il motivo per cui la terza succede quando si cambia una descrizione di job o un profilo.

Che cosa si può fare a un documento

Un file di spool si identifica con nome, numero e job che lo ha prodotto, perché lo stesso job può produrne molti con lo stesso nome:

CHGSPLFA FILE(QSYSPRT) JOB(123456/MROSSI/FATTURE) SPLNBR(3) OUTQ(PRODLIB/RISTAMPE)
HLDSPLF  FILE(QSYSPRT) JOB(123456/MROSSI/FATTURE) SPLNBR(3)
DLTSPLF  FILE(QSYSPRT) JOB(123456/MROSSI/FATTURE) SPLNBR(3)

Il contenuto si legge anche in SQL, con SYSTOOLS.SPOOLED_FILE_DATA. Senza numero prende il file con il numero più alto fra quelli con quel nome:

SELECT ORDINAL_POSITION, SPOOLED_DATA
  FROM TABLE(SYSTOOLS.SPOOLED_FILE_DATA(
       JOB_NAME            => '123456/MROSSI/FATTURE',
       SPOOLED_FILE_NAME   => 'QSYSPRT',
       SPOOLED_FILE_NUMBER => 3))

Perché il disco si riempie

I documenti non scadono da soli. Un rapporto notturno prodotto ogni giorno e mai cancellato è un archivio che cresce di 365 documenti l'anno, senza che nessuno abbia deciso di conservarli.

Vedere la situazione per utente, in documenti, pagine e kilobyte:

SELECT USER_NAME, COUNT(*) AS DOCUMENTI,
       SUM(TOTAL_PAGES) AS PAGINE, SUM(SIZE) AS KB
  FROM QSYS2.OUTPUT_QUEUE_ENTRIES
 GROUP BY USER_NAME
 ORDER BY KB DESC

SIZE è in kilobyte, TOTAL_PAGES in pagine. Le pagine sono l'unità in cui ragiona chi decide se un rapporto va tenuto; i kilobyte sono quello che si recupera cancellando.

Le difese sono tre:

  1. La pulizia automatica. GO CLEANUP, o il comando CHGCLNUP, decide se la pulizia gira, a che ora, e da quanti giorni togliere messaggi, job log e stampe di sistema (SYSPRT). Per cambiarla servono *ALLOBJ, *SECADM e *JOBCTL. Da quando è attiva, i job log vanno nella coda QUSRSYS/QEZJOBLOG e i dump in QUSRSYS/QEZDEBUG: chi li cerca nella coda di prima non li trova più.
  2. Una scadenza sui documenti. L'attributo EXPDATE (con *DAYS e DAYS, da 1 a 366) dà a un file di spool una data dopo la quale è cancellabile, e DLTEXPSPLF cancella quelli scaduti. IBM suggerisce di farlo girare una volta al giorno con una voce dello scheduler. Così la conservazione diventa una regola scritta.
  3. Non produrre quello che nessuno legge. Togliere un rapporto inutile vale più di qualunque pulizia, e va fatto chiedendo a chi lo riceve, non deducendo.

I documenti scaduti si vedono anche in SQL, perché OUTPUT_QUEUE_ENTRIES ha la colonna EXPIRATION_DATE:

SELECT OUTPUT_QUEUE_NAME, USER_NAME, SPOOLED_FILE_NAME, EXPIRATION_DATE
  FROM QSYS2.OUTPUT_QUEUE_ENTRIES
 WHERE EXPIRATION_DATE < CURRENT DATE

Avvertenza

cancellando i file di spool, i membri di database che li contenevano restano vuoti a disposizione dei documenti nuovi. Il valore di sistema QRCLSPLSTG dice per quanti giorni: di serie 8, poi il sistema li cancella. IBM sconsiglia *NONE (cancellarli subito), che aggiunge lavoro a ogni creazione di un file di spool e può peggiorare molto le prestazioni. Per recuperare lo spazio subito c'è RCLSPLSTG DAYS(*NONE). Sono i due soli modi ammessi di togliere quei membri dalle librerie QSPL: IBM avverte che qualunque altro può causare problemi gravi.

Portare fuori un documento

  • In PDF, con CPYSPLF ... TOFILE(*TOSTMF) TOSTMF('/percorso/file.pdf') WSCST(*PDF): il file finisce sull'IFS, pronto da spedire. La conversione vale per i file di spool di tipo *SCS o *AFPDS.
  • In un file di testo, con CPYSPLF verso un file fisico o un file dell'IFS senza conversione, quando il contenuto serve a un altro programma. IBM avverte che così una parte delle informazioni di stampa si perde o cambia.
  • Con ACS, scaricando il documento dall'interfaccia grafica, quando si tratta di uno solo.

Fonti

Torna all'indice della guida

← Torna al blog

Commenti

Nessun commento ancora. Sii il primo a commentare!

Devi avere un account per commentare. Accedi · Registrati