mardi 14 septembre 2010

java : exemple configuration log4j

un petit rappel sur les appenders :

Le logger et l'arborescence de classes associées, et la référence à son appender :
BATCH_HISTO_RET. A noter, qu'il n'y a pas d'additivité des loggers parents.


ce qui donne:


#23 - Batch historisation des retraitements
log4j.logger.fr.sncf.fret.bocorchestre.batch.reprise.impl.historisation.boc.retraitement=DEBUG, BATCH_HISTO_RET
log4j.additivity.fr.sncf.fret.bocorchestre.batch.reprise.impl.historisation.retraitement=false


L'appender associé au logger (avec du layout):


#23 - Batch d'historisation des retraitements
log4j.appender.BATCH_HISTO_RET=biz.minaret.log4j.DatedFileAppender
log4j.appender.BATCH_HISTO_RET.layout=org.apache.log4j.PatternLayout
log4j.appender.BATCH_HISTO_RET.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss} - %m%n
log4j.appender.BATCH_HISTO_RET.Prefix=batch_historisation_Retraitement_
log4j.appender.BATCH_HISTO_RET.Suffix=.log
log4j.appender.BATCH_HISTO_RET.Directory=/devel/logs_batch/historisationRetraitement/

oracle : exemple d'utilisation des HINT

Utilisation de HINT ... sous oracle. Ce n'est pas conseillé, mais parfois ça améliore considérablement les perfs ...


SELECT /*+ FIRST_ROWS */ *
FROM (SELECT *
FROM uneTableDeCommade tv
WHERE tv.no_cmd >= 1841541
AND tv.vers > 0
AND EXISTS (
SELECT 1
FROM uneTableActionCommande ta
WHERE tv.no_cmd = ta.no_cmd
AND tv.vers = ta.vers
AND ta.id_action > 0
AND ta.dh_deb >=TO_DATE ('01/03/2010 00:00:00','dd/mm/yyyy/ hh24:mi:ss'))
ORDER BY tv.no_cmd ASC)
WHERE ROWNUM <= 1000;

lundi 13 septembre 2010

oracle : savoir si une instance tourne ou non

il suffit de lister les process unix et de recherche le process smon

ex:

ps -ef | grep smon

ou on peut utiliser la commande tnsping qui s'appuie sur le tnsname.ora.

tnsping monSidDeBDD

Attention, cependant, plusieurs instance de BDD peuvent tourner sur les même port, et mon expérience m'a montré que si une base tourne alors le tnsping renvoie OK !!!

Donc, il vaut mieux utiliser la commande ps et connaitre le nom de BDD ou le nom du script de lancement ...

En fait, d'après oracle, la seule méthode permettant de savoir si une BDD tourne et de s'y connecter en "SQL*PLUS".

Si il est possible de s'y connecter alors cela signifie propablement que le listener n'est pas lancé ....

Pour le savoir lancer la commande suivante :

lsnrctl status

ou sur le shell des listeners :

lsnrctl
lsnrctl> status listener_name


ou une autre commande ps :

ps -ef | grep tnslsnr

ici, un cours complet

vendredi 3 septembre 2010

sites utiles

Un super site pour se rappeler l'ensemble des commandes shell :

Kit de survie Linux

Trouver a quel jar appartient une classe

Trouver des veilles versions d'applications (genre shockwave, adobe flex, etc ...)"

Cours de SQL standard

java : prettyPrint

voici, une petite fonction pour afficher de jolie tableau :

ce qui donne par exemple, pour ce petit main :


public static void main(String[] args) {
// TODO Auto-generated method stub
String [] unSeul = {"6"};
String [] deux = {"6","3"};
String [] quatre = {"6","3","4","6"};

System.out.println("1 = " + prettyPrint(unSeul));
System.out.println("2 = " + prettyPrint(deux));
System.out.println("3 = " + prettyPrint(quatre));
}



Le résultat est le suivant :


1 = {6}
2 = {6,3}
3 = {6,3,4,6}



public String prettyPrint(String [] tab)
{
StringBuffer buffer = new StringBuffer("{");
if(tab != null)
{
int length = tab.length;
for(int i = 0; i < length; i++)
{
if((length > 2 && i != length - 1) || (length == 2 && i == 0))
{
buffer.append(tab[i] + ",");
}
else
{
buffer.append(tab[i]);
}
}
}
buffer.append("}");
return buffer.toString();
}

jeudi 2 septembre 2010

BDD : ORACLE : sqlloader

Un petit exemple de script utilisant "sqlloader" pour charger un fichier excel de données (au format csv), et son fichier de controle "ctl" :

Tout d'abord, le fichier ctl :

1) La commande Load Data (charge les données)


--////////////////////////////////
-- Insertion des enregistrements
--////////////////////////////////
LOAD DATA
TRUNCATE
PRESERVE BLANKS
INTO TABLE MATABLE
FIELDS TERMINATED BY '\;'
TRAILING NULLCOLS
(
ID_CMD,
ID_VERS,
OPT_CORRECTION,
IND_SUCCES_TRAITEMENT
)



function my_log
{
echo `date '+%d/%m/%Y %H:%M '`" "$1 >> $path_log/$fic_log
}

##############################
# Initialisation des path
##############################

if [ $# -ne 2 ]
then
echo 'usage : '$0' [login] [password]'
exit 1
fi

ORACONN=$1
ORAPWD=$2
path_log=`pwd`
fic_ldr=`basename $0|cut -f1 -d"."`_`date '+%Y%m%d_%H%M%S'`.ldr
fic_log=`basename $0|cut -f1 -d"."`_`date '+%Y%m%d_%H%M%S'`.log
fic_dis=`basename $0|cut -f1 -d"."`_`date '+%Y%m%d_%H%M%S'`.dis
fic_bad=`basename $0|cut -f1 -d"."`_`date '+%Y%m%d_%H%M%S'`.bad
FIC=extract_MATABLE.csv
CTL=maj_MATABLE.ctl

##############################
# On teste la connexion a Oracle
##############################
sqlplus -s /nolog 1>/dev/null << FIN
WHENEVER SQLERROR EXIT FAILURE;
connect $ORACONN/$ORAPWD
FIN
if [ $? != 0 ]
then
echo "Connexion impossible (${ORACLE})"
exit 1
fi

ls $FIC 1>/dev/null 2>/dev/null
if [ $? = 0 ]
then
#################################
# sqlloader du fichier
#################################
dos2unix $FIC $FIC 2>/dev/null
sqlldr ${ORACONN}/${ORAPWD} control=$CTL data=$FIC log=$path_log/$fic_ldr bad=$path_log/$fic_bad discard=$path_log/$fic_dis silent='(header, feedback)' direct=false errors=100000 skip=1
if [ $? -ne 0 ]
then
my_log "Début de la mise à jour de la table MATABLE"
my_log "Erreur lors du chargement du fichier"
my_log "Detail des traitements dans le $path_log/$fic_ldr"
my_log "Detail des lignes en erreur dans le $path_log/$fic_bad"
my_log "Fin de la mise à jour de la table MATABLE"
echo 'Erreur lors du chargement du fichier '$FIC
echo '=> voir le fichier de log dans '$path_log/$fic_ldr
exit 1
fi
#################################
# Traitement du fichier
#################################
else
echo 'Fichier absent'
my_log "Début de la mise à jour de la table MATABLE"
my_log "Fichier absent"
my_log "Fin de la mise à jour de la table MATABLE"

mardi 24 août 2010

oracle : générer des fichier plat

Voici, un exemple simple sous forme de script sql ... pour pouvoir générer des fichiers plats, pour par exemple approvisionner une autre application ... comme un "data warehouse" :


SET feed OFF
SET pagesize 0
set linesize 1000
SET echo OFF
SET heading OFF
set trimspool on
set termout off

spool /chemin/fichier.txt

select * from table;

SPOOL off;

EXIT;