Utilitaire Merge

La validation de schéma XML Vous pouvez fusionner deux fichiers pureQueryXML ou plus contenant des instructions SQL qui ont été capturées à partir d'une application et exécutées dans une source de données unique. XML peut être effectuée au niveau des fichiers pureQueryXML en entrée et les instructions SQL non utilisées peuvent être supprimées depuis le fichier de sortie fusionné.

Cette rubrique contient les sections suivantes :

Présentation

Vous pouvez fusionner les fichiers pureQueryXML de deux façons.

Utilisez un fichier pureQueryXML comme fichier de base si vous souhaitez que le fichier issu de la fusion conserve les ensembles d'instructions provenant de ce fichier. Les instructions SQL provenant des autres fichiers de la fusion sont placées dans un ensemble d'instructions sans nom créé par pureQuery à la fin du fichier obtenu.
Vous pouvez par exemple capturer des instructions SQL à partir d'une application dans un fichier appelé capture.pdqxml. Modifiez ce fichier pour organiser les instructions SQL qu'il contient en ensembles d'instructions, soit manuellement soit à l'aide de l'utilitaire Configure. Le fichier capture.pdqxml devient le fichier de base lors de l'utilisation de l'utilitaire Merge.
Recommandation : IBM® vous recommande fortement d'éditer les fichiers pureQueryXML en utilisant uniquement le plan de travail. Si vous éditez un fichier pureQueryXML en dehors du plan de travail, vous risquez de rendre le ficher inutilisable.

Si vous êtes dans l'obligation d'éditer un fichier pureQueryXML en dehors du plan de travail, dans la balise <statementSet> de l'ensemble d'instructions à modifier, définissez la valeur de l'attribut configureStatus sur REQUIRED, comme suit : configureStatus="REQUIRED". Puis, exécutez l'utilitaire Configure sur le fichier.

Un ensemble d'instructions dans un fichier QueryXML constitue la base d'un ou quatre packages(s) DB2, selon que vous vouliez un package pour un niveau d'isolement ou un package pour chacun des quatre niveaux d'isolement.

Pour les applications Java, exécutez l'utilitaire Configure sur capture.pdqxml pour que l'utilitaire puisse nommer les ensembles d'instructions. Ensuite, vous donnez une copie de ce fichier aux autres membres de votre équipe pour leur permettre de capturer les instructions de manière incrémentielle à partir d'autres chemins logiques de la même application. Chaque membre utilise sa copie comme fichier d'entrée, en le spécifiant comme valeur de la propriété pureQueryXml. Chaque membre attribue le nom du fichier contenant les instructions SQL supplémentaires qu'il capture à la propriété outputPureQueryXml. Ces membres de l'équipe vous donnent leurs fichiers de sortie, sur lesquels vous exécutez l'utilitaire Merge afin de créer un fichier contenant les instructions SQL provenant des fichiers ayant participé à la fusion. Si vous ouvrez le nouveau fichier, vous pouvez constater qu'il contient toujours les ensembles d'instructions qui se trouvaient dans le fichier de base. Les instructions SQL provenant des fichiers de sortie que les membres de votre équipe vous ont donnés se trouvent dans un nouvel ensemble d'instructions sans nom placé à la fin du nouveau fichier.

Vous pouvez fusionner au moins deux fichiers pureQueryXML sans spécifier l'un d'eux comme fichier de base.

Dans le fichier issu de la fusion, l'utilitaire Merge combine les instructions SQL provenant de tous les fichiers pureQueryXML en un seul ensemble d'instructions sans nom.

Remarque : Si l'option -baseFile n'est pas spécifié, le premier fichier de la liste des fichiers pureQueryXML est utilisé comme fichier de base. Il ne peut pas s'agir d'un fichier pureQueryXML créé pour capturer des instructions SQL supplémentaires lorsque les propriétés outputPureQueryXml et pureQueryXML sont spécifiées. Lorsque les deux propriétés sont définies, outputPureQueryXml contient les instructions SQL capturées n'apparaissant pas dans le fichier pureQueryXML défini par la propriété pureQueryXML.

Syntaxe de la commande de fusion

Lire le diagrammeSauter le diagramme
    (1)                                 
>>-------java com.ibm.pdq.tools.Merge--------------------------->

>--+---------------------+-------------------------------------->
   '- -baseFile--fichier-'   

                          .---------.      
                          V         |      
>--+- -inputPureQueryXml----fichier-+--+------------------------>
   '- -inputPureQueryXmlGroup--fichier-'   

>-- -outputPureQueryXml--fichier-------------------------------->

>--+--------------------------+--+--------------------------+--->
   |                      (2) |  |                .-FALSE-. |   
   '-| Options de trace |-----'  '- -showDetails--+-TRUE--+-'   

>--+---------------------------------------+-------------------->
   '- -removeSQLInactiveForDays----jours---'   

>--+--------------------------+--+--------+--------------------><
   |                .-FALSE-. |  '- -help-'   
   '- -validateXml--+-TRUE--+-'               

Remarques:
  1. Vous pouvez spécifier les options dans n'importe quel ordre.
  2. Pour la syntaxe, voir la description de ces options.

Pour comprendre les conventions utilisées dans le diagramme, voir Lecture des diagrammes de syntaxe.

Descriptions des options

-baseFile fichier
Indique le fichier pureQuery contenant les ensembles d'instructions que vous souhaitez conserver dans le fichier créé par l'utilitaire Merge, le cas échéant. Vous devez exécuter l'utilitaire Configure sur ce fichier avant d'exécuter l'utilitaire Merge.

Si une instruction SQL de l'un des fichiers que vous fusionnez procède à des mises à jour positionnées, et que l'instruction qui déclare le curseur de ce type de mise à jour ne se trouve pas dans le même fichier, l'utilitaire Merge recherche la déclaration du curseur dans les fichiers que vous fusionnez.

Par exemple, supposons que vous ayez capturé des instructions SQL issues d'une application Web mise en cluster, puis généré les trois fichiers pureQueryXML A, B et C. Vous utilisez le fichier C comme fichier de base pour le processus de fusion. Le fichier A contient l'instruction SQL S1, qui procède à une mise à jour positionnée. Toutefois, le fichier A ne contient pas d'instruction SQL S2, qui déclare le curseur qu'utilise S1. Par conséquent, l'utilitaire Merge recherche dans les fichiers B et C une instruction SQL qui déclare ce curseur. Si le fichier B ou C ne contient pas ce type d'instruction, l'utilitaire Merge ne fusionne pas l'instruction de mise à jour positionnée S1 et consigne un avertissement.

Si vous ne spécifiez pas de fichier de base, dans le fichier issu de la fusion, l'utilitaire Merge combine les instructions SQL provenant de tous les fichiers pureQueryXML en un seul ensemble d'instructions sans nom.

Remarque : Si vous ne spécifiez pas de fichier de base, le premier fichier en entrée pureQueryXML répertorié est considéré comme étant le fichier de base par défaut. Il ne peut pas s'agir d'un fichier pureQueryXML créé pour capturer des instructions SQL supplémentaires lorsque les propriétés outputPureQueryXml et pureQueryXML sont spécifiées. Lorsque les deux propriétés sont spécifiées, le fichier outputPureQueryXml contient des instructions SQL capturées qui n'apparaissent pas dans le fichier pureQueryXML file spécifié par la propriété pureQueryXML.
-inputPureQueryXml fichier
Indique les fichiers pureQueryXML à fusionner, leurs noms étant séparés par des espaces. Vous pouvez spécifier plusieurs chemins absolus ou relatifs. Si vous spécifiez un chemin relatif, il doit l'être par rapport au répertoire dans lequel vous exécutez la commande.

Si le chemin ou le nom d'un fichier contient un espace, placez l'entrée du fichier entre guillemets.

Pour spécifier plusieurs fichiers, le nom de fichier peut contenir le caractère générique *.

-inputPureQueryXmlGroup fichier
Indique les fichiers pureQueryXML à fusionner. Le fichier doit porter l'extension .grp. Vous pouvez spécifier un nom de fichier sur chaque ligne du fichier, en associant chacun à un chemin absolu ou relatif. Si vous spécifiez un chemin relatif, il doit l'être par rapport au répertoire dans lequel vous exécutez la commande.
Si le chemin ou le nom d'un fichier contient un espace, il n'est pas utile de placer l'entrée du fichier entre guillemets.
-outputPureQueryXml fichier
Indique le nom du nouveau fichier que l'utilitaire Merge va créer à partir des fichiers pureQueryXML que vous indiquez dans les options précédentes. Vous pouvez spécifier un chemin absolu ou relatif. Si vous spécifiez un chemin relatif, il doit l'être par rapport au répertoire dans lequel vous exécutez la commande.
-removeSQLInactiveForDays jours
Indique le nombre de jours qui doit s'écouler avant qu'une instruction SQL non utilisée soit supprimée, sur la base de l'horodatage de l'instruction. Si la variable jours est définie sur 0, toutes les instructions SQL sont écrites dans le fichier de sortie. Par défaut, toutes les instructions SQL sont écrites dans le fichier de sortie. Si la variable jours est définie sur un nombre positif, l'utilitaire Merge n'écrit pas d'instructions SQL dans le fichier de sortie si leur dernière utilisation remonte au nombre de jours indiqué par la variable à compter de la date du jour ou si elle est antérieure. Si la variable jours est définie sur 1, les instructions SQL ne sont pas écrites si leur dernière utilisation date du jour précédent ou est antérieure.

Par exemple, si la variable jours est définie sur 5 et que nous sommes le 25 novembre, les instructions SQL datées du 20 novembre et antérieures au 20 novembre ne sont pas écrites.

Si l'instruction SQL n'est pas horodatée, elle est écrite dans le fichier de sortie et horodatée selon l'heure et la date du jour. Par exemple, si une version antérieure d'un fichier pureQueryXML n'est autre qu'un fichier en entrée, l'instruction SQL n'est pas horodatée. En cas de version précédente d'un fichier pureQueryXML (version 3 ou antérieure), l'option est ignorée, toutes les instructions SQL sont écrites dans le fichier de sortie avec l'heure et la date du jour et un message s'affiche.

Si le statut de l'ensemble d'instructions est défini sur FINAL, les instructions remplissant les critères en termes de nombre de jours d'inactivité sont écrites dans le fichier de sortie pureQueryXML et l'utilitaire Merge consigne un message dans le fichier journal concernant l'instruction et la raison pour laquelle elle est conservée.

Un message est consigné dans le fichier journal pour les instructions SQL qui ne sont pas écrites dans le fichier de sortie pureQueryXML. Si l'option -showDetails est définie sur true, toutes les instructions non écrites dans le fichier de sortie s'affichent.

Remarque : Les instructions SQL ne sont pas écrites dans le fichier de sortie pureQueryXml, mais elles ne sont pas supprimées des packages DB2 préalablement liés à l'ensemble d'instructions. Les futures opérations de liaison effectuées à l'aide de l'ensemble d'instructions ne permettront pas de lier les instructions SQL supprimées, mais peuvent laisser une section vide dans le package. Pour supprimer les sections vides, il est possible d'appliquer l'option -cleanConfigure au fichier pureQueryXML à l'aide de l'utilitaire Configure. Utilisez alors l'utilitaire StaticBinder pour créer et lier des packages depuis le fichier pureQueryXML.
-showDetails TRUE|FALSE
Indique si l'utilitaire Merge doit afficher un récapitulatif de ses activités.
La valeur par défaut est FALSE.
Options de trace
Vous pouvez demander à ce que le fichier journalise les messages et préciser le niveau d'information à journaliser.
Lire le diagrammeSauter le diagramme
>>-+--------------------------+--------------------------------->
   '- -traceFile--nom_fichier-'   

>--+---------------------------+-------------------------------><
   |               .-OFF-----. |   
   '- -traceLevel--+-ALL-----+-'   
                   +-SEVERE--+     
                   +-WARNING-+     
                   +-INFO----+     
                   +-CONFIG--+     
                   +-FINE----+     
                   +-FINER---+     
                   '-FINEST--'     

-traceFile nom_fichier
Indique le chemin absolu ou relatif ainsi que le nom du fichier à utiliser pour la journalisation des informations relatives à l'opération.
Si le fichier existe déjà, pureQuery ajoute les nouveaux messages à la suite des messages déjà placés dans ce fichier. Par défaut, les entrées sont écrites dans System.err.
-traceLevel OFF|SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST|ALL
Indique le type d'informations à journaliser. Le niveau par défaut est OFF. Si vous ne spécifiez pas de fichier dans lequel écrire les entrées de journal et que vous associez cette option à une valeur autre qu'OFF, les entrées sont écrites dans System.err.
-validateXml TRUE|FALSE
Indique si la validation de schéma XML est effectuée dans les fichiers pureQueryXML en entrée à l'aide du schéma pureQueryXML. Si la valeur est définie sur TRUE, la validation est effectuée. Si la valeur est définie sur FALSE ou si l'option n'est pas définie, la validation n'est pas effectuée. La valeur par défaut est FALSE.

En cas d'échec de la validation de schéma par un fichier pureQueryXML, la fusion échoue. Le nom de fichier et l'erreur à l'origine de l'échec de la validation de schéma sont indiqués. Les fichiers suivants ne peuvent pas être validés. La première erreur de validation est rapportée, ainsi que l'échec de la fusion.

Seule l'édition actuelle ou la version précédente des fichiers pureQueryXML est validée (version 4 ou 3). En cas de détection d'une version antérieure du fichier pureQueryXML, la validation n'est pas appliquée à ce fichier.

-help
Affiche des informations sur l'utilisation.

Remarques sur le processus de fusion

Les remarques suivantes portent sur le processus de fusion :
  • Lors de la fusion de fichiers, les fichiers peuvent contenir la même instruction SQL avec différents attributs. La liste suivante explique comment l'utilitaire Merge gère les instructions SQL identiques avec différents attributs. Les descriptions supposent que STMT_A et STMT_B sont des instructions SQL identiques et que STMT_A se trouve dans le fichier de base et STMT_B dans un fichier fusionné dans le fichier de base :
    • Si l'attribut parameterType pour STMT_A est défini sur SINGLE_ROW_PARAMETERS et l'attribut pour STMT_B est défini sur MULTI_ROW_PARAMETERS ou si l'attribut mriIndicator de STMT_B est défini sur true, l'attribut parameterType pour STMT_A est défini sur MULTI_ROW_PARAMETERS.
    • Si l'attribut allowStaticRowsetCursors de STMT_A est défini sur false et l'attribut de STMT_B sur true, l'attribut de STMT_A est défini sur true.

      L'attribut n'est pas remplacé si la valeur dans STMT_A est déjà vraie ou si la valeur dans STMT_B est fausse ou vide ("").

    • Si l'attribut isBindable de STMT_A est défini sur true et l'attribut de STMT_B sur false, l'attribut de STMT_A est défini sur false.
    • Si le nom de curseur de l'instruction STMT_A n'est pas défini par l'utilisateur et que le nom de curseur de l'instruction STMT_B est défini par l'utilisateur, le nom de curseur dans STMT_A est remplacé par celui défini par l'utilisateur. Sinon, le nom de curseur n'est pas remplacé et un message est consigné.

      Si un nom de curseur défini par l'utilisateur se trouve dans un autre fichier en entrée ultérieur dans le processus de fusion, il est ignoré.

    • Si l'attribut isSETUsedAfterConnectionInit dans STMT_A est défini sur false ou NULL et que cet attribut est true dans STMT_B, il est remplacé par la valeur true. Sinon, l'attribut n'est pas modifié.
    • Pour l'attribut executionCount, la valeur est définie sur la valeur de l'attribut Integer.MAX_VALUE dans STMT_A ou sur la somme des valeurs de executionCount dans STMT_A et STMT_B si cette valeur est inférieure à la valeur Integer.MAX_VALUE.
    • Mettez à jour l'attribut lastUsedTimestamp sur la dernière valeur figurant dans STMT_A et STMT_B.
    • Mettez à jour l'attribut firstUsedTimestamp sur la première valeur figurant dans STMT_A et STMT_B.
    • Mettez à jour l'attribut maxStmtExecutionTime sur la plus grande valeur figurant dans STMT_A et STMT_B.
    • Mettez à jour les attributs maxBatchCount et batchExecutionTime sur la plus grande valeur figurant dans STMT_A et STMT_B.
    Dans les situations suivantes, l'utilitaire Merge consigne les modifications d'attribut ; la valeur d'attribut pour STMT_A n'est pas modifiée :
    • Si l'attribut parameterType de STMT_A est défini sur MULTI_ROW_PARAMETERS et que l'attribut parameterType de STMT_B est défini sur SINGLE_ROW_PARAMETERS.
    • Si l'attribut allowStaticRowsetCursors de STMT_A est défini sur true et s'il est défini sur false ou est vide dans STMT_B.
    • Si l'attribut isBindable dans STMT_A est défini sur false et est défini sur true dans STMT_B.
    • Si l'attribut cursorName dans STMT_A a un curseur défini par l'utilisateur et si STMT_B n'a pas de curseur défini par l'utilisateur.

    De plus, si deux instructions de fichiers pureQueryXML différents sont identiques à tous égards, sauf leurs entrées de trace de pile, les entrées de trace de pile différentes sont combinées pour l'instruction unique qui en résulte dans le fichier issu de la fusion.

  • Lors d'une fusion de fichiers, des registres spéciaux sont gérés de la façon suivante :
    • Si STMT_B contient des valeurs de vecteur de registre spéciales et aucun vecteur de registre spécial ne se trouve dans STMT_A, l'attribut de registre spécial incrementalSpecialRegValuesUsed dans STMT_A est défini sur la valeur trouvée dans STMT_B.
    • Si STMT_A et STMT_B contiennent des valeurs de vecteur de registre spécial, le vecteur de registre spécial de STMT_A est remplacé par une combinaison trouvée dans les deux instructions.
  • Dans le fichier de sortie fusionné, l'attribut XML sqlLiteralSubstitution est défini sur NOT_SET si l'une des deux instructions est définie sur true dans le fichier de base et tous les fichiers en entrée :
    • L'attribut XML sqlLiteralSubstitution ne se trouve pas dans le fichier.
    • La valeur de l'attribut XML sqlLiteralSubstitution est définie sur NOT_SET.
    L'attribut sqlLiteralSubstitution est ajouté au fichier de sortie fusionné même si l'attribut ne se trouve dans aucun fichier en entrée.
  • Dans le fichier de sortie fusionné, la valeur de l'attribut XML sqlLiteralSubstitution est définie sur DISABLE ou ENABLE si le fichier de base ou au moins un des fichiers en entrée a la valeur d'attribut XML sqlLiteralSubstitution définie sur DISABLE ou ENABLE.

    Dans le fichier fusionné, l'utilitaire Merge définit la valeur de l'attribut sqlLiteralSubstitution (DISABLE ou ENABLE) sur la valeur définie dans le dernier fichier en entrée.

    Si la valeur de l'attribut XML sqlLiteralSubstitution est définie sur DISABLE dans un ou plusieurs fichiers en entrée et sur ENABLE dans d'autres fichiers en entrée, l'utilitaire affiche un message d'avertissement.

  • Si le fichier issu de la fusion contient des ensembles d'instructions sans nom, vous devez exécuter l'utilitaire Configure sur ce fichier avant d'exécuter l'utilitaire StaticBinder.
  • IBM vous recommande vivement d'exécuter l'utilitaire Configure après avoir fusionné les fichiers de sorte que les résultats de la fusion puissent être utilisés avec l'utilitaire StaticBinder.

Commentaires