Affichage des articles dont le libellé est oracle. Afficher tous les articles
Affichage des articles dont le libellé est oracle. Afficher tous les articles

24 juillet 2026

Décoder les CRM de la DSNATTACHMENT

 Pour consulter le contenu de CRM stockés en BDSN

SQL> select convert(utl_raw.cast_to_varchar2(dbms_lob.substr(ATTACHMENT)),'WE8ISO8859P15','UTF8') from DSNATTACHMENT where declarationid='digix-in-the-sky-with-diamonds' and idretour='digix';

<?xml version="1.0" encoding="UTF-8"?><gipmds:rapport xmlns:gipmds="http://www.gip-mds.fr/" message= "L'attestation employeur d'annulation ci-dessous a bien été prise en compte par France Travail. Pour toutes demandes d'information, merci de vous orienter vers votre plateforme dédiée dsn-info.fr. Une assistance téléphonique est mise en place." profil="DSN" type="44" version="v01r06"><envoi> <envoi_identification><idflux>...</idflux><version_norme>P26V01</version_norme><point_de_depot>01</point_de_depot><type_envoi>01</type_envoi><essai_reel>02</essai_reel><emetteur_siret>...</emetteur_siret><nom_logiciel>eDSN / HR Access</nom_logiciel><editeur_logiciel>Sopra HR Software</editeur_logiciel></envoi_identification><envoi_bilan> <envoi_etat>OK</envoi_etat> </envoi_bilan></envoi><declaration> <declaration_identification><rang>1</rang><nature>07</nature><type>04</type><fraction>11</fraction><ordre>...</ordre><id_annulation>...<declaration_bilan> <etat>OK</etat><declaration_contenu> <salaries>1</salaries> </declaration_contenu> </declaration_bilan><declaration_anomalie><description><code>ANN_001</code><categorie>non-bloquant</categorie><message>Votre demande d'annulation de l'attestation ... a bien été prise en compte par France Travail.</message></description></declaration_anomalie></declaration></gipmds:rapport>

12 juillet 2025

Collecter les données et produire un rapport AWR Oracle

Avec le pack "Diagnostic" Oracle permet d'obtenir un rapport d'activité grâce à AWR (Automatic Workload Repository). 

Un premier paramétrage consiste à définir un intervalle et une rétention (dans cet exemple : de 20mn et 30j - soit 43200 minutes). Pour cela des droits administrateur sont nécessaires :

sqlplus / as sysdba
SQL> begin
  2  dbms_workload_repository.modify_snapshot_settings(RETENTION=>43200, INTERVAL=>20);
3  end;
4  /
PL/SQL procedure successfully completed.

SQL> select *  from dba_hist_wr_control;

DBID,SNAP_INTERVAL,RETENTION,TOPNSQL,CON_ID,SRC_DBID,SRC_DBNAME
1260426948,+00000 00:20:00.0,+00030 00:00:00.0,DEFAULT,0,1260426948,hr9


Pour que ce rapport AWR ne soit pas vide (c'est à dire plein de commentaire "No data exists for this section of the report") il est aussi nécessaire d'activer le pack et les statistiques :


SQL> ALTER SYSTEM set CONTROL_MANAGEMENT_PACK_ACCESS = 'DIAGNOSTIC+TUNING';

6 mars 2025

Wallet Oracle et SQLPlus

Créer un wallet Oracle permet d'y stocker les mots de passe de coinnexion, et ainsi d'éviter de retrouver des sqlplus HR/PASSWORD dans les scripts d'exploitation

Exemple (sur une machine disposant du client Oracle)

La base est HR9DEV hébergée par le serveur HOST_HR9DEV, les comptes HR et JETSPEED. Nous allons créer des alias HR9DEV_HR et HR9DEV_JETSPEED.

Les commandes permettent d'indiquer le mot de passe en ligne. Pour éviter qu'il ne soit accessible dans l'historique de commande, préférer répondre à la question  qui sera posée.

mkdir $HOME/.wallet

chmod 700 $HOME/.wallet

cd $HOME/.wallet

mkstore -wrl . -create

Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
Enter password: *******
Enter password again: *******

mkstore -wrl . -createCredential HR9DEV_JETSPEED JETSPEED

Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
Your secret/Password is missing in the command line
Enter your secret/Password: ***
Re-enter your secret/Password: ***
Enter wallet password: *******

15 juin 2023

Oracle - Create database / env Linux - Importance du characterset

En cas de migration technique, prendre soin de bien choisir le « character set » de la base de données et de bien contrôler l'environnement Linux. Sans quoi lors de la bascule des données des caractères comme £ ou § utilisés par HR Access peuvent être dénaturés.

Commande de test côté Linux :

env|grep -E "LC_|NLS"
locale charmap
locale -a|grep fr_FR


Commande de test côté Oracle :

select * from nls_database_parameters where parameter like '%CHARACTERSET%' or parameter like '%LANGUAGE%';


Par exemple :

LINUX

LC_COLLATE=fr_FR@euro
LC_CTYPE=fr_FR@euro
NLS_DATE_FORMAT=YYYY-MM-DD-HH24.MI.SS
NLS_LANG=.WE8MSWIN1252
ISO-8859-15
fr_FR
fr_FR@euro
fr_FR.iso88591
fr_FR.iso885915@euro
fr_FR.utf8


ORACLE

NLS_DATE_LANGUAGE FRENCH
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET WE8MSWIN1252
NLS_LANGUAGE FRENCH

Il faut que les deux paramètres soient identiques.

25 avril 2022

Conditionner les ordres DDL Oracle créés par la RBF

Dans HR Access la chaine batch RBF produit des ordres DDL de création / mise à jour des tables du SGBD (fichier PSBBGJ00 PSBBGJ01 PSBBGJ02). Ceux-ci procèdent souvent d'un DROP suivi d'un CREATE.

Dans le cas ou l'objet n'existe pas encore, l'ordre de DROP va provoquer un erreur. Si on retire le DROP mais que l'objet existe, c'est le CREATE qui sera a l'origine d'une erreur. Quand on souhaite contrôler le bon déroulement des livraisons cela peut être gênant.

Oracle ne fournit pas de syntaxe spécifique, mais il est possible de coder en PL/SQL un conditionnement de l'ordre ou d'inhiber l'erreur. Un autre intérêt est de pouvoir relancer le script autant de fois que nécessaire quand on a rencontré un incident sur un des objets.

17 janvier 2022

Produire une sortie CSV avec SQLPlus Oracle

Ci dessous une opération très simple pour obtenir une sortie SQL de type CSV ... Il suffit de demander à Oracle de le faire pour vous :

set head on
set echo off
set markup csv on delimiter , quote on
select NORME1,NORME2,DATDSN,DATGIP from ZDFS join ZD00 on ZDFS.NUDOSS=ZD00.NUDOSS where CDSTCO='U3N' and CDCODE='000'

"NORME1","NORME2","DATDSN","DATGIP"
"DP21V01 ","DP22V01 ","2022-01-01-00.00.00","2022-01-25-00.00.00"

A noter : 

  • SET MARKUP CSV est disponible a compter de Oracle 12
  • Pour les champs de type CHAR les espaces de fin restent significatifs (par exemple en fin de "DP21V01 "). Pour ne pas les récupérer dans votre extraction, utilisez la fonction rtrim.

plus d'informations avec :
https://docs.oracle.com/.../generating-reports

et
https://docs.oracle.com/.../SET-system-variable

 

25 août 2021

Oracle - date de dernière mise à jour des données d'une table

Pour connaître la date de dernière mise à jour des données d'une table (insert ,delete etc ) il est possible de se baser sur la pseudo-colonne ora_rowscn (system change number niveau ligne) :


SQL> SELECT SCN_TO_TIMESTAMP(MAX(ora_rowscn)) as TIMAJ from ZYTD12 ;

TIMAJ
---------------------------
25/08/21 09:42:45,000000000

30 avril 2021

Exemple d'ordre SQL MERGE permettant de gérer soit un INSERT soit un UPDATE

Dans l'exemple suivant on a inséré une occurrence dans ZD05 d'un code de DRE. On corrige ensuite la ZDTD12 par un MERGE pour que l'occurrence soit créée (si nouvelle) ou modifiée (si existante).

Il s'agit d'une syntaxe SQL ou l'on va :

  • Présenter la table ciblée (MERGE INTO ... A)
  • Produire un SELECT indiquant les valeurs par défaut (USING ... B)
  • Indiquer le critère de mise en correspondance des listes A et B (ON A...=B...)
  • Indiquer quoi faire en cas de correspondance (WHEN MATCHED THEN UPDATE ...) 
  • Ou en cas de non correspondance (WHEN NOT MATCHED THEN INSERT...)


MERGE INTO ZDTD12 A
USING (SELECT NUDOSS, .... AS PGPDOS,'05' AS CDINFO,'0' AS TEVERO,1 AS NOMBRE,0 AS NULMAX,0 AS NUCMAX,
       '        ' AS TECPRT,SYSDATE AS TIMJIF FROM ZD00 WHERE CDSTCO = 'DRE') B
ON (A.NUDOSS=B.NUDOSS AND A.CDINFO=B.CDINFO)
WHEN MATCHED THEN UPDATE SET A.NOMBRE=B.NOMBRE, A.NULMAX=B.NULMAX
WHEN NOT MATCHED THEN INSERT (NUDOSS, PGPDOS, CDINFO, NOMBRE, TEVERO, NULMAX, NUCMAX, TECPRT, TIMJIF)
       VALUES (B.NUDOSS, B.PGPDOS, B.CDINFO, B.NOMBRE, B.TEVERO, B.NULMAX, B.NUCMAX, B.TECPRT, B.TIMJIF);
COMMIT;


24 juin 2020

ORA-01658: impossible de créer l'extent INITIAL dans le tablespace SYSAUX


Sur un environnement nouvellement créé, une erreur apparaît systématiquement en cas d'INSERT de données en table :


Caused by: java.sql.BatchUpdateException: ORA-01658: impossible de créer l'extent INITIAL pour le segment dans le tablespace SYSAUX



SYSAUX est un tablespace système. Sur les environnements HR Access il est couramment taillé à 2Go. Sur cet base il est sous-dimensionné. Après modification de l'allocation, l'erreur disparaît.
 
sqlplus / as sysdba 

SQL> alter database datafile '/oracle/DIGIX/database/sys/sysaux.dbf' resize  2G;

Database altered.

Merci à Christophe.

29 mai 2019

Select "over partition" pour ramener un libellé Francais, sinon ...


Ce qu'un collègue m'a trouvé pour ramener un libellé dans la DI31 quelles que soient les traductions disponibles ...

:-P

L'ordre suivant ne ramènera rien si le libellé n'existe qu'en anglais
select LILONG as LIBCOMP from HR.DI31 where CDSTDO||VACDST='&CODECOMP' and CDLANG='F'

L'ordre suivant ramènera deux lignes si le libellé est traduit dans les deux langues
select LILONG as LIBCOMP from HR.DI31 where CDSTDO||VACDST='&CODECOMP'  and CDLANG in ('F','U')

Avec cet exemple on prend dans l'ordre le libellé Français, sinon Anglais, Italien ...
Quelles que soient les traductions de l'objet un unique libellé sera affiché suivant l'ordre de préférence indiqué :
 
select LILONG from 
   -- on n'affiche que le libellé mais 
   -- le select dans DI31 est temporairement précédé d'un numéro de ligne
  (select
      row_number() over 
         -- ce numéro est réinitialise a rupture CDSTDO, VACDST
         (PARTITION by CDSTDO, VACDST 
         -- les lignes de la partition sont ordonnées suivant une transco numérique du code langue
         order by decode(CDLANG, 'F', 9, 'U', 8, 'I', 7, 'E', 6, 'B',5, 'D', 4, 'N', 3, 0) desc, CDLANG asc) as numero, 
      DI31.* 
  from HR.DI31)  
where
   -- on filtre ensuite sur le code souhaité et sur la premiere langue 
   CDSTDO||VACDST='&CODECOMP'  and numero = 1;
 
ex :

Enter value for codecomp: ZDUAA
LILONG
------------------------------------
Sociétés légales


Enter value for codecomp: ZDKUU
LILONG
------------------------------------
EIC Indicator

 
Enter value for codecomp: ZYPRF
LILONG
------------------------------------
Profesionales
 

6 février 2018

Bugs Oracle 12c - impacts sur HR Access

Les premières versions Oracle 12c (au moins jusqu'à la 12.1.0.2) souffrent d’un nombre important de bugs . Ces bugs peuvent altérer les performances mais aussi impacter les résultats retournés par les ordres SQL de façon aléatoire entraînant un risque important sur la validité des données.

Gabriel en a fait l'expérience lors de générations ... Il s'est rendu compte que les recherches à la liste des macros HR ne fonctionnait pas bien :

SQL> SELECT A.CDPREA,B.CDSTDO,B.CDINFO,A.NUPROE
FROM  AP35 A,AP30 B,AP20 C
WHERE  A.CDPROS  = 'AOODS'
AND    B.CDPROS  = A.CDPREA
AND    C.CDPROS  = A.CDPREA
AND    B.CDPROS  = C.CDPROS
AND    C.CDSTD2  = B.CDSTDO
ORDER BY CDPREA,CDSTDO,CDINFO
/
no rows selected


Mais en retirant le parallélisme de Oracle

SQL> alter session disable parallel query;
SQL> SELECT A.CDPREA,B.CDSTDO,B.CDINFO,A.NUPROE
FROM  AP35 A,AP30 B,AP20 C
WHERE  A.CDPROS  = 'AOODS'
AND    B.CDPROS  = A.CDPREA
AND    C.CDPROS  = A.CDPREA
AND    B.CDPROS  = C.CDPROS
AND    C.CDSTD2  = B.CDSTDO
ORDER BY CDPREA,CDSTDO,CDINFO

CDPRE CD CD NU
----- -- -- --
AO0DP OY Y1 02
AO0DP OY Y2 02
AO0DP OY Y3 02
AO0DP OY Y4 02
AO0DP OY Y5 02

...

Exemple de bugs Oracle (liste non exhaustive) :
  • Bug 23147905  Wrong Results with filtering on an aggregation expression
  • Wrong Results for a Query When "_ROWSETS_ENABLED" = TRUE (Doc ID 2079913.1)
  • Bug 20634449  Wrong results from OUTER JOIN with a bind variable and a GROUP BY clause in 12.1.0.2

Voyez avec le DBA à installer les Patch Set Update Oracle ... !

cf article du 22/08/2017 sur le site de la HotLine "Problème aléatoire Oracle version 12.1.0.2.0 sur les résultats retournés par certains ordres SQL" :
"Les clients concernés doivent donc appliquer le dernier « Patch Set Update » (actuellement en date de juillet 2017) disponible sur le site support d’Oracle dans la rubrique « Recommended Patch Advisor »."

11 janvier 2017

BLS-BBAD0015-ERREUR D'ACCES (TABLE RELATIONNELLE) : ZDAA/01/KJ/PREPA/000000000001000

Les programmes utilisant BLS ouvrent des curseurs sur les informations rattachées à leur processus. Dans certains cas (en particulier avec la chaîne d'export des données NOY), le nombre de curseurs ouverts dépasse le maximum autorisé :

*-------------------------- STEP120N ---------------------------*
*                    Exportation des données                    *
*---------------------------------------------------------------*
YIYZDBCG-BBAD0001-------------------------------------------------------------------------------------------------------
YIYZDBCG-BBAD0002-IDENTIFICATION DU PROGRAMME : BCG/7.000/2016-12-14-13.41.34/F/
YIYZDBCG-BBAD0003-DEBUT DE TRAITEMENT   - HORODATAGE DE DEBUT : 2016-12-21-12.37.00
YIYZDBCG-BBAD0004-LISTE DES PARAMETRES LUS
YIYZDBCG-BBAD0006-....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
YIYZDBCG-00000000-PA83V
YIYZDBCG-00000000-PA85 P  0003P
YIYZDBCG-BBAD0005-LISTE DES PARAMETRES INTERPRETES ET UTILISES
YIYZDBCG-BBAD0006-....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
YIYZDBCG-00000000-PA83V
YIYZDBCG-00000000-PA85 P  0003P
YIYZDBLS-BBAD0001-------------------------------------------------------------------------------------------------------
YIYZDBLS-BBAD0002-IDENTIFICATION DU PROGRAMME : BLS/7.000/2016-12-14-13.43.57/F/
YIYZDBLS-BBAD0003-DEBUT DE TRAITEMENT   - HORODATAGE DE DEBUT : 2016-12-21-12.37.00
YIYZDBLS-BBAD0015-ERREUR D'ACCES (TABLE RELATIONNELLE) : ZDAA/01/KJ/PREPA/000000000001000
 
 Pour Oracle,
ORA-01000: maximum open cursors exceeded

En général, la limite est placée à 5000 voire 6000 ...

Pour en connaitre la valeur exécuter :
select value from v$parameter where name = 'open_cursors'

Essayez de detacher du processus les informations qui ne contiennent pas de données.
Sinon demandez à l'administrateur de modifier le paramètre Oracle open_cursors.