martedì 26 agosto 2008

Assegnare variabile da Select con SQLServer

A volte può essere utile salvare il risultato di una Select in una variabile, magari per poterla riutilizzare all'interno di un'altra Select senza dover annidare varie query.
Il comando per fare ciò è molto semplice:

DECLARE @variabile AS tipovariabile

SELECT @variabile = Campo FROM Tabella WHERE Condizione

Si devono solo seguire alcuni accorgimenti:
  • tipovariabile deve essere, ovviamente, dello stesso tipo dei dati contenuti in Campo
  • nel caso in cui la query restituisca più di una riga, la variabile conterrà il valore dell'ultima riga (questo è molto importante, in quanto se ad esempio si trattasse di date e volessimo memorizzare nella variabile la data più recente, effettuando un "ORDER BY Data DESC" otterremo l'effetto contrario in quanto memorizzando l'ultima riga ci troveremmo in realtà la data piu vecchia)
  • non si può usare la clausola TOP

Update da Select con Sql Server

Supponiamo di trovarci in questa situazione: dobbiamo aggiornare dei record in database e come dati di partenza abbiamo il risultato di una query. Le soluzioni sono 2: o modifichiamo la tabella a mano (il che con migliaia di record da modificare potrebbe essere un po fastidioso) oppure possiamo usare uno scriptino T-Sql che fa esattamente quello che ci serve (a patto però di avere un campo nella query che ci permetta di effettuare un join con la tabella da aggiornare).
Il codice è il seguente:

UPDATE T
    SET T.Campo1a = Q.Campo2a,
    T.Campo1b = Q.Campo2b
FROM
    (SELECT CampoID, Campo2a, Campo2b
    FROM Tabella WHERE Condizione) Q
INNER JOIN TabellaDaModificare T
    ON T.CampoID = Q.CampoID


Dove T è l'alias utilizzato per la tabella da modificare e Q è l'alias della Select.
Il Join farà in modo che i campi si aggiornino solo dovo apportuno (praticamente è come se gli facessimo fare un "Update ... Where")

giovedì 14 agosto 2008

Backup TrixBox

Mondoarchive è una soluzione di backup per sistemi *nix che crea file .iso con dimensioni di cd oppure dvd contenenti l’intera immagine del disco (un po’ come ghost sotto Windows). È una soluzione estremamente potente in quanto, tra le altre cose, una volta masterizzate le immagini sono bootabili ed autorestoranti. In questo modo, anche se ad esempio il disco del vostro server/pc si rompe, è possibile ripristinare l’installazione senza dover reinstallare tutto.
Inoltre, lo script di avvio/configurazione permette di scegliere se creare i file di immagine su disco, su chiavette usb, su share samba (cartelle di rete) oppure su ftp.
Per qualsiasi informazione aggiuntiva, visitate il sito dei realizzatori: http://www.mondorescue.org/
La procedura descritta qui sotto è ottimizzata per effettuare i backup di Trixbox versione 2.4 e 2.6 e di sistemi Asterisk.

Installazione
Come utente root, eseguire i comandi:
cd ~
wget http://www.dbtek.it/Repository/install-mondo.tgz
(o su http://www.astusers.org/install-mondo.tgz)
tar -xzvf install-mondo.tgz
chmod +x install-mondo.sh
./install-mondo.sh

Lo script install-mondo.sh scarica tutte le dipendenze, installa mondo backup e crea una configurazione personalizzata per trixbox.
Finita l’installazione è necessario riavviare il sistema.

Poi bisogna editare il file /etc/cron.weekly/mondobackup.cron per attivare le opzioni di backup desiderate e configurare il programma. Tutte le istruzioni necessarie sono contenute direttamente all’interno del file sotto forma di commenti (in lingua inglese).

Per testare il funzionamento della procedura eseguire /etc/cron.weekly/mondobackup.cron

ATTENZIONE: se si verificano degli errori sul mount di drive samba (condivisioni di rete su Microsoft) e il vostri username o password per la condivisione utilizzano caratteri diversi dalle semplici lettere e numeri dovete inserire prima e dopo la stringa un apice ( ‘ )


Ripristino di un backup
Per ripristinare un backup effettuato con Mondo, si possono scegliere diverse alternative:

Nuke (formatta il disco e ripristina tutto, automaticamente)
Interactive
Expert

Inoltre è possibile provare a ripristinare solo il bootloader (se non si è perso il disco):
• Far il boot dal CD/DVD di backup e scegliere Expert Mode
• digitare: mondorestore --mbr
• scegliere l’opzione 28 e poi
bash# mount-me
bash# chroot /mnt/RESTORING
bash# lilo oppure grub-install ’(hd0)’
bash# exit
bash# unmount-me

Nuke Restore
Come già detto, questa opzione sovrascrive completamente il disco fisso del sistema, ripristinando automaticamente il backup

• Fare il boot dal primo CD/DVD di backup
• Scegliere RESTORE
• Quando richiesto, inserire i CD/DVD seguenti (se presenti)
• Controllare che non ci siano errori

Se si verifica qualche errore, è possible controllare il file /tmp/mondorestore.log.

Se si vuole vedere passo passo cosa sta facendo il programma, basta premere e per analizzare “on-the-fly” il log.

Interactive Restore
L’Interactive Mode permette di ripristinare un sottoinsieme di dati dal backup, e non l’intero sistema, oppure si può utilizzare per ripristinare tutti i file ma senza dover formattare il disco.

Il ripristino interattivo fornisce l’ “Editing mountlist screen” che permette di impostare diverse geometrie del disco. Per spostarsi tra le partizioni utilizzare le frecce su e giu. Per spostarsi tra i bottoni, invece utilizzare le frecce destra e sinistra.

Per ripristinare solo una parte dei file, la procedura da seguire è la seguente:
• Fare il boot dal primo CD/DVD di backup
• Digitare interactive
• Rispondere alle domande poste:
Do you want to partition your devices? no
Do you want to format them? no
Do you want to restore everything? no
Do you want to restore something? yes
Which path do you want to restore? /mydata (ad esempio)
Do you want to run LILO to setup your boot sectors? Yes

Expert Restore
Per effettuare un restore manuale:
• Fare il boot dal primo CD/DVD di backup
• Digitare expert
• Digitare mondorestore

Ora dovreste seguire le istruzioni a video per modificare a piacimento il sistema e ripristinare manualmente i file.