Comandi Shell Utili
Rimuovere i file piu’ vecchi di una certa data:
cancellare i file piu’ vecchi di 7 giorni
/usr/bin/find /spare2/SVNback -name "backupSVN*.tar.bz" -mtime +7 -exec /bin/rm {} \;
Creare un file con una particolare data:
touch -t time nome_file (dove time e’ nel formato MMDDhhmm)
crea un file con data 20 Gennaio 12:00
touch -t 01201200 file.txt
Creare un database da linea di comando
in Disk/database/response/dbca.rsp
personalizzare i parametri:
GDBNAME = “DEV”
SID = “DEV’
TEMPLATENAME = “General_Purpose.dbc”
dbca -silent -responseFile dbca.rsp
ed in 5 minuti il db e’ creato senza necessita’ dell’interfaccia X
CVS LogHistory
Nel file di configurazione config il parametro LogHistory specifica cosa viene loggato nel file history del server cvs.
Se il parametro LogHistory assume il valore TOEFWUPCGMAR vengono loggate tutte le transazione utente; mentre se assume il valore TMAR solo le operazioni di scrittura.
La serie di flag TOEFWUPCGMAR non sono documentati nel manuale CVS (familiarmente The Cederqvist) ma solo nei commenti dei sorgenti e di seguito elenco:
- T “Tag” cmd.
- O “Checkout” cmd.
- E “Export” cmd.
- F “Release” cmd.
- W “Update” cmd – No User file, Remove from Entries file.
- U “Update” cmd – File was checked out over User file.
- P “Update” cmd – User file was patched.
- G “Update” cmd – File was merged successfully.
- C “Update” cmd – File was merged and shows overlaps.
- M “Commit” cmd – “Modified” file.
- A “Commit” cmd – “Added” file.
- R “Commit” cmd – “Removed” file.
Manipolare stringhe in Unix
SED script per trasformare ^V^M
Per troncare tutte gli spazi in fondo alle righe di un file terminanti con <newline><linefeed> (^V^M) usare il seguente comando:
sed 's/'\ *"$(printf '15')"'$//g' file_di_input > file_di_output
AWK stampare una colonna con separatore
cat passwd|awk 'BEGIN { FS = ":" } ; { print $1 }'>readers
Update Drupal
Scaricare dal sito il file drupal-6.13.tar.gz e scompattarlo.
Fare l’upload sul server.
Mettere off-line il sito:
Home » Administer » Site configuration » Site maintenance
Copiare il file default.settings.php in settings.php e modificare da false a true il parametro $update_free_access
Lanciare via web il comando update.php
Ricordare che se il db non e’ su localhost occorre specificarlo in advanced settings nella pagina di configurazione del DB.
Seguire tutti i passi standard.
Copiare i file custom dalla vecchia istallazione (sites/all/themes).
Mettere on-line il sito puntando alla nuova cartella.
Eventualmente tramite phpmyadmin fare il seguente update:
UPDATE variable SET value = ‘s:1:”0″;’ WHERE name= ‘site_offline’;
DELETE FROM cache WHERE cid = ‘variables’;
e buon divertimento
Note su Oracle
Di seguito gli appunti di un seminario Oracle seguito qualche anno fa (20/04/2004) che ho ritenuto utile trascrivere.
Un database Oracle consiste di:
- Memoria SGA: DB Buffer Cache, Shared Pool, Redolog Buffer
- Processi: DBWR, LGWR, SMON, PMON, CKPT
- File: Datafile, Control File, Redo Log File
DB Buffer Cache: fa permanere in memoria i dati piu’ frequentemente usati
Shared Pool: cache dei piani di esecuzione degli statement SQL arrivati al database
Redo Log Buffer: registro delle operazioni che hanno modificato il database
DBWR: scrive i dati nei datafile
LGWR: scrive le operazioni dal Redolog Buffer al Redolog File
SMON: system monitor, legge il control file per attivare le attivita’ di recovery in caso di crash
PMON: gestore dei processi, libera le risorse usate dalle connessioni scadute
CKPT: check point, si occupa della sicronizzazione tra i dati in memoria e su disco

Le operazioni in caso di istruzione SQL di Select sono le seguenti:
- Parsing
- Calcolo del piano di esecuzione
- Fetch
Ma se l’istruzione e’ gia’ presente in shared pool la sola fase di fetch viene eseguita
La fetch preleva i dati da la DB buffer cache se gia’ presenti in memoria altrimenti li preleva da datafile.
Le operazioni in caso di istruzione che modifica i dati sono le seguenti:
- Scrittura di un Rollback Block nella DB buffer cache
- Scrittura dell’operazione fatta nel Redo Log Buffer
L’operazione di commit non sincronizza i datafile ma semplicemente i Redolog, l’operazione di modifica viene riportata nel Redo Log File.
Il blocco modificato viene marcato come sporco (Dirty) e non potra’ essere modificato fino a che non verra effettuata la sicronizzazione (di default dopo 3 minuti oppure prima se viene superato il numero di blocchi dirty di soglia). E necessaria una sincronizzazione (Check Point) anche nel caso di un Redo Log pieno.
Il Check Point produce un numero l’SCN scritto nel Control File e nel Redo Log file. In caso di auto recovery tutte le operazioni successive all’ultimo SCN sono quelle necessarie al recovery.
Gli stati di apertura di un database sono nell’ordine:
- shutdown
- nomount: viene letto il parameter file init<SID>.ora
- mount: viene letto il control file
- open:
Le opzioni di chiusura di un database sono:
- abort
- immediate
- transactional
- normal
Alla fine della creazione di un database generalmente possono essere cancellate:
- la cartella template assistant/dbca
- e i tablespace TOOLS, USERS, INDX
Creare un Ram Disk
su AIX
mkramdisk 40000
mkfs -V jfs /dev/ramdisk0
mkdir /pathToMyRamDrive
mount -V jfs -o nointegrity /dev/ramdisk0 /pathToMyRamDrive
chown myuser:mygroup /pathToMyRamDrive
umount /dev/ramdisk0
rmramdisk /dev/ramdisk0
su Linux
sudo mkdir /media/ramdisk
sudo mount /dev/ram0 /media/ramdisk/
sudo mount -t tmpfs -0 size=1G tmpfs /media/ramdisk/
Reset password in mysql
Per resettare la password di amministratore in mysql occorre far partire il server mysqld in safe mode disabilitando la richiesta di password (e’ necessario essere utente root di sistema):
sudo /etc/init.d/mysql stop
sudo /usr/bin/mysqld_safe –skip-grant-tables &
sudo mysql –user=root mysql
mysql> update user set Password=PASSWORD(‘mysql-root’) where user=’root’;
mysql> flush privileges;
mysql> exit
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
Nota che il seguente messaggio in grassetto:
* Starting MySQL database server mysqld [ OK ]
* Checking for corrupt, not cleanly closed and upgrade needing tables.
non indica un errore ma semplicemente un messaggio dei controlli che fa il db durante lo startup.
Out of memory on oracle startup
Sintomo: allo startup del database errore out of memory
SQL> startup
ORA-27102: out of memory
SVR4 Error: 22: Invalid argument
SQL> Disconnected
una volta verificato che oracle_home, oracle_sid etc … siano settati in modo corretto verificare che non si siano raggiunti i limiti di memoria massima concessi all’utente oracle.
Con la procedura seguente e’ possibile modificare provvisoriamente i parametri di sistema:
$ id -p
uid=60003(oracle) gid=203(oinstall) projid=100(user.oracle)
$ prctl -n project.max-shm-memory -i project user.oracle
project: 100: user.oracle
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
project.max-shm-memory
privileged 4.00GB - deny -
system 16.0EB max deny -$ su -
# prctl -n project.max-shm-memory -v 6gb -r -i project user.oracle
# exit
$ prctl -n project.max-shm-memory -i project user.oracle project: 100: user.oracle
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
project.max-shm-memory
privileged 6.00GB - deny -
system 16.0EB max deny -$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.2.0 – Production on Mon Sep 15 08:43:06 2008
Copyright (c) 1982, 2005, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.Total System Global Area 1073741824 bytes
Fixed Size 2132680 bytes
Variable Size 266171704 bytes
Database Buffers 801112064 bytes
Redo Buffers 4325376 bytes
Database mounted.
Database opened.
SQL>
Per modificare permanentemente tali parametri occorre aggiungere un nuovo progetto nel project file:
# cat /etc/project
system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::
Per aggiungere un progetto usare il comando projadd, per modificarlo usare projmod:
# projadd -U oracle -K "project.max-shm-memory=(priv,6144MB,deny)" user.oracle
# projmod -s -K "project.max-sem-ids=(priv,256,deny)" user.oracle
Il project file dovrebbe apparire cosi’:
# cat /etc/project
system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::
user.oracle:100::oracle::project.max-sem-ids=(priv,256,deny);project.max-shm-memory=(priv,6442450944,deny)
Spostare datafile, redolog file e controlfile – Oracle Database
Datafile e RedoLog file
Per spostare i datafile e i redolog file eseguire il seguente comando:
SQL>alter database backup controlfile to trace;
che crea un file di trace generalmente nella seguente cartella:
$ORACLE_HOME/admin/[$ORACLE_SID]/udump/
copiare il file ed editare lo statement di creazione del control file modificando i path dei datafile da spostare;
fare lo shutdown;
SQL>shutdown immediate;
fare la copia fisica dei datafile e dei redolog file nella nuova posizione;
eseguire i comandi precedentemente editati ponendo attenzione a evitare le righe commentate che potrebbero creare problemi;
alter database backup controlfile to trace;
vi $ORACLE_HOME/admin/[$ORACLE_SID]/udump/sid_ora_XXXXX.trc
shutdown immediate;
cp -p /oracleDB/oraBase/oradata/SILDEV/redo*.log /spare2/SILDEV/
cp -p /oracleDB/oraBase/oradata/SILDEV/system01.dbf /oraDB_data/dbase/SILDEV/
cp -p /oracleDB/oraBase/oradata/SILDEV/sysaux01.dbf /oraDB_data/dbase/SILDEV/
cp -p /oracleDB/oraBase/oradata/SILDEV/users01.dbf /oraDB_data/dbase/SILDEV/
cp -p /oracleDB/oraBase/oradata/SILDEV/undotbs01.dbf /oraAS/SILDEV/
cp -p /oracleDB/oraBase/oradata/SILDEV/temp01.dbf /oraDB_data/dbase/SILDEV/STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE “SILDEV” NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ‘/spare2/SILDEV/redo01.log’ SIZE 50M,
GROUP 2 ‘/spare2/SILDEV/redo02.log’ SIZE 50M,
GROUP 3 ‘/spare2/SILDEV/redo03.log’ SIZE 50M
DATAFILE
‘/oraDB_data/dbase/SILDEV/system01.dbf’,
‘/oraAS/SILDEV/undotbs01.dbf’,
‘/oraDB_data/dbase/SILDEV/sysaux01.dbf’,
‘/oraDB_data/dbase/SILDEV/users01.dbf’
CHARACTER SET WE8ISO8859P1
;
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE ‘/oraDB_data/dbase/SILDEV/temp01.dbf’
SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
Controlfile
Per spostare i controlfile occorre modificare il file spfile.ora nella cartella:
$ORACLE_HOME/dbs/spfile[$ORACLE_SID].ora
farne una copia di sicurezza;
esso e’ un file binario; per cui occore prima trasformarlo in un file di testo col seguente comando:
SQL>create pfile='[path]/pfile[$ORACLE_SID].ora' from spfile='$ORACLE_HOME/dbs/spfile[$ORACLE_SID].ora';
editare il file “pfile[$ORACLE_SID].ora” e modificare il path dei controlfile che si vogliono spostare e/o eventuali altri parametri di sistema;
fare lo shutdown;
SQL>shutdown immediate;
spostare i controlfile nella nuova posizione;
fare una prova del pfile startando il db col seguente comando:
SQL> startup pfile='[path]/pfile[$ORACLE_SID].ora';
e verificare che l’istanza parta correttamente.
potrebbe generare un errore di tipo “ORA-01991: invalid password file…”
in questo caso va rigenerato il file di password che generalmente ha un path del tipo:
[$ORACLE_HOME]/dbs/orapw[$ORACLE_SID]
rinominare il file (per sicurezza) e ricrearlo, il comando è il seguente:
orapwd file=[$ORACLE_HOME]/dbs/orapw[$ORACLE_SID] password=[password]
a questo punto provare a startare di nuovo l’istanza attraverso il pfile,
se tutto va a buon fine ricreare l’spfile dal pfile appena modificato;
SQL>create spfile='$ORACLE_HOME/dbs/spfile[$ORACLE_SID].ora' from pfile='[path]/pfile[$ORACLE_SID].ora';
fare lo startup del database;
SQL>startup;
Verificare il corretto funzionamento del Database.