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