8
votes

Erreur SQL7008 - Solution de contournement?

J'utilise le pilote JTOPEN JDBC pour une base de données universelle DB2. J'ai très peu d'expérience avec SQL au-delà des déclarations simples.

de Cette question , je vois que L'erreur que je reçois (SQL7008) est projetée lorsque vous essayez de "insérer / mettre à jour des lignes dans une table non journalisée lors d'une transaction" (paraphrasé).

Selon le chef de projet, notre dB n'est pas journalisé et ne sera pas de temps bientôt (ne me demandez pas pourquoi, je ne suis pas le DBA). Cependant, je travaille sur un projet où être capable de commettre tout en une fois (plutôt que d'autocommouver chaque fois qu'un exécution est appelé) est presque nécessaire (pas totalement requis, mais cela résoudrait beaucoup de problèmes sur la route).

Y a-t-il un moyen de contourner EROROR SQL7008 sans activer la journalisation?


0 commentaires

5 Réponses :


0
votes

La liste officielle de SQL7008 est Ici (do Ctrl-F pour SQL7008). On dirait que vous pouvez obtenir plus d'informations à partir du code de raison. Si vous obtenez le code de raison 3, il semble qu'il n'y ait aucune autre option en plus de la réalisation de la journalisation.

Si vous obtenez quelque chose d'autre que le code de raison 3, je suppose que vous avez plus d'options.

espère que cela aide.


3 commentaires

Où puis-je trouver le code de raison dans la sqléxception étant jetée? Je reçois SQLSTATE = 55019 et code d'erreur = -7008.


Si vous êtes à Java en regardant la sqlexception Y a-t-il quelque chose dans l'un de ses autres champs, comme le code du vendeur?


Malheureusement, il semble que ce soit la seule information que je suis donnée.



2
votes

Il existe une option qui peut être ajoutée à votre chaîne de connexion qui désactive le contrôle de l'engagement .

probablement comteMode = 0 fonctionnerait.


3 commentaires

L'option STIGMODE est destinée à une chaîne de connexion ODBC. Les propriétés JDBC ne sont pas identiques.


Malheureusement, il semble que la fonctionnalité Java connexe (que je sache) est Connection.SetransActionAlation (Niveau Int) . Malheureusement, la valeur correspondante de comteMode = 0 est connection.transaction_none , qui est retenue avec la note: Notez que la connexion.Transaction_none ne peut pas être utilisée car elle spécifie que les transactions spécifiques ne sont pas pris en charge.)


Désolé, je pensais que les chaînes de connexion étaient les mêmes.



21
votes

Le seul moyen de contourner son entourage sans permettre la journalisation est de désactiver isolation de transaction dans votre chaîne de connexion comme suit: xxx

La liste complète des propriétés JDBC peut être trouvé dans le Boîte à outils IBM pour Java JDBC Propriétés Documentation.


4 commentaires

Vous savez-vous si ce format d'URL est pris en charge par as400jdbcconnectionpOldataSource de la bibliothèque JTOPEN?


@Bencle AS400JDBCConnection Classe : Il y en a beaucoup Propriétés facultatives pouvant être spécifiées lorsque la connexion est créée. Les propriétés peuvent être spécifiées dans le cadre de l'URL ou dans un objet Java.Util.Properties. Voir IBM Toolbox pour Java JDBC Propriétés pour une liste complète des propriétés pris en charge par l'AS400JDBCDriver.


Ça y est ...! Bon type de. Je devais définir la transactionnement ("Aucun") dans l'objet DataSource.


Je vois que c'est une vieille mais je veux vraiment me comprendre. En définissant Aucun à l'isolement de la transaction, il aura-t-il une valeur par défaut au niveau de la base de données. Parce que je suis tombé sur un scénario de verrouillage mort long. Le niveau d'isolement a certainement aidé. Alors laissez-moi savoir combien fiable et positive cette suggestion!. Cependant James a mentionné que c'est une solution de contournement.



0
votes

Si vous travaillez sur les commandes CL. La commande suivante résout le problème: xxx


1 commentaires

C'est pour les personnes qui invoquent des scripts garés dans la machine source.



3
votes

J'ai trouvé que l'utilisation de sans à la fin de l'instruction DB2 résolve le problème, uniquement si vous utilisez l'insertion.

Lorsque j'essaye d'utiliser SET OPTION ENTER = * Aucun sur une instruction Supprimer, il semble ignorer le lieu de l'endroit, et il supprime tout, il arrive que j'essaie d'utiliser avec NC ou sans

Pour résoudre ce problème, effectuez l'une des opérations suivantes:

Activer la journalisation pour la table de base de données: Windows: ajoutez un paramètre CLI 'TXNISOLATION' avec la valeur "32" dans Vos paramètres ODBC sous "Outils administratifs". Cette option peut être trouvé sous: "Source de données" -> "Paramètres avancés" -> "Ajouter" -> "TXNISOLATION" comme bouton radio "NON COMMENCE".

AIX / UNIX : exécutez la commande DB2 suivante sur votre base de données: 'db2 Mettre à jour CLI CFG pour la section à l'aide de TXnisolation 32 '. Vérifier Ces paramètres avec la commande suivante: 'db2 obtenir cli cfg'

Solution SQL alternative SQL: (non spécifique au système d'exploitation): ajoutez 'sans "à la fin de votre commande de mise à jour SQL.

Plus d'infos ...


1 commentaires

Veuillez indiquer la partie la plus pertinente du lien, au cas où le site cible est inaccessible ou se transforme en permanence hors ligne. Voir Comment puis-je écrire une bonne réponse .