Oracle: Creazione Manuale di un Database

Oracle 11g - Database manual Creation

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

Creazione del tablespace
[sourcecode language=”bash”]
SQL> create tablespace school20
datafile ‘/home/oracle/app/oracle/oradata/db1/school20_01.dbf’
size 50m;

[/sourcecode]

dell’utente che avra’ accesso ad esso e dei permessi per accedervi
[sourcecode language=”bash”]
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]

[sourcecode language=”bash”]
[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

8 risposte a “Oracle: Creazione Manuale di un Database”

  1. 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.

    1. 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

  2. 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)

    1. 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

    2. 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

  3. 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

    1. 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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.