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'isolation ou un package pour chacun des quatre niveaux d'isolation.
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 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.
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 est défini sur SINGLE_ROW_PARAMETERS pour STMT_A
et sur MULTI_ROW_PARAMETERS pour STMT_B, ou si l'attribut mriIndicator de STMT_B est défini sur true,
l'attribut 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.
Syntaxe de la commande de fusion

(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:
- Vous pouvez spécifier les options dans n'importe quel ordre.
- 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 groupée, 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.
- -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.

>>-+--------------------------+--------------------------------->
'- -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 un récapitulatif des informations d'utilisation.