Quelquepart

Blog d'un consultant SAP

Vous êtes ici : Accueil>Mots clés>bw

BW

Migration BW3 - BI7 : vous reprendrez bien un peu de hash ?

Rédigé par Sébastien Hermann dans Général - aucun commentaire

Ce matin, j’étais tranquillement en train de m’occuper de ma migration, quand tout à coup l’un de mes chargements dump. Je suis interloqué car le dump apparait lorsque je lance l’infopackage, sur le mode actif. Pas en background comme cela arrive habituellement.

Log du dump :

Category : ABAP Server Resource Shortage
Runtime Errors : TSV_TNEW_PAGE_ALLOC_FAILED

What happened?
You attempted to extend an internal table, but the required space was not available.

Information on where terminated
Termination occurred in the ABAP program "SAPLRSSM_LOAD" - in "RSSM_RSSELDONE_READ". 
The main program was "RSAWBN_START ". 
In the source code you have the termination point in line 245 of the (Include) program "LRSSM_LOADU08".

Allant voir plus loin dans le log je me rend compte que le dump survient sur un select avec des conditions dynamiques.

Me voici donc partit pour débugger le tout. J’arrive rapidement à trouver la valeur des paramètres et après un petit tour dans SE16, je suis catastrophé. 6.8 millions d’entrées correspondent à cette sélection. Voici donc pourquoi le chargement dump. Ca fait un peu beaucoup de lignes à mettre dans une table interne...

En revanche j’ai du mal à m’expliquer pourquoi SAP fait ce chargement. La table RSSELDONE contient les paramètres de chargement de toutes les requests. Quel intérêt d’aller charger en mémoire tout l’historique des paramètres de sélection sur ma source ???

Après arrachage de poignées de cheveux et traitage de noms d’oiseaux des développeurs de Waldorf, j’ai fini par comprendre. SAP a ajouté un hash code dans cette table. Il n’était pas présent sur la version 3.x et se trouve dans la 7.x. Dès qu’on fait un chargement en BI7.x, le hash code correspondant est généré et stocké dans RSSELDONE. Mais quid des entrées 3.x lors d’une migration ? Et bien SAP a décidé que le PREMIER CHARGEMENT serait le parfait moment pour générer LA TOTALITE des hash code de chargement de la source correspondante !

Bon c’est bien, je sais maintenant pourquoi ca dump, mais ça ne m’aide pas à corriger. J'ai fini par trouver un programme standard qui permet de générer les hash code : RSSM_HASH_ENTRIES_CREATE. Malheureusement il a probablement été écrit par un stagiaire... son temps d'exécution est très très très (trop) long. Aussi, pour les besoins du projet, j'ai du faire une version light qui appelle directement la fonction standard de génération de hash, sans appeler des tonnes de fonctions inutiles autour...

2h plus tard, j’ai pu relancer mon infopackage qui a chargé sans problème mes données. Affaire classée !

Au cas où cette mésaventure vous arrive, voici le programme dont je me suis servi.

Télécharger le programme correctif

ZAL11 : Cure de rajeunissement pour AL11

Rédigé par Sébastien Hermann dans Application -

Le travail sur un datawarehouse nous confronte régulièrement à des injections de fichier. Et sur SAP, nous ne sommes pas gâté niveau outils...
J'entendais souvent mes collègues râler à propos de la transaction AL11, la seule chose dont nous disposons en standard pour naviguer sur le serveur SAP.

J'ai parcouru la toile à la recherche d'une solution de remplacement mais ne fut pas convaincu par ce que j'y ai trouvé, aussi j'ai pris mon courage (et mon clavier) à deux mains afin de réaliser ma propre solution : plus complète, plus lisible et avec l'ergonomie qui me sied (mais je ne crache pas dans leur soupe, j'ai d'ailleurs repris leur manière de déterminer l'icone relatif a chaque type de fichier).

Entièrement graphique, le programme "ZAL11" (tout simplement ;-) ) vous permettra de naviguer sur le serveur SAP, mais également :

  • D'ouvrir les fichiers avec votre application par défaut sur votre PC (excel pour les CSV par exemple)
  • D'ouvrir les fichiers avec un éditeur de texte sur votre PC
  • De télécharger ou télédécharger des fichiers
  • De gérer les fichiers/répertoires du serveur (ajout, copie, déplacement, renommage)
  • De compresser (tar+bz2) ou décompresser (zip, tar, gz, bz2) des fichiers et répertoires sur le serveur
  • De copier dans le presse-papier le chemin d'un fichier sur le serveur, ou d'accéder directement au répertoire d'un chemin contenu dans le presse-papier.

La gestion des raccourcis serveur de AL11 est conservée (et débuggée ;-) )
Vu qu'il s'agit de manipulation sur le serveur, chaque action demande une confirmation via un popup qui récapitule ce qui est en train d'être fait.

Le code a été écrit dans une optique de sécurité, de maintenabilité et de respect des normes de développement usuels. Il est entièrement documenté en anglais (25% de commentaires ajoutés par rapport au code brut).
La principale "entorse" aux règles est que le code est fourni dans un seul pavé de 3500 lignes au lieu d'être découpé en includes (top, class, pbo, pai, form). C'est volontaire afin de n'avoir qu'un seul code source à fournir. Néanmoins chaque partie est clairement délimitée et il ne devrait pas falloir plus d'une minute à un développeur pour recréer les includes nécessaires. Pour la même raison de simplicité de partage, aucune classe de message n'a été créée.

A noter : n’oubliez pas que vous aurez besoin de SAPLINK pour installer le programme.

Terminated change run : fonction RSDDS_AGGR_MOD_CLOSE

Rédigé par Sébastien Hermann dans Fonction - aucun commentaire

Lors d'une interruption de chargement d'une donnée de base, elle peut se retrouver complètement bloquée avec une erreur "Attributes for characteristic are locked by a terminated change run" (RSENQ 063 ou RSENQ 062) ou bien une erreur plus générale "Lock NOT set for: ...." (RSENQ 002)

Le cas peut être diagnostiqué en lançant le module fonction : RSDDS_AGGR_MOD_STATE_GET (ne rien renseigner en entrée), la table E_T_CHABASNM contiendra la liste des données de base bloquées. S'il n'y a aucun problème, la fonction renverra une exception.

Pour débloquer la situation il suffit de lancer le module fonction : RSDDS_AGGR_MOD_CLOSE

BW3 - Suppression des données d'un cube avec ses dimensions

Rédigé par Sébastien Hermann dans Application - aucun commentaire

L'accroissement de la taille des dimensions sur BW3 est un problème classique de l'équipe de maintenance. En effet, lors d'un cube chargé en "full" quotidiennement, le contenu du cube est généralement purgé au début du chargement.

Malheureusement cette étape de la process chain ne propose pas d'option pour supprimer également le contenu des dimensions. Ainsi leur taille croit jour après jour, finissant si l'on y prend pas garde par dépasser la volumétrie du cube lui même, entrainant ainsi une dégradation des performances de plus en plus prononcée, ainsi qu'un accroissement de la taille occupée par le cube sur le disque.

SAP a finit par se rendre compte de ce problème, et la version BI7 propose en option de supprimer le contenu des dimensions lors de la suppression du contenu d'un cube.
Pour les malheureux qui n'ont pas encore migré, il n'y a pas de solution standard, à part effectuer régulièrement une suppression manuelle du contenu des dimensions (prévoir un réveil a 3h du matin pour intervenir juste avant le chargement de la process chain...)

J'ai donc réalisé un petit ABAP spécifique afin de réaliser cette opération. Il vient remplacer le processus de suppression de contenu de cube dans les process chain. Il suffit de préciser en paramètre d'entrée le nom du cube pour que son contenu ainsi que ses dimensions soient supprimées.

A noter : n’oubliez pas que vous aurez besoin de SAPLINK pour installer le programme.

Envoyer des emails depuis SAP BW (2/2) : Process chain

Rédigé par Sébastien Hermann dans Général - aucun commentaire

Nous avons vu comment configurer le serveur SAP dans un précédent billet, il reste à planifier l'envoi d'alertes dans nos process chain.

Dans la transaction RSPC, vous pouvez ajouter un message pour chaque type de processus, par exemple sur le processus de lancement.

Faites un clic droit sur le processus et sélectionner "Créer message"

Un popup de sélection de variante apparait. Entrer un nouveau nom puis cliquer sur le bouton "Créer".

Un nouveau popup vous demande de saisir un libellé pour ce message. Saisissez le avec précaution. En effet ce libellé sera le SUJET de l'email envoyé par le message.

Vous arrivez alors sur le panneau de gestion du nouveau message. Le bouton "Editer document" permet de saisir le corps du message, le bouton "Gérer liste réception." permet de définir les destinataires.

Valider et sauvegarder. Une fois de retour sur la process chain, le message est affiché directement dans le rectangle du processus, et un clic droit sur ce processus vous affiche de nouvelles options "Gérer message" et "Supprimer message".