Giuseppe’s Weblog

Just another WordPress.com weblog

Note su Oracle

lascia un commento »

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

Struttura database Oracle

Le operazioni in caso di istruzione SQL di Select sono le seguenti:

  1. Parsing
  2. Calcolo del piano di esecuzione
  3. 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:

  1. Scrittura di un Rollback Block nella DB buffer cache
  2. 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

Written by gfiorito

Maggio 17, 2009 alle 11:49 pm

Pubblicato in Oracle

Creare un Ram Disk

lascia un commento »

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/

Written by gfiorito

Marzo 20, 2009 alle 9:10 am

Pubblicato in HowTo, Linux

Reset password in mysql

lascia un commento »

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.

Written by gfiorito

Gennaio 5, 2009 alle 11:05 am

Pubblicato in MySQL

Out of memory on oracle startup

lascia un commento »

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)

Written by gfiorito

Settembre 15, 2008 alle 9:45 am

Pubblicato in HowTo, Oracle, Solaris

Spostare datafile, redolog file e controlfile – Oracle Database

lascia un commento »


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.

Written by gfiorito

Agosto 5, 2008 alle 11:28 am

Pubblicato in HowTo, Oracle

Installare CVS on Solaris 10

con 2 commenti

Configurare pserver su un istallazione cvs di Sun Solaris 10 in /opt/csw/bin/cvs cvs:

Creare un file temporaneo con la sintassi inetd.conf per abilitare pserver:

cat <<EOF >/tmp/inetd.conf
cvspserver stream tcp nowait root /opt/csw/bin/cvs cvs -f --allow-root=/cvs/repositories pserver
EOF

convertire il file nel formato Solaris SMF (Service Management Facility)

inetconv -i /tmp/inetd.conf

Se il servizio e’ stato aggiunto il seguente comando:

inetadm |grep cvs

dovrebbe avere un output del tipo:

enabled online svc:/network/cvspserver/tcp:default

per visualizzare che il servizio e’ in ascolto:

netstat -a |grep cvs

che da il seguente output:

*.cvspserver *.* 0 0 49152 0 LISTEN

per modificare il servizio appena creato utilizzare i seguenti comandi per listare il servizio e modifcarlo:

inetadm -l /network/cvspserver/tcp
inetadm -m /network/cvspserver/tcp exec="/opt/csw/bin/cvs -f --allow-root=/cvs/repositories/dev pserver"

il primo dei precedenti comandi dovrebbe dare un output del genere di cui col secondo comando modifichiamo il campo exec:

SCOPE NAME=VALUE
name="cvspserver"
endpoint_type="stream"
proto="tcp"
isrpc=FALSE
wait=FALSE
exec="/opt/csw/bin/cvs -f --allow-root=/cvs/repositories pserver"
user="root"
default bind_addr=""
default bind_fail_max=-1
default bind_fail_interval=-1
default max_con_rate=-1
default max_copies=-1
default con_rate_offline=-1
default failrate_cnt=40
default failrate_interval=60
default inherit_env=TRUE
default tcp_trace=FALSE
default tcp_wrappers=FALSE

Per cancellare il servizio appena creato disabilitarlo e cancellarlo come segue:

svcadm disable /network/cvspserver/tcp
svccfg delete /network/cvspserver/tcp

Written by gfiorito

Agosto 1, 2008 alle 4:08 pm

Pubblicato in Cvs, HowTo, Solaris

X11 tcp trouble

lascia un commento »

abilitare che gli host remoti possano connettersi lanciado il comando:

xhost +

exportare il DISPLAY:

export DISPLAY=<ip_x_host>:0.0

per verificare che ci siano connessioni attive in ascolto:

netstat --tcp --listen | grep x11

se non ve ne sono, verificare il file di configurazione gdm.conf la riga:

DisallowTCP=false (diu default sta a true)

(il file sotto ubuntu e’ in /etc/gdm/gdm.conf eventualmente cercarlo sotto /etc, con il comando find /etc |grep gdm.conf)

Written by gfiorito

Giugno 27, 2008 alle 12:20 pm

Pubblicato in HowTo, Linux, Ubuntu

Joomla Plugin Login

lascia un commento »

Per tutti i bischeri che come me hanno disabilitato il plugin di login di joomla e non riescono piu’ ad accedere come amministratore:

  • accedere da mysql
  • aggiornare nella tabella xxx_plugins il valore di published da zero ad uno della Joomla Autenthication

Written by gfiorito

Giugno 16, 2008 alle 3:50 pm

Pubblicato in Joomla

Oracle imp exp con file compressi

lascia un commento »

Export

mkfifo exportFIFO.dmp

nohup exp scott/tiger tables=(EMP, DEPT) file=exportFIFO.dmp&

nohup gzip < exportFIFO.dmp > export.dmp.gz&

Import

mkfifo importFIFO.dmp

nohup gzip -d < export.dmp.gz > importFIFO.dmp&

nohup imp scott/tiger fromuser=scott touser=scott ignore=Y file=importFIFO.dmp&

Written by gfiorito

Giugno 12, 2008 alle 10:34 am

Pubblicato in HowTo, Oracle

Bind address in my-sql

con un commento

Nel seguente file:
/etc/mysql/my.cnf

sostituire:

bind-address = 127.0.0.1

con:

bind-address = 0.0.0.0

Nel primo caso mysql in ascolto solo da localhost nel secondo da ogni indirizzo.

Written by gfiorito

Maggio 16, 2008 alle 2:12 pm

Pubblicato in HowTo, MySQL