Un programma che stampa non parla con una stampante. Produce un file di spool, cioè un oggetto che contiene il documento e resta sul sistema finché qualcuno non lo stampa, lo converte, o lo cancella.
Da qui 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 che nessuno lo cancella al posto tuo.
Come è organizzato
- Un file di spool è il singolo documento prodotto da un job.
- Una coda di uscita (
*OUTQ) è un oggetto in una libreria, e raccoglie i file di spool. Ogni job ne ha una predefinita, che arriva dalla sua descrizione di job o dal profilo utente. - Un writer è il lavoro che prende i documenti da una coda e li manda a una stampante. Senza writer avviato, la coda si riempie e non stampa nulla.
WRKSPLF
WRKOUTQ OUTQ(PRODLIB/STAMPE)
STRPRTWTR DEV(PRT01)
WRKWTR
Nota
"la stampa non esce" ha tre cause possibili, e vale la pena escluderle 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 è nella coda sbagliata
— che succede tutte le volte che si cambia la descrizione di job di qualcuno senza
pensare all'OUTQ.
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)
Dal rilascio 7.3 il contenuto si legge anche in SQL, il che rende cercabile un documento senza doverlo scorrere:
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
Questo è il motivo per cui il capitolo esiste. Su un sistema in produzione da anni, lo spool è insieme all'IFS la prima causa di spazio consumato, e per una ragione banale: i documenti non scadono. Un report 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:
SELECT USER_NAME, COUNT(*) AS DOCUMENTI,
SUM(SIZE) / 1024 / 1024 AS MB
FROM QSYS2.OUTPUT_QUEUE_ENTRIES_BASIC
GROUP BY USER_NAME
ORDER BY MB DESC
Le difese sono tre, in ordine di quanto reggono nel tempo:
- La pulizia automatica del sistema.
GO CLEANUPconfigura la rimozione periodica di job log e code di uscita di sistema. È il minimo, e su molti sistemi non è mai stato attivato. - Una scadenza sui documenti. L'attributo
EXPDATE/DAYSfa scadere i file di spool, eDLTEXPSPLFcancella quelli scaduti. Così la conservazione diventa una regola scritta invece di una pulizia che qualcuno ricorda di fare. - Non produrre quello che nessuno legge. Su un sistema anziano una parte dei report notturni non viene guardata da anni. Toglierli è più efficace di qualunque pulizia, e va fatto chiedendo, non deducendo.
Avvertenza
cancellare i file di spool libera lo spazio dei documenti, ma il sistema
tiene comunque dei contenitori di memoria per lo spool. Il valore di sistema
QRCLSPLSTG decide dopo quanti giorni quei contenitori vengono recuperati: se è alto, lo
spazio si vede tornare libero molto dopo la cancellazione, e sembra che la pulizia non
abbia funzionato.
Portare fuori un documento
Le tre strade che si usano davvero:
- In PDF, con
CPYSPLF ... TOSTMF(...) WSCST(*PDF)oppure dalla trasformazione di stampa, e il file finisce sull'IFS pronto per essere spedito; - In un file di testo, con
CPYSPLFverso un file fisico o un file dell'IFS, quando il contenuto serve a un altro programma; - Con ACS, che permette di scaricare un documento sul PC dall'interfaccia grafica ed è la strada più semplice quando si tratta di un documento solo.
Commenti
Nessun commento ancora. Sii il primo a commentare!
Devi avere un account per commentare. Accedi · Registrati