14/07/2005


X (size matters!)

Sono giorni che non mi faccio vivo e qualcuno penserà che sono andato in vacanza.
Diciamo allora che ero in vacanza-studio.
Ho passato due giorni a studiare come recuperare qualche striminzito gigabyte di disco da un vecchio (4 anni) server.
Qualcuno dirà che sono un fesso, che oggi con duecento euro ti porti a casa un disco da 500 gigabyte che lo attacchi in rete e non ci pensi più.
In generale è vero, che sono fesso intendo, però questa era ormai una questione d'onore e, comunque, nel caso specifico, questa soluzione non avrebbe potuto funzionare.
Perchè ?
Perchè la lotta per conquistare 10 striminziti giga era fra me ed il mitico sql server di microsoft, che il disco lo pretende dentro al server: delle unità di rete, per quanto capienti e veloci possano essere, non sa proprio che farsene, quindi o gli trovavo lo spazio o rinunciavo al mio caro database.
Ma come ho potuto costruire un database in un server con un disco così limitato ?
Primo perchè sono fesso, secondo perchè a quel server ci sono affezionato, terzo perchè il database, file di log incluso, non dovrebbe superare i 600 megabytes, quindi, con una scorta di 9,4 giga, avrei potuto stare tranquillo.
Ma non avevo considerato il fattore "X".
Tempo fa avevo impostato una replica schedulata per essere eseguita ogni notte.
Questa replica avrebbe copiato tutti i dati di una certa categoria, salvo le categorie da escludere (da contrassegnare con una X in un certo campo).
Ebbene, due mesi fa, avrei dovuto mettere una X su una di queste categorie (che vale circa 100.000 righe) per smettere di replicarla.
Invece ho dimenticato di farlo poi, siccome la categoria era superata, non l'ho più guardata.
E ieri il disco si è riempito, dopo che le 100.000 righe, ricopiate ogni notte per 60 notti di seguito, sono diventate 6.000.000 di righe.
A questo punto ho passato due giorni a provare tutte le tecniche messe a disposizione da Microsoft con nomi promettenti come "truncate log" (il vero mangiadisco è, infatti il log, più che il file dati) oppure "shrink database".
Tutto è stato inutile: lui pretendeva, prima di eliminare il log, di salvarlo, anche se a me non avrebbe potuto fregare di meno di questo inutile log.
Ma come avrei potuto salvarlo se questo beneamato log occupava 7 gb e, a fatica, pulendo di qua e di là, ero riuscito a metterne insieme solo 2 ?
Una funzione semplice ed efficace del tipo: "butta il log nel cestino e non preoccuparti, che il database poi si aprirà comunque" ancora non mi pare esista (forse nella prossima release di sql).
Alla fine, come in ogni koan che si rispetti, oggi è arrivata l'illuminazione: creare un nuovo database copiando dal vecchio solo le cose utili.
In un'ora avevo finito ed avevo liberato ben 10,6 gigabytes.

Buonanotte (e scusate l'argomento pallosetto) !
5am

PS: a proposito di dischi, questa sera al centro lame c'è stato un concerto delle vibrazioni (vedi foto all'inizio). Standomene a letto me li sono ascoltati molto bene (complici i discreti amplificatori e la notte estiva che sconsiglia di chiudere le finestre): tutto sommato il loro stile neo-70 non mi dispiace affatto.