29 novembre 2007

Oracle XE e Apache

Sto provando, a tempo perso, Oracle Application Express come framework per lo sviluppo rapido di applicazioni web. Lo scopo sarebbe di appoggiarsi su XE per piccole applicazioni web collaborative da utilizzare in gruppi limitati di persone, con tecnologia Oracle (gratuita).
Una delle prime cose che ho notato è che XE poggia direttamente sul db per quanto riguarda il protocollo HTTP, quindi non c'è Apache, ma risponde direttamente il listener.
La seconda cosa è che virtualmente il database è piuttosto lento nel rispondere alle chiamate da web, anche per un piccolo bacino di utenti; un buon indizio di ciò è anche che di default il listener risponde solo per localhost sulla porta 8080.

Un buon metodo per pubblicare l'interfaccia di XE con la flessibilità, la sicurezza e la velocità di un webserver è di utilizzare Apache come reverse proxy con il modulo mod_proxy.

Installate Apache a corredo della vostra distribuzione preferita, selezionando anche, se necessario, il modulo mod_proxy. Apache può fare da proxy per vari protocolli, in questo caso utilizziamo il proxy HTTP mod_proxy_http.

Configurate un VirtualHost di Apache. L'esempio è il seguente:
<VirtualHost *>
ServerName sbrillo2-xe
ServerAdmin your@email.address

<Proxy http://localhost:8080/*>
Order deny,allow
Allow from all
</Proxy>

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>

In questo modo tutte le richieste mandate al server che risponde a sbrillo2-xe sulla porta 80 vengono automaticamente riindirizzate alla porta 8080 del loopback, con la possibilità ora di limitare gli accessi, impostare password HTTP, riscrivere gli URL.

C'è un ulteriore passo che si può fare: XE sarà comunque lento nelle risposte, visto che chi risponde non è sicuramente ottimizzato per servire pagine web. Possiamo utilizzare il modulo mem_cache, che sgrava il database da servire anche quegli oggetti statici che ogni pagina contiene. Aggiungete le seguenti righe nella vostra sezione del virtualhost:
<IfModule mod_mem_cache.c>
CacheEnable mem /
# 40 MB cache
MCacheSize 40960
MCacheMaxObjectCount 1000
MCacheMinObjectSize 1
# 20 KB max per oggetto
MCacheMaxObjectSize 20480
</IfModule>

modificando a piacere i valori di cache size, numero massimo di oggetti, dimensione massima degli oggetti da memorizzare, URL.

Ora la navigazione è molto più fluida e il vostro server è pronto per la pubblicazione su web. Nulla vi vieta, comunque, di usare reverse proxy come squid.
Da parte mia, servirebbe un po' di manualità nella programmazione.
Vi aggiornerò nel caso in cui riesca a mettere assieme una piccola applicazione.

25 novembre 2007

Modifica SPFILE in RAC

In ambiente cluster, per impostare il valore delle variabili nell'SPFILE per tutte le istanze, si usa la sintassi:
ALTER SYSTEM SET <parameter name>=<value> SCOPE=<scope> SID='*'
che ha effetto per tutte le istanze del cluster.

Ma, una volta assegnato il valore della variabile per tutte le istanze, come si fa a rimuovere il parametro per una sola istanza in caso di necessità?
Esiste una nuova estensione del comando ALTER SYSTEM:
ALTER SYSTEM RESET <parameter name> SCOPE=<scope> SID=<SID istanza>

20 novembre 2007

Multiplex controlfile con RAC e ASM

Avete creato un database RAC con ASM e vi siete trovati con un solo controlfile? Avete bisogno di duplicare il controlfile su più destinazioni o anche solo in posti diversi dello stesso storage?
Il problema maggiore è che ASM non è accessibile se non da un processo server di Oracle.

Ho elaborato un metodo molto efficace, che ho pubblicato sui forum Oracle.

Probabilmente al posto del punto 5 si può anche scrivere
restore controlfile from '+ASMDISK_DATA/prea/controlfile/current.256.636907509';
lasciando ad Oracle capire quali e quante sono le copie del controlfile da ripristinare, in quanto le conosce dal parametro control_files appena impostato.

19 novembre 2007

Oracle VM, prova 1

Ho provato ad installare Oracle VM su una coppia di server virtuali VMware :-), ma ho qualche difficoltà nell'installazione del server principale, che non riesce a vedere il resto della rete.
Qualche difficoltà ma alla fine tutto bene con il management server, basato su Enterprise Linux, OC4J e Oracle XE, tutto piuttosto automatico.

18 novembre 2007

Creazione RAC con script dbca

Ho avuto l'occasione di creare un database Oracle RAC senza poter usare dbca, ma avendo a disposizione degli script fatti creare a dbca in occasione della creazione del primo database di un cluster.
Infatti proprio lì stava il problema: volevo creare un database partendo da un nodo del cluster che non fosse il primo. Il problema era che dbca non riconosceva l'istanza ASM locale, forse perché installata su una home propria e nel contempo perché non era la prima.
L'installazione tramite gli script dbca avviene in modalità singola istanza; vengono solo aggiunte le cluster database views al catalogo, e i principali parametri di inizializzazione RAC. Alla fine degli script, però, ci si ritrova ancora un po' a largo, e serve qualche intervento manuale, riportato qui.
Gli interventi sui nodi diversi dal primo sono molto marginali: la modifica del pfile per farlo puntare all'spfile, la creazione delle directory *dump.

In pratica gli interventi finali, a database anche solo in nomount, consistono nella modifica di alcuni parametri (tra cui far diventare il database realmente in cluster con CLUSTER_DATABASE=TRUE), nella popolazione del tnsnames.ora per tutti i nodi del cluster (notare una delle poche applicazioni dei parametri *listener), e nella modifica dell'OCR per fargli riconoscere il nuovo database e le sue istanze.

Generalmente srvctl viene chiamato dai wizard come dbca durante le fasi di configurazione o installazione del database o dei servizi. Nel nostro caso (aggiunta di un database in cluster) Clusterware è piuttosto facile da configurare:
srvctl add database -d <name> -o <oracle_home>
A questo punto Clusterware vuole sapere solo quali sono le istanze associate:
srvctl add instance -d <name> -i <inst_name> -n <node_name>
Pochi parametri, quelli essenziali: il nome dell'istanza, a quale cluster è associata, e su quale nodo gira. Tutto qua.

14 novembre 2007

Old-style: Enterprise Manager Console

Siete anche voi dei fan della vecchia console di Enterprise Manager in Java?
Bene, prima di tutto, lo saprete già benissimo, non è sparita, ma è sempre presente nel client CD e nel companion CD: basta scaricarli e installarli.
Il funzionamento della console, però, sembra fermo alle funzionalità della release 9i. Nonostante ciò, a mio parere molte funzionalità sono sempre migliori di quelle riscritte in EM Database Control via web, incluso di default nella 10g. Il problema è che alcune di queste funzionalità hanno bisogno preferibilmente di un repository, ovvero di uno schema su un database Oracle, per salvare i propri dati.

Oggi ad esempio ho provato a configurare il Change Manager, che si basa sul repository di EM. Attenzione: il repository di EM versione Java è ancora quello della vecchia versione; non si tratta del nuovo repository di Enterprise Manager DB Control (10g).
Nell'help della Console c'è la sezione "Requirements before creating a standalone repository", in cui viene spiegato come creare il tablespace e l'utente per il repository. Le istruzioni funzionano anche per 10g, tranne per i permessi dell'utente/schema.

Per prima cosa bisogna creare il tablespace del repository, di circa 20M con un massimo di 2G, con un nome qualsiasi (io ho adottato OEM9REP). Probabilmente si può utilizzare SYSAUX, ma non vorrei che la presenza di segmenti "sconosciuti" nel tablespace possa dare fastidio al nuovo EM.
La "difficoltà" è nella creazione dell'utente: i privilegi/ruoli richiesti sono CONNECT, SELECT_CATALOG_ROLE, CREATE TRIGGER, CREATE PROCEDURE, EXECUTE ANY PROCEDURE, CREATE TYPE, EXECUTE ANY TYPE, SELECT ANY TABLE. C'è un problema: il ruolo CONNECT da 10gR2 in poi non ha gli stessi permessi che aveva nelle vecchie versioni; per la sola creazione del repository mancano i privilegi CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SYNONYM, CREATE DATABASE LINK, CREATE CLUSTER, CREATE SEQUENCE, ALTER SESSION. Volendo si possono riassegnare al ruolo CONNECT mediante l'esecuzione dello script ?/rdbms/admin/rstrconn.sql.
Il repository viene creato dall'interfaccia grafica alla prima connessione; vengono eseguiti una serie di script sql presi dall'installazione del client locale.

13 novembre 2007

Oracle VM

A sorpresa, Oracle ha annunciato la sua versione della virtualizzazione del sistema operativo, basata su Xen.

Da domani si potrà già scaricare gratuitamente dal sito. Immagino che saranno in molti a provare questa nuova tecnologia, me compreso. Molti, però, che dovranno avere almeno due server "vuoti" a disposizione, come si legge nel data sheet. Praticamente due macchine virtuali VMware :-)

05 novembre 2007

Limiti della log history

Tsè, ho perso due ore per una bazzeccola: RMAN mi ha dato un errore sul backup degli archivelog perché non trovava il record corrispondente nel controlfile.
Credevo che ciò fosse dovuto al parametro MAXLOGHISTORY di creazione del controlfile; in realtà avevo aspettato troppo tra un backup e l'altro, più della recovery window, quindi Oracle aveva cancellato le entry troppo vecchie dal controlfile, quelle più vecchie di CONTROL_FILE_RECORD_KEEP_TIME (in giorni); tra l'altro l'avevo impostato io con la policy di RMAN!

MAXLOGHISTORY ha senso solo in RAC. Praticamente dà il numero di righe della tabella V$LOG_HISTORY.
Il numero di entry varia dinamicamente, adattandosi alle esigenze della receovery window.