Da buoni smanettoni, figli della Slackware Philosophy , dei “veri” Sistemi Operativi UNIX-Like e della Command- Shell, non potevamo certo usare l’utility dbca messa a disposizione da Oracle per la creazione tramite interfaccia grafica del nostro nuovo Database Oracle 11g.
A noi piace complicarci la vita… le scelte più semplice le lasciamo agli altri 😀
Per l’esame di Sistemi Distribuiti assieme al mio efficientissimo ed affiatatissimo gruppo di lavoro ( Cara Angela, Maddalena, Mario e Rita non fate caso alle mie divagazioni …. di solito sono una persona normale, che fa cose normali 😀 ) abbiamo deciso di estendere/enhanced il progetto presentato in Laboratorio di Ingegneria del Software, implementando una Struttura del sistema a 3 livelli con:
- La distribuzione del Database ( tramite Oracle e l’uso della Synonyms e dei Database Link )
- il Load Balancing del carico dal Web-Server ( Apache ) verso il Servlet-Engine ( Tomcat ) utilizzando JK ,
- La suddivisione dei vari Servizi su più macchine Host.
… dopo questo preambolo sembra (quasi) un progetto serio 😛
Ho sempre avuto una “insana” debolezza per i Database Distribuiti, per questo motivo, non avendo prima d’ora visto nulla, ho deciso di cimentarmi nella creazione di uno di essi…. e sembra quasi che ci sia riuscito 😀
Vabbè… credo di avervi già annoiato troppo, magari siete alla ricerca di qualche utile comando… ed io vi stò costringendo a leggere queste stupidaggini 😛
I Step:
Iniziamo con il download della Macchina Virtuale che Oracle ci mette già a disposizione con all’interno il Database e gli strumenti di sviluppo pronti per essere utilizzati ( P.s. l’utility dbca in questa versione non funziona 😛 )
http://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.html
prima di procedere con il prossimo passo specifichiamo per i For-Dummies, come me, alcuni concetti base dei Database Oracle.
La variabile d’ambiente ORACLE_SID deve contenere il nome del Db che vogliamo creare/utilizzare. Nel mio caso il Database avrà il nome “db1“, per cui…
[sourcecode language=”bash”]
[oracle@localhost ~]$ export ORACLE_SID=db1
[/sourcecode]
II Step
Passiamo alla creazione del SPFILE, il file responsabile dell’inizializzazione dei parametri del nostro nuovo Database( da posizione in %ORACLE_HOME/dbs ), esso deve essere posizionato nella seguente Directory:
[sourcecode language=”bash”]
[oracle@localhost ~]$ echo $ORACLE_HOME/dbs
/home/oracle/app/oracle/product/11.2.0/dbhome_2/dbs
[/sourcecode]
il nome deve essere formato da init$ORACLE_SID.ora, nel mio caso e’: initdb1.ora
[sourcecode language=”bash”]
control_files = (/home/oracle/app/oracle/oradata/db1/control1.ctl,/home/oracle/app/oracle/oradata/db1/control2.ctl,/home/oracle/app/oracle/oradata/db1/control3.ctl)
undo_management = AUTO
undo_tablespace = UNDOTBS1
db_name = db1
db_block_size = 8192
sga_max_size = 1073741824 #one gig
sga_target = 1073741824 #one gig
[/sourcecode]
III Step
Creiamo il file con la password di accesso al Db
[sourcecode language=”bash”]
[oracle@localhost ~]$ $ORACLE_HOME/bin/orapwd file=$ORACLE_HOME/dbs/pwddb1.ora password=flavio entries=5
[/sourcecode]
Bene… ora non ci resta altro che lanciare l’istanza ( con l’opzione nomount ) del Database ed incrociare le dita che tutto vada bene 😀
IV Step
Attenzione: controllare sempre che la variabile ORACLE_SID abbia sempre il valore del vostro Database
Logghiamoci tramite l’utility sqlplus come sysdba, e lanciamo l’istanza senza montare il Database
[sourcecode language=”bash”]
[oracle@localhost ~]$ sqlplus / as sysdba
SQL > startup nomount
[/sourcecode]
A questo punto la macchina virtuale potrebbe darvi questo errore (almeno nel mio caso mi restituisce questo)
[sourcecode language=”bash”]
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00130: invalid listener address ‘(ADDRESS=(PROTOCOL=TCP)(HOST=new-host)(PORT=1521))’
[/sourcecode]
basta solamente aggiungere in /etc/hosts il dns new-host all’indirizzo IP 127.0.0.1, dato che il Listener non riconosce hostname
V Step
Passiamo alla creazione vera e proprio del Database inserendo direttamente in sqlplus i seguenti comandi
[sourcecode language=”bash”]
SQL> create database db1
logfile group 1 (‘/home/oracle/app/oracle/oradata/db1/redo1.log’) size 100M,
group 2 (‘/home/oracle/app/oracle/oradata/db1/redo2.log’) size 100M,
group 3 (‘/home/oracle/app/oracle/oradata/db1/redo3.log’) size 100M
character set WE8ISO8859P1
national character set utf8
datafile ‘/home/oracle/app/oracle/oradata/db1/system.dbf’ size 500M autoextend on next 10M maxsize unlimited extent management local
sysaux datafile ‘/home/oracle/app/oracle/oradata/db1/sysaux.dbf’ size 100M autoextend on next 10M maxsize unlimited
undo tablespace undotbs1 datafile ‘/home/oracle/app/oracle/oradata/db1/undotbs1.dbf’ size 100M
default temporary tablespace temp tempfile ‘/home/oracle/app/oracle/oradata/db1/temp01.dbf’ size 100M;
[/sourcecode]
Anche in questo caso potrebbe restiturvi il seguente errore, causato dalla mancata creazione della cartella dove saranno posizionati i redofile
[sourcecode language=”bash”]
ERROR at line 1:
ORA-01501: CREATE DATABASE failed
ORA-00200: control file could not be created
ORA-00202: control file: ‘/home/oracle/app/oracle/oradata/db1/control1.ctl’
ORA-27040: file create error, unable to create file
Linux Error: 2: No such file or directory
[/sourcecode]
Per risolvere, basta creare la cartella:
[sourcecode language=”bash”]
[oracle@new-host ~]$ mkdir /home/oracle/app/oracle/oradata/db1
[/sourcecode]
VI Step
Per completare l’installazione del Database lanciamo i seguenti script che Oracle ci mette a disposizione per la creazione delle views di default , synonyms e PL/SQL packeges
[sourcecode language=”bash”]
SQL> @?/rdbms/admin/catalog.sql
SQL> @?/rdbms/admin/catproc.sql
[/sourcecode]
VII Step
SQL> create tablespace school20
datafile ‘/home/oracle/app/oracle/oradata/db1/school20_01.dbf’
size 50m;
[/sourcecode]
SQL> create user flavio identified by flavio default tablespace school20 quota unlimited on school20;
SQL> grant all privilege to flavio;
[/sourcecode]
VIII Step
Se tutto sara’ andato per il meglio, lanciamo l’istanza del Database e poi proviamo a collegarci ( Ricordate sempre che ORACLE_SID abbia come valore il nome del vostro Db)
[sourcecode language=”bash”]
SQL> startup
[/sourcecode]
[oracle@localhost root]$ sqlplus flavio/flavio
[/sourcecode]
Buon smanettamento con il vostro Database Oracle 😀
Reference:
http://docs.oracle.com/cd/B10501_01/server.920/a96521/create.htm#1000691
http://www.adp-gmbh.ch/ora/admin/creatingdbmanually.html
http://www.dba-oracle.com/oracle_create_database.htm
Ciao. Io in genere utilizzo il dbca che genera gli script di creazione del db e poli li lancio a mano.
Il fatto è che se per un esame universitario va bene una soluzione del genere, su sistemi di produzione, è preferibile utilizzare gli strumenti ufficiali rilasciati dalla Oracle per creare il db.
Ciao Andrea, e’ un piacere scambiare qualche idea con qualcuno che e’ gia’ nel campo come te, ho solo da imparare 😀 cmq credo che l’ufficialita’ dei tools messi a disposizione da Oracle servano per velocizzare i processi, non aggiungono nessuna funzionalita’,ma anzi ne nascondano alcune (Ex. La grandezza dei redofile). Il metodi che uso spesso io, la creazione manuale, mi permette di leggere a fondo le documentazioni ufficiali e capire bene cio’ che sto facendo…pero’ e’ solo la mia idea soggettiva :). Altro fattore che non mi ha permesso di usare dbca e’ stato quello che nellaversionedella VM non funziona il tool (molti forum ne parlano). Spero verrai a trovarmi presto sul blog.. sto scrivendo un piccolo post sylla synonyms e database link… a presto
Non conoscevo il problema del dbca su VM. Concordo con te che i tools grafici alcune funzionalità. Ma d’altro canto come hai detto, il loro principale compito è quello di aiutare e velocizzare l’utente finale.
In ogni caso, l’utilizzo che ne faccio di dbca è soltanto quello di generazione degli script. Poi uno per volta li edito, modificando i vari path dei file system e parametri che ritengo necessari.
Proprio mentre ti scrivo, sto creando un db 11.2.0.3. Il dbca ha creato i segunenti files (che prevedono una serie di comandi in più che ad esempio tu non hai lanciato):
– IISMRp.sh
– CreateDB.sql
– CreateDBCatalog.sql
– CreateDBFiles.sql
– IISMRp.sql
– JServer.sql
– apex.sql
– context.sql
– emRepository.sql
– interMedia.sql
– lockAccount.sql
– ordinst.sql
– postDBCreation.sql
– xdb_protocol.sql
(il nome del db è IISMRp)
Caro Andrea, credo che la soluzione che adotti tu , quella della generazione dei soli file script, sia ottimale in termini di costumizzazione del DB.
Molti degli script che mi hai citato sono contenuti nei file messi a disposizione da Oracle in :
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
Ex. JServer, context ecc…
Sono script che servono per la creazione vera e propria del Db e di tutta l’architettura a contorno che usa Oracle, ma di sicuro ne saprai piu’ di me visto che utilizzi questo splendido applicativo da piu’ tempo di me 😀
Altri file tipo : lockAccount interMedia ecc… servono per la definizione degli accessi (io creo un solo utente e gli do permessi ALL GRANT 😀 ).
Cmq spero un giorno che il lavoro mi dia la possibilità , come te, di poter smanettare un pò piu’ approfonditamente in questo campo 😀
Ti auguro una buona giornata
Flavio
Sfrutto il tuo commento per chiederti una info:
Ho creato un SYNONYMS (SQL_oracle_dschool> create public synonyms bacheca for bacheca@db1.oracle_db1) tra due Db che girano su due macchine separate oracle_dbschool e oracle_db1, vorrei avere delle statistiche sul numero di accessi che faccio sul synonyms… mi puoi dare qualche dritta???
Ti ringrazio..
Flavio
Che io sappia, questa particolare metrica non è catturata. Potresti provare a ricavarla indirettamente abilitando l’auditing o creando un trigger sul db che conta il numero di volte che un particolare statement viene eseguito): è una cosa contorta e che in un ambiente di produzione va attentamente valutata.
P.S.
Purtroppo Oracle, come RDBMS, ha avuto una discesa vertiginosa per quanto riguarda la qualità del software. Capisco il tuo entusiasmo nell’affrontare il db, e non voglio gettare acqua sul fuoco. Quello che posso dirti è che tieniti pronto a tutta una serie di problemi dovuti ad infiniti bug. Pensa che se vai sul sito del supporto, basta inserire un numero a caso e ottenere il corrispondente bug.
Se vuoi, puoi contattarmi anche via email
TI ringrazio per i tuoi preziosi consigli… non mancherò di assillarti tramite mail appena avrò problemi con il DB 😀
Ti auguro una buona serata
Flavio