Search This Blog

23/12/2009

Password di dblink in chiaro

 Se chiedete a Sqldeveloper di generare il ddl di un dblink lui includerà la password in chiaro.
:-)

Cosa implica mettere un nuovo servizio

Vediamo un po cosa bisogna fare - in un mondo perfetto - per ogni servizio e/o applicativo aggiunto al sistema
  1. Script di avvio e spegnimento eventualmente automatico
  2. Backup/Restore
  3. Monitoring del servizio (controllo)
  4. Studiare la qualità di servizio
  5. Tuning
  6. Documentazione
Script di avvio/spegnimento ...
Per ogni servizio deve esserci uno script che ne permetta l'avvio o lo spegnimento del servizio controllando eventuali dipendenze.
Su sistemi Solaris 10+ questo richiede - se non esistente - la definizione di un servizio smf (method e manifest)

 

Backup/Restore
  Per ogni servizio è necessario avere un backup e una procedura di restore documentata ( vedi la parte documentazione). 
  I dati fondamentali di un'applicazione sono in linea generale due:
  1. I binari dell'applicazione stessa
  2. I dati specifici a questa installazione
Il primo punto non è fondamentale a patto che sia semplice re-installare l'applicazione stessa. Se dovesse essere necessario fare il backup dell'applicativo questa andrà ripetuta ad ogni upgrade di applicativo ma senza necessità di definire cadenze " regolari"
Il secondo punto è quello che vogliamo assolutamente salvare, stiamo parlando della configurazione e dei dati. Nel caso di un database sono le configurazioni  i dati esportati dal DB, per un webserver parliamo della configurazione e dei vari siti ad esso collegati.


E' FONDAMENTALE testare il ripristino anche su un altra macchina per essere certi di aver salvato tutto il necessario e avere una documentazione che al momento opportuno - solitamente con utenti e capi "alterati - si rivelera una mano santa.


Monitor (controllo) 
Serve avere un sistema che controllli il servizio per avvisare in caso di "down". Questo monitoring può esssere estremamente semplice come un controllo sul processo, una porta tcp con l'invio di una mail in caso di problema. Può anche essere più elaborato con snmp o altro.

Un classico esempio di test per un'applicativo web è di creare una pagina dinamica che esegue una query sul database e resituisce OK o KO in questo modo  si fa il test del webserver, sito, linguaggio usato e accesso alla base dati.
 
Qualità
 Tanti applicativi permettono di estrarre delle informazioni sulle prestazioni di un applicativo o in alternativa è possibile creare uno script che fa un test standard, misurando il tempo di esecuzione del test si può avere un idea dello stato dell'applicativo. Su Unix è possibile usare il comando time.

Raccomando di graficare queste performances tramite un programma come cacti o altro ( uso opennms).



Tuning
A seguito dell'analisi della qualità si può pensare di fare il tuning dell'applicativo, migliorare le capacità o la velocità di elaborazione del servizio. Questo aspetto è spesso complicato e va documentato sempre.


Documentazione
La documentazione che nessuno ama scrivere ma che tutti vorrebbero. Per semplificare vi consiglio di fare un wiki con:
una pagina per ogni server che contiene i dati di asset:
  • acquisto
  • garanzie
  • contratti
  • responsabile
  • luogo
  • Personalmente uso gli asset di opennms per questa parte, eventualmente potete generare dei report estraendo i dati dal postgreSQL di opennms. 

un run book per ogni modello hw e software. I miei runbook sono suddivisi nei seguenti capitoli ( vedi runbook example
  • Common operations:  link alle attività standard
  • Setup info:  Come creare un nuovo sistema o capire quello corrente
  • startup/shutdown: Come avviare e spegnere
  • Management tools: Strumenti per gestire
  • Administrative procedures: Come fare le cose standard
  • Maintenance procedures: Cosa fare a intervalli regolari o quando si richiede un aggiornamento
  • Information procedures: Come avere info sulla situazione corrente
  • Backup/Recovery: Procedure di backup e restore
  • Troubleshooting: Come individuare - e forse risolvere - un problema
  • Documentation: Link alla documentazione ufficiale e non del prodotto

Versione 0.9 da rileggere

22/12/2009

File tnsnames controllati per risolvere | Tnsnames checked for lookup

  # $TNS_ADMIN/tnsnames.ora
  # $HOME/tnsnames.ora
  # /var/opt/oracle/tnsnames.ora
  # /etc/tnsnames.ora
  # $ORACLE_HOME/network/admin/tnsnames.ora

1016762.102

19/12/2009

Chi è sd0 ? | who is sd0

Solaris ha vari nomi per i dischi a seconda che sia il kernel o altro a presentarli.
Ogni tanto si riceve un messaggio del tipo: sd0 is 100% full. Ma chi è sd0 per i  comuni mortali ?

Un trucco trovato online è




iostat -x | \
/usr/xpg4/bin/tail -n +3 | \
awk '{print $1}'>/tmp/f0.txt.$$ 
iostat -nx | \
/usr/xpg4/bin/tail -n +3 | \
awk '{print "/dev/dsk/"$11}'>/tmp/f1.txt.$$ 
paste -d= /tmp/f[01].txt.$$ 
rm /tmp/f[01].txt.$$
 
NB: 
 sd0 è un "instance name" 
cxtydz è un "device name" 

14/12/2009

ssd_max_throttle e ssd:ssd_io_time

Salve, oggi parliamo di I/O e in particolare del parametro ssd_max_throttle di Solaris.

Il controller collegato ai dischi fisici solitamente ha una cache - protetta o non - e una coda massima di comandi che è capace di gestire tramite una coda. Questa dimensione di coda ( solitamente chiamato scsi commands queue) varia molto da controller a controller quindi l'unico modo di conoscerlo è di cercare nella documentazione.

Quindi riassumendo, un applicativo richiede un IO, questo IO viene preso in carico dai vari livelli di LVM e file system (LVM, VxVM, ZFS ... ) che lo mandato ai driver, dal driver al controller fisico che lo mette in coda. Successivamente il controller manda le istruzioni ai dischi. Se queste attività non vengono eseguite in allora si ha un errore di IO


Ogni LUN considera che la coda del controller è di quindi per calcolare l'ipotetico valore di ssd_max_throttle si usa la seguente formula: 
MAX_QUEUE_CONTROLLER / NUMERO_DI_LUN il risultato va arrotondato al multiplo di 8 piu  vicino e mai sotto 8. (vedi sotto)

Se ho un controller con una queue da 512 e ho 50 LUN il numero è 10,24 arrotondato a 8 o16. Metto anche 16 perche la situazione calcolata è la peggiore: quella in cui ogni lun cerca di fare tutti gli I/O possibili. Questo caso estremo è utile per avere un numero di base ma va poi pensato con l'effettivo carico di I/O esistente.


Per vedere i limiti imposti basta guardare la colonna "actv" di iostat
 
ps:
ZFS aumenta di molto gli I/O visto che per ogni disco presente in un zpool ne fa uno stripe, quindi una richiesta da parte dell'applicazione di 1 I/O si trasforma in N richieste sul controller fisico, con N numero di dischi in stripe del zpool.

ps2: per gli hitachi 99xx con solaris 10 esiste il bug 6848081 risolto solo a dicembre 2009

13/12/2009

Studio di vmware 4

http://pubs.vmware.com/vsp40_i/wwhelp/wwhimpl/js/html/wwhelp.htm#href=welcome/welcome.html

Vmware iscsi alias and dell/sun storage

Hello just a note:

If on the software iscsi initiator alias is larger than 30 characters some iscsi storage controller will just not work

On vmware 3.5 and 4 the alias is generated from the dns domain and cannot be changed so if you have a long domain with lots of sub domains you may have a large alias.

AFAIK the only workaround is to change the host - esx(i )- domain.
This is bad

12/12/2009

Sistemi hardware che gestisco

In questo sabato mattina voglio provare a stilare una lista di tutti gli apparati hw con i quali gioco, studio o lavoro

Personali

  1.  Laptop Vaio
  2. Sun F280R
  3. Sun T3
  4. Sun Fire 3800 - a riposo


Ufficio

  1. Vari pc assemblati standard
  2. Vari mini itx ( prima versione del load balancer )
  3. Scheda 2 FXO 1 FXS
  4. Sun X2200 (vmware)
  5. Dell 2970 (storage)
  6. Cisco 1601R (vecchio)
  7. Cisco Pix 515E
  8. Switch Dlink con vlan
  9. Sun ray 1 e 2F

Quasi tutti i server stanno scomparendo nell'infrastruttura vmware :)

Dai clienti (qui si che si inzia a giocare)

  1. Sun Fire 20K
  2. Sun M5000
  3. Sun Blade 6000 con 6250

  4. Hds 9970
  5. Emc Clariion CX3-10 e Celerra
  6. Cisco MDS 9000
  7. McData 4400
  8. Vari server
  9. Sun X2100 e X2200
  10. Sun ray 270
  11. Sun J4200
  12. Cisco ASA 5550
  13. Barracuda spam firewall


Opennms and snmp traps

Let's open BEA.events.xml for example and take the first event

The mask element point to .1.3.6.1.4.1.140.625

CODEmaskelement>
   <mename>id</mename>
   <mevalue>.1.3.6.1.4.1.140.625</mevalue>
</maskelement>


Let's find out on bea's support page what this OID is about:
From http://e-docs.bea.com/wls/docs81/admin_ref/snmpcli5.html
QUOTE
Specifies the value of the trap's enterprise field, which contains the beginning portion of the OID for all WebLogic Server traps.


So


.1.3.6.1.4.1.140.625 is just the root OID for all weblogic server

traps. Looking in the file shows this maskelement as the only one

around.

So the diference between all the traps sended by BEA WLS

are based on the generic and specific stuff! Well , only the specific

as generic is always 6, but why?

Let's find out what generic is:

reading this page explains that

QUOTE
Standard generic traps are: coldStart, warmStart, linkDown, linkUp, authenticationFailure, egpNeighborLoss (...skipping....) For vendor specific traps, Generic trap type field is set to enterpriseSpecific(6)

Ok now we understand the 6 repeating over and over again

So the only way to differenciate traps comming from the same snmp agent is by reading the specific value!!!

It looks like we understand it all.

SURPRISE, on snmp version 2c generic and specifics doesn't exists anymore!!!
ARGGGG so how does opennms differenciate version 2c traps if no specific exists.

To


find the answer I travel around the web and the opennms code to find

out that all snmp v2c (and v3) traps are (sor of) converted to v1 traps.

How does opennms convert a V2c trap in a V1 trap:
reading some documentation
the first varbind in a V2c trap is the sysUpTimeOid used in the V1 traps
the last varbind is the snmp full trap OID (snmpTrapOID)

QUOTEsnmpTrapOID—Trap identification field. For generic traps, values are defined in RFC 1907, for vendor specific traps snmpTrapOID is essentially a concatenation of the SNMPv1 Enterprise parameter and two additional sub-identifiers, '0', and the SNMPv1 Specific trap code parameter.


Based on the opennms source code and comment on this page
QUOTE


The snmp trap enterprise OID, which if present in a V2 trap is the last
* varbind.
*
* ref - book 'SNMP, SNMPv2, SNMPv3..' by William Stallings, third edition,
* section 13.1.3




The snmpTrapOID can be divided in 3 parts:
lastVarBind = enterpriseOID.subID1.subID2


if the trap is a standard generic one, so snmpTrapOID is a know and standard one, then
generic = last subID of the trapId - 1 (why minus one, don't know and too lazy to find out now)
specific = 0

if the trap is a non standard one ( enterprise one )
generic = 6
specific = last sub-identifier (subID2)
the enterprise oid is extracted from the trapId minus subID2 and subID1 if subID1 is 0 (enterprise OID never ends with a 0)

date interval in pgsql

La funziona pgsql permette di estrarre tutte le date tra una data iniziale e finale passate come parametri

Next pgsql function allow to extract all dates between start and end date passed as argument

NB: api is a schema I use to put all my function on a database instance

select api.myinterval('2005-01-01','2005-01-05') -> 2005-01-02; 2005-01-03; 2005-01-04; 2005-01-05

CREATE OR REPLACE FUNCTION api.myinterval(date, date) RETURNS SETOF date AS '
DECLARE
i_from alias for $1;
i_to alias for $2;
current date;
BEGIN
current := i_from;
RETURN NEXT current;
WHILE (i_to - current <> 0) LOOP
current:=(current + 1);
RETURN NEXT current ;
END LOOP;
RETURN;
END;
' LANGUAGE 'plpgsql' VOLATILE;

Redo log size

Dimensione in MB ottimale per i redo log in questo momento

Optimal redo log size in MB

SQL> SELECT OPTIMAL_LOGFILE_SIZE || ' MB' AS OPTIMAL_LOGFILE_SIZE FROM V$INSTANCE_RECOVERY;