L'utilitaire GeneratePureQueryXml génère un fichier pureQueryXML
à partir d'un fichier en entrée. Le fichier en entrée peut être un fichier de script SQL contenant des instructions et des
informations d'attribut de curseur ou un fichier XML InfoSphere Optim Query Workload Tuner.
L'utilitaire GeneratePureQueryXml lit un fichier contenant des instructions SQL et des informations sur les instructions, et crée un fichier
pureQueryXML. Après avoir créé le fichier, utilisez l'utilitaire Configure pour préparer le fichier à l'utilisation avec
pureQuery Runtime. Une fois le fichier pureQueryXML
configuré, utilisez l'utilitaire StaticBinder pour créer et lier les packages DB2 contenant les instructions SQL dans le fichier pureQueryXML configuré.
La
rubrique contient les sections suivantes :
Syntaxe de la commande

(1)
>>-------java--java com.ibm.pdq.tools.GeneratePureQueryXml------>
>-- -username--ID-utilisateur-- -password--mot de passe-- -url--URL-JDBC-->
>--+---------------------------------------------+-------------->
| .-com.ibm.db2.jcc.DB2Driver-. |
'- -driverName--+-pilote-JDBC---------------+-'
>-- -pureQueryXml--nom-fichier-- -inputSql--nom-fichier--------->
>--+------------------------------------------------+----------->
| (2).- - - ------------------. |
'- -commentStart------+-indicateur_commentaire-+-'
>--+---------------------------------------+-------------------->
| .-NOT_SET-. |
'- -sqlLiteralSubstitution--+-DISABLE-+-'
'-ENABLE--'
>--+--------------------------------------+--------------------->
| .-;----------. |
'- -statementDelimiter -+-délimiteur-+-'
>--+------------------------------------------------------+----->
| .-HOLD_CURSORS_OVER_COMMIT-. |
'- -resultSetHoldability -+-CLOSE_CURSORS_AT_COMMIT--+-'
>--+----------------------------------------------+------------->
| .-CONCUR_READ_ONLY-. |
'- -resultSetConcurrency--+-CONCUR_UPDATABLE-+-'
>--+--------------------------------------------+--------------->
| .-TYPE_FORWARD_ONLY-----. |
'- -resultSetType--+-TYPE_SCROLL_SENSITIVE-+-'
'-TYPE_SCROLL_SENSITIVE-'
>--+--------------------------+--+--------+--------------------><
| (3) | '- -help-'
'-| Options de trace |-----'
Remarques:
- Vous pouvez spécifier les options dans n'importe quel ordre.
- La valeur par défaut est deux tirets (--)
- Pour la syntaxe, voir la description de ces options.
Pour
comprendre les conventions utilisées dans le diagramme, voir Lecture des diagrammes de syntaxe.
Description des options
- -username ID-utilisateur
- La variable ID-utilisateur indique l'ID utilisateur permettant de procéder à une authentification avec la base de données.
- -password mot_de_passe
- Indique le mot de passe permettant de procéder à une authentification avec la base de données.
- -url URL-JDBC
- Indique l'adresse URL JDBC à utiliser pour établir une connexion avec la base de données.
- -driverName pilote-JDBC
- Indique le nom qualifié complet du pilote JDBC à utiliser pour
établir une connexion avec la base de données. La valeur par défaut est com.ibm.db2.jcc.DB2Driver,
le pilote d'IBM® Data
Server Driver for JDBC and SQLJ.
- -pureQueryXml fichier
- Spécifie le chemin d'accès absolu ou relatif au fichier de sortie pureQueryXML.
- -inputSql fichier
- Indique le chemin relatif ou absolu d'un fichier de script SQL avec l'extension .sql ou d'un fichier XML avec l'extension .xml.
Pour plus d'informations sur le format du fichier script SQL, voir Format du fichier script SQL utilisé par l'utilitaire GeneratePureQueryXml.
Si un fichier XML est spécifié, il doit s'agir d'un fichier
InfoSphere Optim Query
Workload Tuner valide. Si le fichier XML n'est pas valide, une erreur est signalée.
Pour obtenir des informations sur l'exportation d'un fichier Query Workload Tuner, voir la documentation sur
InfoSphere Optim Query Workload Tuner.
Lors de la capture des instructions SQL, InfoSphere Optim Query Workload Tuner prend en charge les fonctionnalités suivantes :
- Pour les bases de données DB2 for Linux, UNIX, and
Windows, vous pouvez capturer des instructions SQL dans la mémoire cache
du package.
- Pour les bases de données DB2 for z/OS,
vous pouvez capturer les instructions SQL à partir de la mémoire cache de l'instruction. Vous pouvez exclure les instructions SQL exécutées par
InfoSphere Optim Query Workload Tuner en activant l'option Exclude dynamic queries issued by the capture process (Exclure les requêtes dynamiques émises par le processus de capture).
Si une instruction SQL figure plusieurs fois dans le fichier en entrée,
elle apparaît une seule fois dans le fichier de sortie
pureQueryXML. Pour savoir comment les doublons d'instructions SQL sont identifiés, voir Identification des instructions SQL en double dans un fichier SQL.
- -commentStart indicateur_commentaire
- Pour un fichier de script SQL, il indique la combinaison de caractères de début
qui identifie une ligne commentaire. Une ligne commentaire peut contenir les attributs de curseur
applicables à l'instruction SQL immédiatement après le
commentaire. Il s'agit par défaut de deux tirets (--).
Les caractères de début et de fin de commentaire /* et
*/ ne sont pas pris en charge pour cette option.
Cette option n'est pas prise en charge si le fichier en entrée est un fichier XML. Un message d'avertissement s'affiche, indiquant que l'option spécifiée est ignorée.
- -sqlLiteralSubstitution ENABLE|DISABLE|NOT_SET
- Indique si l'utilitaire GeneratePureQueryXml remplace les valeurs littérales des instructions SQL par des marqueurs de paramètre. Si la valeur par défaut
NOT_SET est définie, les valeurs littérales ne sont pas remplacées dans les instructions SQL. Le processus de substitution
de valeurs littérales SQL est identique au processus qui se produit lorsque pureQuery Runtime capture les instructions SQL avec la substitution
de valeurs littérales SQL activée.
La liste suivante indique les valeurs prises en charge :
- DISABLE
- Indique que l'utilitaire n'effectue pas de substitution de valeurs littérales.
Les instructions SQL ne sont pas modifiées.
La valeur de l'attribut de substitution
de valeurs littérales SQL est définie sur DISABLE dans le fichier de sortie pureQueryXML.
- ENABLE
- Indique que l'utilitaire remplace les valeurs littérales des instructions SQL par des marqueurs de paramètre. Les valeurs littérales SQL ne sont pas remplacées si l'utilitaire détermine que cela peut affecter les résultats de l'instruction SQL. Lors de la substitution de valeurs littérales SQL, les commentaires sont supprimés des instructions. Pour les instructions SQL où le remplacement de valeurs littérales SQL est effectué, les espaces multiples, notamment les espaces de début et de fin, sont remplacés par un seul espace.
L'utilitaire supprime les instructions SQL en double créées lors du processus de substitution de valeurs littérales SQL.
La
valeur de l'attribut de substitution de valeurs littérales SQL est définie sur ENABLE dans le fichier de sortie pureQueryXML.
- NOT_SET
- Indique que la substitution de valeurs littérales n'est pas effectuée sur ce fichier. Il s'agit de la valeur par défaut.
La valeur de l'attribut de substitution
de valeurs littérales SQL est définie sur NOT_SET dans le fichier de sortie pureQueryXML.
Lorsque pureQuery Runtime capture les instructions SQL dans un fichier pureQueryXML, le paramètre de substitution de valeurs littérales SQL du fichier est la valeur de la propriété
sqlLiteralSubstitution de pureQuery Runtime pour la capture des instructions.
Pour obtenir des informations sur la substitution de valeurs littérales SQL dans pureQuery Runtime, voir sqlLiteralSubstitution property.
Pour obtenir des informations sur l'attribut de substitution de valeurs littérales SQL lors de la fusion de fichiers
pureQueryXML, voir Utilitaire Merge.
- -statementDelimiter délimiteur
- Indique la combinaison de caractères utilisée dans le fichier script SQL
pour séparer les instructions. Il s'agit par défaut d'un point-virgule (;).
Cette option n'est pas prise en charge si le fichier en entrée est un fichier XML InfoSphere Optim Query
Workload Tuner. Un message d'avertissement s'affiche, indiquant que l'option spécifiée est ignorée.
- -resultSetHoldability mise en suspens
- Indique la mise en suspens de l'ensemble de résultats afin d'appliquer l'ensemble des instructions dans le fichier. La variable mise en suspens peut être définie sur l'une des valeurs suivantes :
- CLOSE_CURSORS_AT_COMMIT : mise en suspens de l'ensemble de résultats
définie de sorte que les curseurs se ferment sur validation. Cette valeur définit la valeur JDBC sur java.sql.ResultSet.CLOSE_CURSORS_AT_COMMIT.
- HOLD_CURSORS_OVER_COMMIT : mise en suspens de l'ensemble de résultats
définie de sorte que les curseurs se maintiennent sur validation. Cette valeur définit la valeur JDBC sur java.sql.ResultSet.HOLD_CURSORS_OVER_COMMIT.
La valeur par défaut est HOLD_CURSORS_OVER_COMMIT.
Dans les fichiers de script SQL, la valeur de mise en suspens peut être remplacée par une instruction SQL spécifique dans le fichier, en indiquant la mise en suspens dans une ligne de commentaire juste avant l'instruction SQL.
Pour les fichiers XML Query Workload
Tuner issus de DB2 for z/OS, la mise en suspens de l'ensemble de résultats de la préparation initiale d'une instruction SQL est stockée dans le fichier.
Si les informations de mise en suspens de l'ensemble de résultats se trouvent dans le fichier, l'utilitaire utilise cette valeur pour l'instruction SQL dans le fichier de sortie pureQueryXML.
Pour obtenir des informations sur la mise en suspens de l'ensemble de résultats pour les instructions SQL dans un fichier XML InfoSphere Optim Query Workload Tuner, voir Notes concernant le fichier de sortie pureQueryXML
- -resultSetConcurrency accès concurrent
- Indique le paramètre d'accès concurrent à appliquer à toutes les instructions pour l'ensemble de résultats.
Cette variable peut être définie sur l'une des valeurs suivantes :
- CONCUR_READ_ONLY : définit le mode d'accès concurrent des curseurs
sur lecture uniquement.
- CONCUR_UPDATABLE définit le mode d'accès concurrent des curseurs
sur actualisable.
La valeur par défaut est CONCUR_READ_ONLY.
Dans
les fichiers de script SQL, la valeur d'accès concurrent peut être remplacée dans une instruction SQL spécifique
en indiquant l'accès concurrent dans une ligne de commentaire juste
avant l'instruction SQL.
Pour obtenir des informations sur la configuration de l'accès concurrent d'ensemble de résultats pour les instructions SQL dans un fichier XML
InfoSphere Optim Query Workload Tuner, voir Notes concernant le fichier de sortie pureQueryXML
- -resultSetType type
- Indique le type d'ensemble de résultats à appliquer à toutes les instructions. Le
type peut être défini sur l'une des valeurs suivantes :
- TYPE_FORWARD_ONLY : définit le type d'ensemble de résultats
sur déplacement avant uniquement.
- TYPE_SCROLL_SENSITIVE : définit le type d'ensemble de résultats
sur sensible au défilement.
- TYPE_SCROLL_INSENSITIVE : définit le type d'ensemble de résultats
sur non sensible au défilement.
La valeur par défaut est TYPE_FORWARD_ONLY. Dans
les fichiers de script SQL, la valeur de type de l'ensemble de résultats peut être remplacée dans
une instruction SQL spécifique en indiquant le type d'ensemble de résultats dans une ligne de
commentaire juste avant l'instruction.
Pour obtenir des informations sur la configuration du type d'ensemble de résultats pour les instructions SQL dans un fichier XML
InfoSphere Optim Query Workload Tuner, voir Notes concernant le fichier de sortie pureQueryXML
- 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.
- -help
- Affiche des informations sur l'utilisation.
Notes concernant le fichier de sortie pureQueryXML
La liste suivante contient des informations concernant l'utilisation du fichier pureQueryXML :
- Lors de la création d'un fichier pureQueryXML à partir d'un fichier de script SQL ou d'un fichier XML InfoSphere Optim Query Workload Tuner, vérifiez que les critères suivants sont remplis pour chaque instruction SQL :
- Le texte de l'instruction SQL du fichier correspond à l'instruction SQL émise par l'application. La capitalisation et les blancs des instructions doivent correspondre.
- Les paramètres de mise en suspens, d'accès concurrent et de type de l'ensemble de résultats pour l'instruction SQL dans le fichier correspondent aux paramètres de l'instruction SQL émise
par l'application.
Si les informations ne correspondent pas, l'optimisation client pureQuery
ne permet pas de mettre en correspondance l'instruction SQL et celle émise par
l'application lorsque la propriété executionMode de pureQuery Runtime
est définie sur STATIC ou que la propriété capturedOnly de pureQuery Runtime est
définie sur TRUE.
Les éléments suivants s'appliquent lorsque le fichier en entrée est un fichier XML Query Workload Tuner :
- Le fichier XML contient certaines informations de registre spéciales pour les instructions SQL. Lorsque l'utilitaire GeneratePureQueryXml génère un fichier pureQueryXML à partir d'un fichier XML, les informations de registre spécial sont incluses dans le fichier pureQueryXML en tant que métadonnées. Des différences existent entre les informations de registre spécial capturées par
pureQuery Runtime et par Query Workload Tuner. L'utilitaire GeneratePureQueryXml inclut les informations
de registre spécial normalement capturées par pureQuery Runtime.
Lorsque vous configurez le fichier pureQueryXML à l'aide de l'utilitaire de configuration, vous pouvez spécifier l'option
-groupSQLBySpecialRegisters pour regrouper les instructions SQL dans le fichier en fonction des paramètres de registre spécial.
Vous pouvez également indiquer l'option -optionsFileForBind pour générer un exemple de fichier d'options StaticBinder contenant des options de liaison basées sur les paramètres de registre spécial. Pour obtenir des informations sur les options de configuration, voir Utilitaire Configure.
Pour obtenir des informations sur les données de registre spécial suivies et enregistrées par
pureQuery
Runtime, voir : Suivi des changements apportés au registre spécial DB2 à l'aide de l'optimisation de client pureQuery.
Vous
devez configurer une base de données DB2 for z/OS pour capturer des performances
de statistiques SQL dans un fichier InfoSphere Optim Query Workload Tuner
XML. Pour plus d'informations sur l'activation de la collection de statistiques, voir Capture des statistiques de performance DB2 for z/OS dans un fichier InfoSphere Optim Query Workload Tuner XML.
- Avant d'ajouter une instruction SQL au fichier pureQueryXML, l'utilitaire prépare l'instruction afin de collecter les métadonnées correspondantes. Si une valeur du registre spécial CURRENT SCHEMA figure dans le fichier XML, l'utilitaire utilise cette valeur lors de la préparation.
- Si l'utilitaire détermine que l'instruction SQL du fichier XML a été exécutée de façon statique, l'instruction n'est pas incluse dans le fichier de sortie
pureQueryXML.
- L'utilitaire GeneratePureQueryXml copie certaines statistiques du fichier XML dans le fichier de sortie pureQueryXML. Les statistiques du fichier XML en entrée dépendent du type et de la version de base de données et de la version de InfoSphere Optim Query Workload Tuner. Ces statistiques n'affectent pas la façon dont les instructions SQL du fichier pureQueryXML sont liées ou la façon dont pureQuery Runtime fait correspondre les instructions SQL avec les instructions émises par une application.
Lorsque l'utilitaire ne trouve pas d'informations d'horodatage pour les instructions SQL, l'utilitaire utilise l'heure et la date actuelles.
- Les attributs de curseur ne peuvent pas être spécifiés dans le fichier XML. Vous pouvez indiquer des attributs de curseur avec les options
-resultSetType, -resultSetHoldability et -resultSetConcurrency de l'utilitaire GeneratePureQueryXml. Les options s'appliquent à toutes les instructions SQL du fichier XML.
Pour les fichiers XML de DB2 for z/OS, la mise en suspens de l'ensemble de résultats de la préparation initiale d'une instruction SQL est stockée dans le fichier. Lorsque les informations de mise en suspens de l'ensemble de résultats se trouvent dans le fichier, l'utilitaire utilise cette valeur pour l'instruction SQL dans le fichier pureQueryXML de sortie.
pureQuery Runtime
prend en compte l'instruction SQL et les attributs de curseur de l'instruction
pour contrôler le mode d'exécution de cette dernière. Par exemple, vous pouvez configurer pureQuery Runtime pour qu'il exécute des instructions SQL de façon statique. Si l'instruction et les attributs du fichier
pureQueryXML ne correspondent pas à l'instruction et aux attributs de l'application,
pureQuery Runtime n'exécute pas l'instruction de façon statique.
- Si les instructions SQL du fichier de sortie pureQueryXML requièrent des options de liaison différentes pour une exécution statique, vous pouvez utiliser l'éditeur pureQueryXML
dans le plan de travail afin de regrouper les instructions SQL en ensembles d'instructions.
Vous pouvez ensuite spécifier des options de liaison différentes pour les ensembles d'instructions lorsque vous exécutez l'utilitaire StaticBinder.
Vous pouvez exécuter l'utilitaire StaticBinder
à l'aide de l'option -statementBindError en indiquant la valeur REMOVE ou MARK_INVALID.
L'utilitaire StaticBinder ignore les instructions SQL qui renvoient une erreur SQL lors du processus de liaison.
- Le fichier de sortie pureQueryXML ne peut pas être directement utilisé avec l'optimisation client pureQuery
pour exécuter des instructions SQL de façon statique. Avant d'utiliser
l'utilitaire StaticBinder, vous devez modifier le fichier
pureQueryXML au moyen de l'utilitaire Configure de sorte qu'il puisse être utilisé avec l'optimisation client pureQuery.
- Le fichier de sortie pureQueryXML ne contient pas d'informations relatives à l'exécution de l'application
telles que des informations sur la trace de pile et les registres spéciaux,
qui sont disponibles dans un fichier pureQueryXML créé lors de la capture
d'instructions SQL à partir d'une application utilisant l'optimisation client pureQuery.
- Le fichier pureQueryXML de sortie ne contient pas les informations d'instruction SQL
suivantes, utilisées par l'optimisation de client pureQuery
pour identifier une instructions en tant qu'instruction SQL au moment de l'exécution :
- Noms de colonne de clé autogénérés
- Index Noms de colonne de clé autogénérés
- Indicateur de clé autogénéré
Si une application utilisant l'optimisation de client pureQuery est configurée pour exécuter des instructions SQL de façon statique ou en mode capture uniquement, et utilise un fichier
pureQueryXML créé par l'utilitaire GeneratePureQueryXml, une instruction émise par l'application ne s'exécute pas de façon statique si l'instruction utilise l'une des trois fonctionnalités, même si le texte des instructions SQL est identique.
Dans l'exemple suivant, le fichier pureQueryXML c:\statements.pdqxml
est créé. Il contient des informations sur les instructions figurant dans le fichier de script SQL
c:\mystatements.sql. La valeur de l'option -
sqlLiteralSubstitution est définie sur
ENABLE afin de remplacer les valeurs littérales par des marqueurs de paramètres dans les instructions SQL.
java com.ibm.pdq.tools.GeneratePureQueryXml
-username db2admin –password mypass
–url jdbc:db2://localhost:50000/mydb
-sqlLiteralSubstitution ENABLE
–pureQueryXml "C:\statements.pdqxml" –inputSql "C:\mystatements.sql"
Identification des instructions SQL en double dans un fichier SQL
L'utilitaire GeneratePureQueryXml identifie deux instructions SQL comme doublon si le texte des deux instructions est identique, à l'exception des espaces de début et de fin, et si les attributs suivants sont identiques :
- Type de l'ensemble de résultats
- Accès concurrent de l'ensemble de résultats
- Mise en suspens de l'ensemble de résultats
Les deux entrées suivantes d'un fichier SQL sont considérées comme identiques. Pour les instructions SQL, seuls les espaces de début et de fin sont différents :
-- resultSetType=TYPE_FORWARD_ONLY
-- resultSetConcurrency=CONCUR_READ_ONLY
SELECT * FROM EMPLOYEE ;
-- resultSetType=TYPE_FORWARD_ONLY
-- resultSetConcurrency=CONCUR_READ_ONLY
SELECT * FROM EMPLOYEE ;
Les deux entrées suivantes d'un fichier SQL ne sont pas considérées comme identiques. Le nombre d'espaces dans les instructions SQL est différent :
-- resultSetType=TYPE_FORWARD_ONLY
-- resultSetConcurrency=CONCUR_READ_ONLY
SELECT * FROM EMPLOYEE;
-- resultSetType=TYPE_FORWARD_ONLY
-- resultSetConcurrency=CONCUR_READ_ONLY
SELECT * FROM EMPLOYEE;
Ces deux entrées de fichier SQL ne sont pas identiques car les attributs de curseur spécifiés sont différents :
-- resultSetType=TYPE_FORWARD_ONLY
-- resultSetConcurrency=CONCUR_READ_ONLY
SELECT * FROM EMPLOYEE;
-- resultSetType=TYPE_SCROLL_SENSITIVE
-- resultSetConcurrency=CONCUR_READ_ONLY
SELECT * FROM EMPLOYEE;
Les entrées suivantes se trouvent dans un fichier SQL en entrée. Les instructions SQL sont identiques, à l'exception des valeurs littérales.
SELECT * FROM EMPLOYEE WHERE EMPNO = '000010'
SELECT * FROM EMPLOYEE WHERE EMPNO = '000020'
SELECT * FROM EMPLOYEE WHERE EMPNO = '000030'
Si vous exécutez l'utilitaire GeneratePureQueryXml avec l'option
sqlLiteralSubstitution définie sur
ENABLE,
les valeurs littérales sont remplacées par un marqueur de paramètre et les doublons créés par le remplacement sont supprimés. Il en résulte une instruction SQL unique écrite dans le fichier pureQueryXML :
SELECT * FROM EMPLOYEE WHERE EMPNO = ?